機器學習之線性回歸(七)

機器學習之線性回歸(七)

文章目錄

  • 機器學習之線性回歸(七)
  • 一、線性回歸
  • 線性回歸超全指南:從“一條直線”到“正則化調參”的完整旅程
    • 0. 先對齊語言:標稱型 vs 連續型
    • 1. 問題形式化
    • 2. 損失函數全景
    • 3. 求解方法 1:最小二乘(Normal Equation)
      • 3.1 推導
      • 3.2 代碼
    • 4. 求解方法 2:梯度下降家族
      • 4.1 統一更新公式
      • 4.2 自己寫 SGD(單變量示例)
      • 4.3 sklearn 一鍵調用
    • 5. 特征工程三板斧
    • 6. 正則化:專治過擬合
      • 6.1 目標函數
      • 6.2 調參模板(GridSearchCV)
    • 7. 實戰:完整 Pipeline
    • 8. 面試 8 連擊
    • 9. 可視化:一條直線的前世今生
    • 10. 總結腦圖(文字版)


一、線性回歸

線性回歸超全指南:從“一條直線”到“正則化調參”的完整旅程

面向:想徹底吃透線性回歸、并能在面試/競賽/生產中直接落地的同學
代碼:可直接復制運行,覆蓋最小二乘、批量/隨機/小批量梯度下降、Ridge/Lasso、特征工程、調參模板


0. 先對齊語言:標稱型 vs 連續型

類型舉例能否做加減機器學習任務
標稱型 Nominal顏色{紅, 綠, 藍}、性別{男, 女}?分類
連續型 Continuous溫度 23.7 ℃、房價 512.3 萬?回歸

線性回歸只處理連續型目標變量 y。


1. 問題形式化

給定數據集 D={(x(i),y(i))}i=1m\mathcal{D} = \{(\mathbf{x}^{(i)}, y^{(i)})\}_{i=1}^{m}D={(x(i),y(i))}i=1m?,其中

  • x(i)∈Rn\mathbf{x}^{(i)} \in \mathbb{R}^nx(i)Rn(一行 nnn 個特征)
  • y(i)∈Ry^{(i)} \in \mathbb{R}y(i)R

我們希望學到一個函數
y^=f(x)=w?x+b\hat{y}=f(\mathbf{x})=\mathbf{w}^\top\mathbf{x}+b y^?=f(x)=w?x+b
使得預測誤差最小。為了寫矩陣方便,把 bbb 吸收進 w\mathbf{w}w
y^=Xw\hat{\mathbf{y}} = X\mathbf{w} y^?=Xw
其中

  • X∈Rm×(n+1)X\in\mathbb{R}^{m\times (n+1)}XRm×(n+1):最后一列全 1,把偏置 bbb 當做 w0w_0w0?
  • w∈Rn+1\mathbf{w}\in\mathbb{R}^{n+1}wRn+1:待求參數

2. 損失函數全景

名稱公式特點場景
MSE (L2)1m∣y?Xw∣22\frac{1}{m}|\mathbf{y}-X\mathbf{w}|_2^2m1?y?Xw22?光滑、可導默認
MAE (L1)1m∣y?Xw∣1\frac{1}{m}|\mathbf{y}-X\mathbf{w}|_1m1?y?Xw1?對異常值魯棒數據臟
Huber混合 L1/L2魯棒+光滑競賽
Quantile預測分位數金融風控

下文默認 MSE,因為閉式解 + 凸函數 + 可微。


3. 求解方法 1:最小二乘(Normal Equation)

3.1 推導

對 MSE 求導并令導數為 0:
?wLoss=?2X?(y?Xw)=0?X?Xw=X?y\nabla_{\mathbf{w}}\text{Loss}= -2X^\top(\mathbf{y}-X\mathbf{w})=0 \Rightarrow X^\top X\mathbf{w}=X^\top\mathbf{y} ?w?Loss=?2X?(y?Xw)=0?X?Xw=X?y
X?XX^\top XX?X 可逆,則
w=(X?X)?1X?y\boxed{\mathbf{w}=(X^\top X)^{-1}X^\top\mathbf{y}} w=(X?X)?1X?y?
時間復雜度:O(mn2+n3)O(mn^2+n^3)O(mn2+n3),特征 n>104n>10^4n>104 基本跑不動。

3.2 代碼

import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 1. 數據
X, y = fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 2. 手動最小二乘
X_b = np.c_[np.ones((X_train.shape[0], 1)), X_train]   # 加一列 1
w_exact = np.linalg.inv(X_b.T @ X_b) @ X_b.T @ y_train# 3. 預測
X_test_b = np.c_[np.ones((X_test.shape[0], 1)), X_test]
y_pred = X_test_b @ w_exact
print("MSE (Normal):", mean_squared_error(y_test, y_pred))

