線性回歸之正則化(regularization)

文章目錄

  • 機器學習中的"防過擬合神器":正則化全解析
    • 1. 正則化:不只是"規矩"那么簡單
      • 1.1 魯棒性案例說明
    • 2. L1正則化:冷酷的特征選擇器
    • 3. L2正則化:溫柔的約束者
    • 4. L1 vs L2:兄弟間的較量
    • 5. 正則化的超參數調優
    • 6. 正則化的數學直覺
    • 7. 常見誤區
    • 8. 總結

機器學習中的"防過擬合神器":正則化全解析

1. 正則化:不只是"規矩"那么簡單

  • 想象一下,你正在教一個特別勤奮但有點死板的學生學習數學。這個學生能把所有例題背得滾瓜爛熟,但遇到稍微變化的新題目就束手無策——這就是機器學習中的**過擬合(Overfitting)**現象。

  • 正則化(Regularization)就是給這個"過于勤奮"的模型制定一些"規矩",防止它過度記憶訓練數據中的噪聲和細節,從而提高泛化能力。簡單說,正則化就是在損失函數中額外添加一個懲罰項,讓模型參數不要變得太大。

  • 正則化就是防止過擬合,增加模型的魯棒性robust。魯棒性調優就是讓模型擁有更好的魯棒性,也就是讓模型的泛化能力和推廣能力更加的強大。

1.1 魯棒性案例說明

  • 下面兩個式子描述同一條直線那個更好?
    0.5 x 1 + 0.4 x 2 + 0.3 = 0 5 x 1 + 4 x 2 + 3 = 0 0.5x_1+0.4x_2+0.3=0 \\ 5x_1+4x_2+3=0 0.5x1?+0.4x2?+0.3=05x1?+4x2?+3=0
  • 第一個更好,因為下面的公式是上面的十倍,當w越小公式的容錯的能力就越好。因為把測試集帶入公式中如果測試集原來是100在帶入的時候發生了一些偏差,比如說變成了101,第二個模型結果就會比第一個模型結果的偏差大的多。公式中
    y ^ = w T x \hat y=w^Tx y^?=wTx當x有一點錯誤,這個錯誤會通過w放大從而影響z。但w也不能太小,當w太小時正確率就無法保證,就沒法做分類。想要有一定的容錯率又要保證正確率就要由正則項來決定。
  • 所以正則化(魯棒性調優)的本質就是犧牲模型在訓練集上的正確率來提高推廣能力,W在數值上越小越好,這樣能抵抗數值的擾動。同時為保證模型的正確率W又不能極小。故而人們將原來的損失函數加上一個懲罰項,這里面損失函數就是原來固有的損失函數,比如回歸的話通常是MSE,然后在加上一部分懲罰項來使得計算出來的模型W相對小一些來帶來泛化能力。
  • 常用的懲罰項有L1正則項或者L2正則項
    L 1 = ∑ i = 0 m ∣ w i ∣ L 2 = ∑ i = 0 m w i 2 L_1=\sum_{i=0}^m|w_i| \\ L_2=\sum_{i=0}^m w_{i}^{2} L1?=i=0m?wi?L2?=i=0m?wi2?
  • L1和L2正則的公式數學里面的意義就是范數,代表空間中向量到原點的距離
    在這里插入圖片描述

2. L1正則化:冷酷的特征選擇器

  • L1正則化,又稱Lasso回歸,它在損失函數中添加的是模型權重的絕對值和:
    損失函數 = 原始損失 + λ * Σ|權重|
    

特點

  • 傾向于產生稀疏解(許多權重精確為0)

  • 自動執行特征選擇

  • 對異常值敏感

  • 在零點不可導

  • L1正則化自動選擇重要特征:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso# 設置支持中文的字體
