[有監督學習]2.詳細圖解正則化

正則化
正則化是防止過擬合的一種方法,與線性回歸等算法配合使用。通過向損失函數增加懲罰項的方式對模型施加制約,有望提高模型的泛化能力。


概述
正則化是防止過擬合的方法,用于機器學習模型的訓練階段。過擬合是模型在驗證數據上產生的誤差比在訓練數據上產生的誤差(訓練誤差)大得多的現象。過擬合的一個原因是機器學習模型過于復雜。正則化可以降低模型的復雜度,有助于提高模型的泛化能力。
在詳細了解正則化的方法之前,我們先看一下使用了正則化的模型如何防止過擬合。這里使用的數據是圖 2-7 中的訓練數據(灰色的數據點)和驗證數據(黑色的數據點)。這些數據點是對函數 添加了遵循高斯分布的隨機數而生成的。


▲圖 2-7 使用 加隨機數生成的數據


下面嘗試用線性回歸對這份數據建模。不斷在線性回歸中加入一次項、二次項……觀察隨著多項式的次數越來越大,訓練誤差和驗證誤差會如何變化。
不同次數d的訓練結果如圖 2-8 所示。此時,使用均方誤差計算使誤差最小的學習參數wi。一次線性回歸函數是,因此圖形是直線;二次線性回歸函數是 ,因此圖形是二次曲線;六次線性回歸函數是,它的圖形看上去是一個非常復雜的曲線。

▲圖 2-8 不同次數的線性回歸的訓練結果(對于同樣的數據,復雜的模型會發生過擬合)


不同次數的訓練誤差和驗證誤差如表 2-5 所示。我們可以看出隨著函數次數的增加,訓練誤差漸漸變小了。如果只看訓練誤差,那么六次線性回歸的誤差 0.024 是最小的,但此時的驗證誤差是 3.472,比訓練誤差大了很多。六次線性回歸是一個復雜的模型,雖然它減小了訓練誤差,但是由于過擬合,它的泛化能力很低。
▼表 2-5 次數與訓練誤差、驗證誤差的關系


接下來看一下對線性回歸應用正則化后的結果,如圖 2-9 和表 2-6 所示。正則化可以通過向損失函數增加懲罰項的方式防止過擬合。從圖 2-9 可以看出,正則化抑制了模型的復雜度,次數增加后驗證誤差也被抑制,從而防止了過擬合的出現。

▲圖 2-9 對不同次數的線性回歸應用正則化后的訓練結果(模型的復雜度得到了抑制)
▼表 2-6 應用正則化后的次數與訓練誤差、驗證誤差的關系


現在有許多正則化的方法。前面使用的回歸模型是被稱為嶺回歸(ridge regression)的具有代表性的回歸方法。下面的“算法說明”部分將介紹如何防止嶺回歸出現過擬合,從而提高它的泛化能力。


算法說明
在“概述”部分,我們了解了復雜模型的過擬合以及使用正則化防止過擬合的知識。復雜模型過擬合的一個原因是學習參數 wi的值太大(或太小)。表 2-7 列出了不同次數的線性回歸的學習參數。隨著次數的增加,學習參數的絕對值變大。
表 2-8 列出了使用正則化后的學習參數。使用正則化能夠抑制學習參數隨著次數增加而變大。
▼表 2-7 不同次數的學習參數

▼表 2-8 應用正則化后的不同次數的學習參數


為什么正則化可以抑制學習參數變大呢?這里以下面的嶺回歸的誤差函數為例進行說明。簡單起見,這里考慮對二次線性回歸應用正則化的情況:

等號右邊的第 1 項??????? 是線性回歸的損失函數。第 2 項 被稱為懲罰項(或者正則化項),是學習參數的平方和的形式。一般來說,懲罰項中不包含截距。

另外,α是控制正則化強度的參數,α越大,對學習參數的抑制越強;α越小,對訓練數據過擬合的可能性越大。


下面思考嶺回歸的損失函數 的最小化。
等號右邊的第 1 項其實是求使得與訓練數據 y 之間的誤差變小的任意 w0、w1、w2?的問題,右邊第 2 項(即懲罰項)是學習參數的平方和,因此學習參數的絕對值越大,損失函數整體的值就越大。由此可知,懲罰項具有“對絕對值大的學習參數給予損失變大的懲罰”的作用,這個作用可以抑制學習參數變大。