4. 求解方法 2:梯度下降家族

4.1 統一更新公式

wt+1=wt?η?wLoss\mathbf{w}_{t+1} = \mathbf{w}_t - \eta \nabla_{\mathbf{w}}\text{Loss} wt+1?=wt??η?w?Loss
對 MSE:
?wLoss=2mX?(Xw?y)\nabla_{\mathbf{w}}\text{Loss}= \frac{2}{m}X^\top(X\mathbf{w}-\mathbf{y}) ?w?Loss=m2?X?(Xw?y)

算法每次梯度計算量更新頻率優點缺點
BGD全量 mmm1 epoch/次穩定
SGD1 條mmm epoch/次快、可在線噪聲大
MBGDbbb 條(batch)?m/b?\lceil m/b\rceil?m/b? epoch/次折中需調 batch

梯度下降圖解:
在這里插入圖片描述

4.2 自己寫 SGD(單變量示例)

def sgd_linreg(X, y, lr=0.01, epochs=100, batch_size=32):m, n = X.shapeX = np.c_[np.ones(m), X]               # 加偏置w = np.random.randn(n + 1)for epoch in range(epochs):idx = np.random.permutation(m)for i in range(0, m, batch_size):sl = idx[i:i+batch_size]grad = 2/len(sl) * X[sl].T @ (X[sl] @ w - y[sl])w -= lr * gradreturn w

4.3 sklearn 一鍵調用