# 使用SimHei字體,這是一種常見的中文字體,能夠正確顯示中文字符
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解決負號顯示問題,確保在圖表中正確顯示負號
plt.rcParams['axes.unicode_minus'] = False# 生成一些數據,其中只有3個特征真正有用
# 設置隨機種子以確保結果可重復
np.random.seed(42)
# 生成100個樣本,每個樣本有10個特征的隨機數據
X = np.random.randn(100, 10)
# 定義真實系數,只有前3個和第5個特征有用
true_coef = [3, 2, 0, 0, -1, 0, 0, 0, 0, 0]
# 生成目標變量y,通過線性組合X和true_coef,并添加一些噪聲
y = np.dot(X, true_coef) + np.random.normal(0, 0.5, 100)# 使用L1正則化(Lasso回歸)
# 創建Lasso模型實例,設置正則化參數alpha
lasso = Lasso(alpha=0.1)
# 使用生成的數據擬合模型
lasso.fit(X, y)# 查看學到的系數
# 使用stem圖顯示Lasso模型學到的系數
plt.stem(range(10), lasso.coef_)
# 在同一圖表上繪制真實系數,用紅色圓圈標記
plt.plot(range(10), true_coef, 'ro', label='真實系數')
# 添加圖例
plt.legend()
# 設置圖表標題
plt.title('L1正則化的特征選擇能力')
# 顯示圖表
plt.show()
  • 你會驚訝地發現,Lasso幾乎完美地識別出了哪些特征真正重要,哪些可以忽略!
    在這里插入圖片描述

3. L2正則化:溫柔的約束者

  • L2正則化,又稱權重衰減(Weight Decay)嶺回歸(Ridge Regression),它在損失函數中添加了模型權重的平方和作為懲罰項:
損失函數 = 原始損失 + λ * Σ(權重2)

其中λ是正則化強度,控制懲罰的力度。
特點

  • 使權重趨向于小而分散的值
  • 對異常值不敏感
  • 數學性質良好,總是可導

L2正則化在行動:

import numpy as np
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt# 設置支持中文的字體
# 使用SimHei字體,這是一種常見的中文字體,能夠正確顯示中文字符
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解決負號顯示問題,確保在圖表中正確顯示負號
plt.rcParams['axes.unicode_minus'] = False# 生成一些帶噪聲的數據
np.random.seed(42)
X = np.linspace(0, 1, 20)
y = np.sin(2 * np.pi * X) + np.random.normal(0, 0.2, 20)# 準備不同階數的多項式特征
X_test = np.linspace(0, 1, 100)
plt.scatter(X, y, color='blue', label='訓練數據')# 對比不同正則化強度
for alpha in [0, 0.001, 0.01]:model = make_pipeline(PolynomialFeatures(15),Ridge(alpha=alpha))model.fit(X[:, np.newaxis], y)y_test = model.predict(X_test[:, np.newaxis])plt.plot(X_test, y_test, label=f'λ={alpha}')plt.legend()
plt.title('L2正則化效果對比')
plt.show()
  • 運行這段代碼,你會看到隨著λ增大,曲線從過擬合(完美擬合噪聲)逐漸變得平滑,更接近真實的sin函數形狀。
    在這里插入圖片描述

4. L1 vs L2:兄弟間的較量

在這里插入圖片描述

特性L1正則化L2正則化
懲罰項Σw
解的性質稀疏非稀疏
特征選擇
計算復雜度高(需特殊優化)
對異常值敏感不敏感

經驗法則

  • 當特征很多且認為只有少數重要時 → 用L1
  • 當所有特征都可能相關且重要性相當時 → 用L2
  • 不確定時 → 用ElasticNet(兩者結合)
    在這里插入圖片描述
  • L 1 L_1 L1?更容易相交于坐標軸上,而 L 2 L_2 L2?更容易相交于非坐標軸上。如果相交于坐標軸上,如圖 L 1 L_1 L1?就使得是 W 2 W_2 W2?非0, W 1 W_1 W1?是0,這個就體現出 L 1 L_1 L1?的稀疏性。如果沒相交于坐標軸,那 L 2 L_2 L2?就使得W整體變小。通常為去提高模型的泛化能力 L 1 L_1 L1? L 2 L_2 L2?都可以使用。 L 1 L_1 L1?的稀疏性在做機器學習的時候,可以幫忙去做特征的選擇。