示例代碼
下面是對 sin 函數進行嶺回歸建模時的示例代碼。代碼中使用 PolynomialFeatures 方法創建了六次多項式。
▼示例代碼

# 使用一個簡單的正弦函數和噪聲數據來訓練和測試一個 Ridge 回歸模型,并計算預測值與真實值之間的均方誤差。import numpy as np
from sklearn.preprocessing import PolynomialFeatures # PolynomialFeatures是scikit-learn庫中的一個特征轉換類,用于將輸入數據進行多項式特征擴展。它的主要參數是degree,表示多項式的次數。
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_errortrain_size = 20
test_size = 12# np.random.uniform(low=0, high=1.0, size=None) 是 NumPy 中的隨機數生成函數,用于生成在閉區間 [low, high] 內均勻分布的隨機浮點數。
# 生成一個訓練數據的數組,其中 low=0 表示數據的下限,high=1.2 表示數據的上限,size=train_size 表示生成的數組大小為 train_size。
train_X = np.random.uniform(low=0, high=1.2, size=train_size)
test_X = np.random.uniform(low=0.1, high=1.3, size=test_size)
# 生成一個訓練標簽的數組,其中 np.sin(train_X * 2 * np.pi) 表示一個正弦函數,np.random.normal(0, 0.2, train_size) 表示一個均值為 0,標準差為 0.2 的正態分布噪聲。
train_y = np.sin(train_X * 2 * np.pi) + np.random.normal(0, 0.2, train_size)
test_y = np.sin(test_X * 2 * np.pi) + np.random.normal(0, 0.2, test_size)poly = PolynomialFeatures(6) # 創建了一個次數為 6 的多項式特征轉換對象。
# fit_transform方法會遍歷輸入數據,并根據多項式特征轉換的規則對每個數據點進行擴展。對于訓練數據,通過train_X.reshape(train_size, 1)將其轉換為一維數組,以便與PolynomialFeatures的輸入要求匹配。同樣,對測試數據進行相同的轉換。
train_poly_X = poly.fit_transform(train_X.reshape(train_size, 1))
test_poly_X = poly.fit_transform(test_X.reshape(test_size, 1))# 創建一個嶺回歸模型,其中alpha=1.0是嶺回歸的正則化參數
model = Ridge(alpha=1.0)
# 使用訓練數據train_poly_X和標簽train_y對模型進行訓練。
model.fit(train_poly_X, train_y)
train_pred_y = model.predict(train_poly_X)
test_pred_y = model.predict(test_poly_X)print(mean_squared_error(train_pred_y, train_y))
print(mean_squared_error(test_pred_y, test_y))

注:多項式特征轉換的目的是將原始數據轉換為更高維的數據,以便更好地表示數據的特征。通過添加更高次的多項式特征,可以捕捉數據中的非線性關系。

詳細說明
通過α控制正則化強度
下面來詳細看一下控制正則化強度的超參數α。圖 2-10 是使用不同的α 值時模型的可視化圖形。當 α 增大時,可以看出學習參數被抑制,圖形變得簡單。相反,當 α 變小時,對學習參數的絕對值變大的懲罰力度變緩,模型變復雜。另外,當α = 0?時,懲罰項始終為 0,因此等同于不使用正則化的線性回歸。一般來說,應一邊驗證誤差一邊對 α 進行調整,最終得到合適的 α。

▲圖 2-10 α 變化時的嶺回歸


嶺回歸和 Lasso 回歸
前面介紹了作為正則化方法的嶺回歸。嶺回歸的誤差函數的懲罰項是學習參數的平方和的形式,通過將該懲罰項改為其他形式,可以實現不同特點的正則化。除了嶺回歸以外,還有一種具有代表性的正則化方法——Lasso 回歸。Lasso 回歸的誤差函數如下:

Lasso 回歸的懲罰項是學習參數的絕對值之和,這一點與嶺回歸不同。嶺回歸和 Lasso 回歸計算學習參數時的情況分別如圖 2-11a 和圖 2-11b 所示。

▲圖 2-11 計算學習參數時的示意圖