from sklearn.linear_model import SGDRegressor
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s  = scaler.transform(X_test)sgd = SGDRegressor(loss='squared_error',penalty='l2',        # Ridgealpha=1e-4,          # 正則強度 λlearning_rate='adaptive',eta0=0.01,max_iter=1000,random_state=42)sgd.fit(X_train_s, y_train)
print("MSE (SGD):", mean_squared_error(y_test, sgd.predict(X_test_s)))

5. 特征工程三板斧

  1. 標準化:梯度下降必須!
    StandardScalerRobustScaler(對異常值穩)。
  2. 多項式特征:線性不可分時升維
    from sklearn.preprocessing import PolynomialFeatures
    poly = PolynomialFeatures(degree=2, include_bias=False)
    X_poly = poly.fit_transform(X)
    
  3. 離散特征編碼:One-Hot 后當作數值即可。

6. 正則化:專治過擬合

6.1 目標函數

  • Ridge (L2)
    Loss=12m∥y?Xw∥22+λ∥w∥22\text{Loss}= \frac{1}{2m}\|\mathbf{y}-X\mathbf{w}\|_2^2 + \lambda\|\mathbf{w}\|_2^2 Loss=2m1?y?Xw22?+λw22?
  • Lasso (L1)
    Loss=12m∥y?Xw∥22+λ∥w∥1\text{Loss}= \frac{1}{2m}\|\mathbf{y}-X\mathbf{w}\|_2^2 + \lambda\|\mathbf{w}\|_1 Loss=2m1?y?Xw22?+λw1?
  • Elastic Net:L1 + L2 的加權組合。

6.2 調參模板(GridSearchCV)

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import RidgeCV, LassoCValphas = np.logspace(-3, 3, 20)
ridge = RidgeCV(alphas=alphas, cv=5)
ridge.fit(X_train_s, y_train)
print("Best α Ridge:", ridge.alpha_)

7. 實戰:完整 Pipeline

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.linear_model import Ridgepipe = Pipeline([('scaler', StandardScaler()),('poly', PolynomialFeatures(degree=2, include_bias=False)),('reg', Ridge(alpha=1.0))
])pipe.fit(X_train, y_train)
print("Test MSE:", mean_squared_error(y_test, pipe.predict(X_test)))

8. 面試 8 連擊

  1. 最小二乘一定可逆嗎?
    不一定,需 X?XX^\top XX?X 滿秩;不可逆時用偽逆或加 λI\lambda IλI(Ridge)。
  2. MSE vs MAE 對異常值?
    MSE 平方放大異常值;MAE 線性增長。
  3. 梯度下降為什么會震蕩?
    學習率過大 or 特征未標準化。
  4. L1 為什么能做特征選擇?
    解空間為菱形,最優解易落在頂點 → 某些權重=0。
  5. Ridge 與 Lasso 何時選?
    高維+稀疏 → Lasso;特征相關性強 → Ridge。
  6. 多項式升維后還是線性回歸嗎?
    參數 仍線性,對 特征 非線性。
  7. SGD 如何選 batch_size?
    小數據 32~256;GPU 訓練可 1024+。
  8. 如何監控收斂?
    loss vs epoch 曲線;早停(Early Stopping)。

9. 可視化:一條直線的前世今生

import matplotlib.pyplot as plt
plt.scatter(X_train[:,0], y_train, s=5)
plt.plot(X_test[:,0], ridge.predict(X_test), 'r')
plt.title("Ridge Regression on California Housing")
plt.show()

10. 總結腦圖(文字版)

數據 → 清洗/標準化 → 特征工程(多項式/離散化)  ↓選模型├─ 最小二乘(閉式解) —— 小數據、可解釋├─ 梯度下降家族 —— 大數據、在線學習│   ├─ BGD(全量)│   ├─ MBGD(batch)│   └─ SGD(單條)└─ 正則化├─ Ridge(L2)├─ Lasso(L1)└─ Elastic Net↓評估(MSE/R2/MAE) → 調參(α, degree, batch, lr) → 上線

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

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

相關文章

基于開源AI大模型、AI智能名片與S2B2C商城小程序源碼的用戶價值引導與核心用戶沉淀策略研究

摘要:在數字化商業生態中,用戶留存與核心用戶培育是產品成功的關鍵。本文聚焦開源AI大模型、AI智能名片與S2B2C商城小程序源碼的協同應用,探討如何通過技術賦能實現用戶價值引導與核心用戶沉淀。研究結合工業品供應鏈、美妝品牌、健康食品行業…

課題申報書成功率提升85%!借助大模型AI精準選題、搭綜述框架及提煉創新點(附實操AI提示詞)

大家好,感謝關注。我是七哥,一個在高校里不務正業,折騰用大模型AI實操的學術人。可以添加七哥(qige500)交流學術寫作或ChatGPT、Claude等學術大模型AI領域相關問題,多多交流,相互成就,共同進步。 寫一份高質量的課題申報書往往面臨許多困難,對很多同仁來說,難就難在…

Spring之【寫一個簡單的IOC容器EasySpring】

目錄 EasySpring 注解 EasyAutowired EasyComponent EasyComponentScan EasyLazy EasyPostConstruct EasyProtoType EasyValue Bean定義信息 EasyBeanDefinition 管理Bean定義信息 EasyBeanDefinitionRegister Aware EasyAware EasyBeanFactoryAware EasyBea…

Selenium動態網頁爬蟲編寫與解釋

使用Selenium來抓取動態網頁。動態網頁通常是指那些通過JavaScript動態加載內容的網頁,這些內容在初始HTML中并不存在,因此使用傳統的requests庫無法獲取到這些動態生成的內容。Selenium可以模擬瀏覽器行為,等待JavaScript執行并渲染頁面&…

element el-table中使用el-image圖片預覽被其他表格遮擋

或者::v-deep .el-table__cell {position: static !important;}

MyBatis與Spring整合優化實戰指南:從配置到性能調優

一、SqlSessionFactory配置最佳實踐 1.1 數據源配置優化 <!-- Spring配置示例 --> <bean id"dataSource" class"com.zaxxer.hikari.HikariDataSource" destroy-method"close"><property name"driverClassName" value&q…

LUA(初學)

條件語句if if then endlocal a 2 if a < 6 thenprint(a) end2條件語句if else if then else endlocal a 2 local b 3 if a > 6 thenprint(a) elseprint(b) end3while循環語句 while do endlocal a 2 while a < 5 doa a 1print(a) end3 4 5for循環語句 for do …

JMeter 連接與配置 ClickHouse 數據庫

其他人都需要好幾十積分提供jar包&#xff0c;我5積分提供給大家 jar包地址&#xff1a;https://download.csdn.net/download/weixin_41853064/91370401 1、將jar包內的文件放入jmeter/lib/exc目錄并重啟jmeter 2、配置jmeter JDBC連接 3、復制 click hourse的類名&#xff1…

Kmeams聚類算法詳解

文章目錄一、聚類任務的簡介1.1 聚類的核心特征1.2 聚類的典型應用場景二、Kmeans的思想和數學原理2.1 核心思想2.2 數學原理三、Kmeans計算過程示例3.1 數據集3.2 步驟1&#xff1a;確定K值并初始化簇中心3.3 步驟2&#xff1a;計算樣本到簇中心的距離并分配簇3.4 步驟3&#…

平升智慧水務整體解決方案,大數據驅動的智慧水務,讓城市供水更智能

平升電子智慧水務整體解決方案 智慧供水整體解決方案&#xff0c;在調度中心搭建智慧水務平臺&#xff0c;為供水各環節安裝智能測控設備&#xff0c;應用物聯網、互聯網、大數據、云計算、人工智能等新一代信息技術&#xff0c;構建智慧水務綜合管理系統&#xff0c;貫穿從水源…

Samba配置使用

主要作用&#xff1a;將Linux系統中的文件共享給windows配置過程&#xff1a;&#xff08;1&#xff09;打開命令終端&#xff1a;獲取超級用戶權限后運行以下指令:apt-get install samba&#xff08;2&#xff09;修改samba配置文件&#xff1a;gedit /etc/samba/smb.conf :找…

Datawhale AI數據分析 筆記

Part1&#xff1a;數據分析入門--信息統計知識點&#xff1a;什么是提示詞&#xff08;Prompt&#xff09;&#xff1f;在人工智能&#xff08;AI&#xff09;領域&#xff0c;"提示詞"是一個關鍵概念&#xff0c;它指的是輸入給AI模型的文本或指令&#xff0c;用于引…

JAVA青企碼協會模式系統源碼支持微信公眾號+微信小程序+H5+APP

Java青企碼協會系統源碼&#xff1a;構建全渠道數字化管理平臺&#xff08;多端融合精準服務&#xff09;在政策紅利與數字化轉型的雙重驅動下&#xff0c;青年企業協會正面臨資源對接低效、會員粘性不足、跨域協同困難等痛點。基于Java技術棧的青企碼協會系統&#xff0c;通過…

Python 中調用阿里云 OCR(Optical Character Recognition,光學字符識別)服務

在 Python 中調用阿里云 OCR&#xff08;Optical Character Recognition&#xff0c;光學字符識別&#xff09;服務&#xff0c;通常需要使用阿里云的 SDK。OCR 服務屬于阿里云“視覺智能&#xff08;Vision Intelligence&#xff09;”產品線的一部分&#xff0c;調用時需通過…

網絡基礎協議綜合實驗

本文結合所學的一些基礎網絡協議來完成一個綜合性的實驗&#xff08;實驗完整代碼放在最后&#xff09;會先說明使用協議的原理&#xff0c;然后分析具體在拓補圖中的應用過程&#xff0c;最后再給出配置明確實驗目標&#xff1a;拓撲分 核心層&#xff08;R1&#xff09;、匯聚…

圖機器學習(5)——無監督圖學習與淺層嵌入方法

圖機器學習&#xff08;5&#xff09;——無監督圖學習0. 前言1. 無監督圖嵌入2. 矩陣分解2.1 圖分解2.2 高階鄰接保留嵌入2.3 帶有全局結構信息的圖表示3. skip-gram 模型3.1 DeepWalk3.2 Node2Vec3.3 Edge2Vec3.4 Graph2Vec0. 前言 無監督機器學習是指訓練過程中不利用任何目…

lua中檢查靜態常量是否正確引用

lua中檢查靜態常量是否正確引用思路代碼因在項目開發中會出現引用了不存在的常量&#xff0c;為了方便檢查這種情況&#xff0c;所以想著添加針對性腳本check 思路 加載要檢查的常量結構到KEYWORD通過gmatch匹配指定路徑下的所有文件&#xff0c;依次檢查引用到目標變量的key是…

考完數通,能轉云計算/安全方向嗎?轉型路徑與拓展路線分析

不少網工考完 HCIE數通 后&#xff0c;都會面臨一個現實問題&#xff1a;“能不能往云計算、安全這些熱門方向轉&#xff1f;”可以&#xff0c;而且非常值得。但怎么轉、學什么、有沒有路線圖&#xff0c;是關鍵。一、為什么考完HCIE數通后適合轉方向&#xff1f;技術基礎扎實…

2.邏輯回歸、Softmax回歸——鳶尾花大作戰

邏輯回歸 邏輯回歸其實并不是回歸&#xff0c;而是一個分類算法 分類問題&#xff1a;郵件分類、圖像識別、疾病診斷、文字情感分析、金融欺詐檢測 根據歷史數據&#xff0c;預測樣本是屬于哪個類別&#xff0c;通過數據擬合分界 主要用于二分類任務 邏輯回歸公式 事實上是在多…

【Lucene/Elasticsearch】**Query Rewrite** 機制

這段話描述的是 Lucene/Elasticsearch 的 **Query Rewrite** 機制&#xff0c;核心一句話&#xff1a;> **把“高級”或“邏輯”查詢&#xff08;如 PrefixQuery、WildcardQuery、RangeQuery&#xff09;在真正執行前&#xff0c;拆成最底層的、可直接倒排索引查的“原子查詢…