5. 正則化的超參數調優

選擇正確的λ值至關重要:

  • λ太大 → 欠擬合(模型太簡單)
  • λ太小 → 過擬合(模型太復雜)

可以使用交叉驗證來尋找最佳λ:

from sklearn.linear_model import LassoCV# 使用LassoCV自動選擇最佳alpha
lasso_cv = LassoCV(alphas=np.logspace(-4, 0, 20), cv=5)
lasso_cv.fit(X, y)print(f"最佳alpha值: {lasso_cv.alpha_}")

6. 正則化的數學直覺

為什么限制權重大小能防止過擬合?想象模型是一個畫家:

  • 沒有正則化:畫家可以用極其精細的筆觸(大權重)來完美復制訓練數據中的每個細節(包括噪聲)
  • 有正則化:畫家被迫用更粗的筆觸(小權重),不得不忽略一些細節,從而捕捉更一般的模式

7. 常見誤區

誤區

  • 認為正則化可以完全替代更多的訓練數據
  • 在所有特征上使用相同的正則化強度
  • 忽略特征縮放(正則化對尺度敏感!

8. 總結

  • 正則化就像給模型戴上的"緊箍咒",看似限制了模型的自由,實則讓它更加專注和高效。記住,在機器學習中,有時候"約束"反而能帶來"解放"——解放模型從訓練數據的桎梏中解脫出來,獲得更好的泛化能力。

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

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

相關文章

mapbox基礎,加載視頻到地圖

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言1.1 ??mapboxgl.Map 地圖對象1.2 ??mapboxgl.Map style屬性1.3 ??raster 柵格圖層 api二、??加載視頻到…

Linux系統的遠程終端登錄、遠程圖形桌面訪問、 X圖形窗口訪問

目錄 一、配置Ubuntu系統的網絡和用戶 1、設置虛擬機網絡為橋接模式 2.查看當前ip、子網掩碼、網關 3.修改配置文件 二、遠程終端登錄Ubuntu 三、使用XShell遠程連接 1、確保SSH服務已啟動 2、檢查SSH服務狀態 3、獲取樹莓派IP地址 4、Xming安裝好之后打開讓它在后臺…

多模態大語言模型arxiv論文略讀(三十一)

From GPT-4 to Gemini and Beyond: Assessing the Landscape of MLLMs on Generalizability, Trustworthiness and Causality through Four Modalities ?? 論文標題:From GPT-4 to Gemini and Beyond: Assessing the Landscape of MLLMs on Generalizability, Tr…

基于Matlab求解矩陣電容等效容值

1需求 仿真測試8*10階舉證電容等效容值。 2模型搭建 2.1打開simscape 在打開simulink之后打開simscape庫,Simscape庫位置如下 2.2搭建模型 在庫中尋找需要的元件搭建電路。 2.2.1基本元件 電阻電容電感等基礎器件,搭建電路之后需要對其進行幅值&…

【C++】 —— 筆試刷題day_22

一、添加字符 題目解析 這道題,給定兩個字符串A和B,字符串A的長度要小于B的長度; 現在我們要對A字符串添加字符,使得A字符串長度等于B字符串的長度,并且要求對應位置的字母盡量相等,然后求出來不相等的字符…

錯誤: 找不到或無法加載主類 HelloWorld,cmd窗口,java命令,提示

錯誤: 找不到或無法加載主類 HelloWorld 解決辦法 檢查classpath是否 .; 開頭的

手撕LLM(五):從源碼出發,探索多模態VL模型的推理全流程

前面我們分享了關于大語言模型的相關技術,包括前向推理、LoRa掛載、MoE模型、模型預訓練等;后續還是會基于MiniMindLM模型繼續分享關于大語言模型的SFT指令微調、LoRa微調、基于人類偏好的強化學習微調以及模型蒸餾相關的技術,請大家持續關注…

關于隔離2:ADC芯片

ADC可以稱作是模擬芯片領域的明珠。作為一種關鍵器件,ADC設計難度大,專利墻高,所以國內一直處于追趕的狀態。近年來,國產ADC發展極為迅速,逐漸在各項參數上趕上了國際主流水準。 模擬數字轉換器ADC連接著現實模擬世界…

【MySQL】前綴索引、索引下推、訪問方法,自適應哈希索引

最左前綴原則 對于INDEX(name, age)來說最左前綴可以是聯合索引的最左N個字段, 也可以是字符串索引的最左M個字符。 SELECT * FROM t WHERE name LIKE 張%其效果和單獨創建一個INDEX(name)的效果是一樣的若通過調整索引字段的順序, 可以少維護一個索引樹, 那么這個順序就是需要…

【Oracle專欄】Oracle中的虛擬列

Oracle相關文檔,希望互相學習,共同進步 風123456789~-CSDN博客 1.背景 在EXP方式導出時,發現 出現如下提示 EXP-00107: virtual column 不支持,因此采用expdp方式導出。于是本文針對oracle虛擬列進行簡單介紹。 2. 相…

Nacos深度剖析與實踐應用之-配置中心

📹 簡介 在微服務架構中,配置管理是至關重要的基礎能力。Nacos作為阿里巴巴開源的一體化動態服務發現、配置管理和服務管理平臺,其配置中心模塊提供了統一配置管理、動態配置推送、多環境支持等核心能力。相比傳統配置文件方式,Na…

gma 2.1.4 (2025.04.18) | GmaGIS V0.0.1a3 更新日志

安裝 gma 2.1.4 pip install gma2.1.4網盤下載: 鏈接:https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取碼:1pc8 注意:此版本沒有Linux版! 編譯gma的Linux虛擬機沒有時間修復,本期Linux版繼…

在 Node.js 中設置響應的 MIME 類型

在 Node.js 中設置響應的 MIME 類型是為了讓瀏覽器正確解析服務器返回的內容,比如 HTML、CSS、圖片、JSON 等。我們通常通過設置響應頭中的 Content-Type 字段來完成。 ? 一、什么是 MIME 類型(Content-Type)? MIME(…

SRS transcode支持 h264_nvenc 硬件解碼方案

文章目錄 SRS transcode支持 h264_nvenc 硬件解碼方案1、修改文件2、重新編譯3、使用 SRS transcode支持 h264_nvenc 硬件解碼方案 SRS 是開源的流媒體服務,但在使用 GPU 服務器時,想要通過硬件加速,目前官方是不支持的,所以簡單…

數字系統與編碼

1. 數字系統(Number Systems) 1.1 常見數字系統 系統基數符號集示例應用場景二進制20, 11010計算機底層電路、數據存儲八進制80-717Unix文件權限(如chmod 755)十進制100-942日常計算十六進制160-9, A-F0x1F內存地址、顏色編碼&a…

【PyTorch】訓練時跟OOM相關的提示信息

1. RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling cublasCreate(handle)

基于maven-jar-plugin打造一款自動識別主類的maven打包插件

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編…

多態的主要好處與不足

多態是面向對象編程的核心特性之一,它通過方法重寫、接口實現等方式實現“同一操作作用于不同對象時產生不同行為”。以下是多態的主要好處與不足: 多態的好處 1. 提高代碼靈活性和擴展性 開閉原則支持:新增子類時,無需修改現有…

excel解析圖片pdf附件不怕

背景 工作中肯定會有導入excel還附帶圖片附件的下面是我解析的excel,支持圖片、pdf、壓縮文件實現 依次去解析excel,看看也沒有附件,返回的格式是Map,key是第幾行,value是附件list附件格式都被解析成pdf格式Reader.jav…

python爬蟲 線程,進程,協程

0x00 線程 線程是一個執行單位,是在一個進程里面的,是共享進程里面的提供的內存等資源,使用多個線程時和使用多個進程相比,多個線程使用的內存等資源較少。進程像一座“房子”(獨立資源),線程是…