綠線是線性回歸的誤差函數,藍線是懲罰項的相關函數。嶺回歸的懲罰項是學習參數的平方和,所以其圖形是圖 2-11a 所示的圓形;Lasso 回歸的懲罰項是絕對值的和,所以其圖形是圖 2-11b 所示的四邊形。原來的函數(線性回歸的誤差函數)與這些函數的交點就是帶有正則化項的誤差函數的最佳解。可以看出,在加入懲罰項后,圖 2-11a 的嶺回歸的學習參數得到了抑制。圖 2-11b 的 Lasso 回歸的情況與嶺回歸相似,學習參數同樣被抑制,但學習參數 w2?變為了 0。
Lasso 回歸計算的是函數與這種四邊形函數的交點,因此具有學習參數容易變為 0 的特點。利用這個特點,我們可以使用學習參數不為 0 的特征來構建模型,從而達到利用 Lasso 回歸選擇特征的效果。這樣不僅能提高模型的泛化能力,還能使模型的解釋變容易。

———————————————————————————————————————————

文章來源:書籍《圖解機器學習算法》

作者:秋庭伸也 杉山阿圣 寺田學

出版社:人民郵電出版社

ISBN:9787115563569

本篇文章僅用于學習和研究目的,不會用于任何商業用途。引用書籍《圖解機器學習算法》的內容旨在分享知識和啟發思考,尊重原著作者宮崎修一和石田保輝的知識產權。如有侵權或者版權糾紛,請及時聯系作者。
———————————————————————————————————————————
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20220.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java文件IO

White graces:個人主頁 🙉專欄推薦:Java入門知識🙉 🙉 內容推薦:JUC常見類🙉 🐹今日詩詞:東風吹柳日初長,雨馀芳草斜陽🐹 ??點贊 ??收藏??關注💬卑微小博主&…

Three.js 研究:4、創建設備底部旋轉的科技感圓環

1、實現效果 2、PNG轉SVG 2.1、原始物料 使用網站工具https://convertio.co/zh/png-svg/進行PNG轉SVG 3、導入SVG至Blender 4、制作旋轉動畫 4.1、給圓環著色 4.2、修改圓環中心位置 4.3、讓圓環旋轉起來 參考一下文章 Three.js 研究:1、如何讓物體動起來 Thre…

LeetCode # 1070. 產品銷售分析 III

1070. 產品銷售分析 III 題目 銷售表 Sales: ------------------ | Column Name | Type | ------------------ | sale_id | int | | product_id | int | | year | int | | quantity | int | | price | int | ------------------ (sale_id, year) 是這張表的主鍵&am…

“論SOA在企業集成架構設計中的應用”必過模板,突擊2024軟考高項論文

考題部分 企業應用集成(Enterprise Application Integration, EAI)是每個企業都必須要面對的實際問題。面向服務的企業應用集成是一種基于面向服務體系結構(Service-OrientedArchitecture,SOA)的新型企業應用集成技術,強調將企業和組織內部的資源和業務功…

VSCode界面Outline只顯示類名和函數名,隱藏變量名

參考鏈接 https://blog.csdn.net/Zjhao666/article/details/120523879https://blog.csdn.net/Williamcsj/article/details/122401996 VSCode中界面左下角的Outline能夠方便快速跳轉到文件的某個類或函數,但默認同時顯示變量,導致找某個函數時很不方便。…

mimkatz獲取windows10明文密碼

目錄 mimkatz獲取windows10明文密碼原理 lsass.exe進程的作用 mimikatz的工作機制 Windows 10的特殊情況 實驗 實驗環境 實驗工具 實驗步驟 首先根據版本選擇相應的mimikatz 使用管理員身份運行cmd 修改注冊表 ?編輯 重啟 重啟電腦后打開mimikatz 在cmd切換到mi…

Seq2Seq模型:詳述其發展歷程、深遠影響與結構深度剖析

Seq2Seq(Sequence-to-Sequence)模型是一種深度學習架構,專為處理從一個輸入序列到一個輸出序列的映射任務設計。這種模型最初應用于機器翻譯任務,但因其靈活性和有效性,現已被廣泛應用于自然語言處理(NLP&a…

醫院該如何應對網絡安全?

在線醫生咨詢受到很多人的關注,互聯網醫療行業的未來發展空間巨大,但隨著醫院信息化建設高速發展 醫院積累了大量的患者基本信息、化驗結果、電子處方、生產數據和運營信息等數據 這些數據涉及公民隱私、醫院運作和發展等多因素,醫療行業辦…

【QEMU中文文檔】1.關于QEMU

本文由 AI 翻譯(ChatGPT-4)完成,并由作者進行人工校對。如有任何問題或建議,歡迎聯系我。聯系方式:jelin-shoutlook.com。 QEMU 是一款通用的開源機器仿真器和虛擬化器。 QEMU 可以通過幾種不同的方式使用。最常見的用…

OrangePi AIpro--新手上路

目錄 一、SSH登錄二、安裝VNC Sevice(經測試Xrdp遠程桌面安裝不上)2.1安裝xface桌面2.2 配置vnc服務2.2.1 設置vnc server6-8位的密碼2.2.2 創建vnc文件夾,寫入xstartup文件2.2.3 給xstartup文件提高權限2.2.4 在安裝產生的vnc文件夾創建xsta…

C# 工廠模式學習

工廠模式(Factory Pattern)是一種創建型設計模式,它提供了一種創建對象的接口,而不是通過具體類來實例化對象。工廠模式可以將對象的創建過程封裝起來,使代碼更具有靈活性和可擴展性。 工廠模式有幾種常見的實現方式&…

Go 如何通過 Kafka 客戶端庫 生產與消費消息

文章目錄 0.前置說明1. confluent-kafka-go2. sarama3. segmentio/kafka-go4. franz-go選擇建議 1.啟動 kafka 集群2.安裝 confluent-kafka-go 庫3.創建生產者特殊文件說明如何查看.log文件內容 4.創建消費者 0.前置說明 Go 語言中有一些流行的 Kafka 客戶端庫。以下是幾個常用…

【Uniapp小程序】自定義導航欄uni-nav-bar滾動漸變色

效果圖 新建activityScrollTop.js作為mixins export default {data() {return {navBgColor: "rgba(0,0,0,0)", // 初始背景顏色為完全透明navTextColor: "rgba(0,0,0,1)", // 初始文字顏色};},onPageScroll(e) {// 設置背景const newAlpha Math.min((e.s…

踩坑:6年后為何不用GraphQL了?

GraphQL 是一項令人難以置信的技術,自從我在 2018 年首次開始將其投入生產以來,它就吸引了很多人的注意力。 在一大堆無類型的 JSON REST API 上構建了許多 React SPA 之后,我發現 GraphQL 是一股清新的空氣。 然而,隨著時間的推…

mybatis用map接收返回對象,不想讓數據類型為tinyint自動轉換為boolean,如何處理

在 MyBatis 中,當使用 Map 來接收查詢結果時,MyBatis 會根據列的數據類型自動選擇合適的 Java 類型來映射這些值。默認情況下,如果數據庫列是 TINYINT(1),MyBatis 可能會錯誤地將其映射為 boolean,因為它經常被誤解為只…

PPP認證兩種:PAP和CHAP,兩次握手和三次握手

CHAP(Challenge-Handshake Authentication Protocol,質詢握手認證協議)的設計理念是增強網絡認證過程的安全性。在CHAP的三次握手過程中,不直接傳送用戶的明文密碼,以此來提高安全性,具體步驟如下&#xff…

開源大模型源代碼

開源大模型的源代碼可以在多個平臺上找到,以下是一些知名的開源大模型及其源代碼的獲取方式: 1. **艾倫人工智能研究所的開放大語言模型(Open Language Model,OLMo)**: - 提供了完整的模型權重、訓練代…

springboot結合mybatis使用多數據源的方式

背景 最近有一個需求,有兩個庫需要做同步數據,一個Doris庫,一個mysql庫,兩邊的表結構一致,這里不能使用navicat等工具提供的數據傳輸之類的功能,只能使用代碼做同步,springboot配置多數據…

如何設置手機的DNS

DNS 服務器 IP 地址 蘋果 華為 小米 OPPO VIVO DNS 服務器 IP 地址 中國大陸部分地區會被運營商屏蔽網絡導致無法訪問,可修改手機DNS解決。 推薦 阿里的DNS (223.5.5.5)或 114 (114.114.114.114和114.114.115.115) 更多公開DNS參考: 蘋果…

ESP32-C3模組上實現藍牙BLE配網功能(1)

本文內容參考: 《ESP32-C3 物聯網工程開發實戰》 樂鑫科技 藍牙的名字由來是怎樣的?為什么不叫它“白牙”? 特此致謝! 一、藍牙知識基礎 1. 什么是藍牙? (1)簡介 藍牙技術是一種無線數據和…