學習筆記(27):線性回歸基礎與實戰:從原理到應用的簡易入門

線性回歸:通過擬合線性方程(如?\(y = w_1x_1 + w_2x_2 + b\))預測房價、銷售額等連續變量,需掌握特征標準化、正則化(L1/L2)防止過擬合。應用場景:金融領域的股價預測、電商用戶消費金額預估。

線性回歸基礎與實戰:從原理到應用的簡易入門

一、線性回歸的核心思想:用直線(或超平面)擬合數據

線性回歸是一種監督學習算法,核心目標是通過找到一個線性方程,來描述自變量(特征)與因變量(目標值)之間的關系。通俗來說,就是用一條 “直線”(二維場景)或 “超平面”(多維場景)盡可能準確地擬合數據點,從而實現對連續變量的預測。

二、數學原理:線性方程與擬合目標
  1. 線性方程的數學表達

    • 簡單線性回歸(單特征):y=w?x+b,其中?w?是權重(斜率),b?是偏置(截距)。
  2. 擬合目標:最小化預測誤差

    • 如何判斷一條直線 “擬合得好不好”?通過計算均方誤差(MSE) 其中?\(y_i\)是真實值,\(\hat{y}_i\)?是模型預測值。線性回歸的核心就是通過優化算法(如梯度下降)找到一組?w?和?b,使 MSE 最小。
三、關鍵技術點:特征標準化與正則化
  1. 特征標準化(Feature Standardization)

    • 為什么需要標準化? 當特征的量綱差異很大時(例如房價特征中 “面積” 以平方米為單位,“房齡” 以年為單位),模型會更關注量綱大的特征,導致擬合偏差。
  2. 正則化(Regularization):防止過擬合的 “剎車器”

    • 過擬合問題:當模型在訓練數據上擬合得太好,可能會學習到數據中的噪聲,導致在新數據上預測效果差。
四、應用場景:金融與電商的實戰案例
  1. 金融領域:股價預測

    • 特征設計
      • 技術指標:市盈率(PE)、市凈率(PB)、成交量等;
      • 市場因素:大盤指數、行業政策、宏觀經濟數據(如利率)。
    • 模型作用:通過歷史數據擬合股價與特征的線性關系,輔助判斷股價趨勢(注意:實際金融市場復雜,線性模型需結合其他方法)。
  2. 電商領域:用戶消費金額預估

    • 特征設計
      • 用戶行為:歷史消費頻次、客單價、瀏覽商品數;
      • 商品屬性:價格區間、促銷力度、品類偏好。
    • 模型價值:用于個性化推薦(如高消費潛力用戶推送高端商品)、營銷預算分配(針對不同消費層級用戶制定策略)。
五、簡易實戰:用 Python 實現線性回歸(以房價預測為例)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, r2_score
# 配置中文顯示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 1. 生成模擬數據(假設房價與面積、房齡的關系)
np.random.seed(42)
n_samples = 100
# 面積(平方米),房齡(年)
X = np.random.rand(n_samples, 2) * 100
X[:, 0] = X[:, 0]  # 面積范圍:0-100
X[:, 1] = X[:, 1]  # 房齡范圍:0-100
# 真實房價 = 5000*面積 + 1000*房齡 + 隨機噪聲(模擬真實場景)
y = 5000 * X[:, 0] + 1000 * X[:, 1] + np.random.randn(n_samples) * 10000# 2. 數據預處理:標準化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 3. 劃分訓練集與測試集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 4. 訓練線性回歸模型
model = LinearRegression()
model.fit(X_train, y_train)# 5. 模型評估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方誤差(MSE):{mse:.2f}")
print(f"決定系數(R2):{r2:.2f}")  # R2越接近1,模型擬合越好# 6. 查看模型參數(權重和偏置)
print(f"特征權重:{model.coef_}")  # 對應面積和房齡的權重
print(f"偏置:{model.intercept_}")# 7. 可視化(以單特征為例,假設只看面積與房價的關系)
plt.scatter(X[:, 0], y, color='blue', label='真實數據')
# 用訓練好的模型預測僅基于面積的房價(固定房齡為平均值)
X_single_feature = scaler.transform(np.array([[50, 0], [100, 0]]))  # 面積50和100,房齡0(僅示例)
y_single_pred = model.predict(X_single_feature)
# 反標準化面積特征(便于可視化)
X_original = scaler.inverse_transform(X_single_feature)
plt.plot(X_original[:, 0], y_single_pred, color='red', linewidth=2, label='線性回歸預測')
plt.xlabel('房屋面積(平方米)')
plt.ylabel('房價(元)')
plt.title('線性回歸:房屋面積與房價的關系')
plt.legend()
plt.show()

效果圖

線性回歸代碼逐行解析

下面我將對之前提供的線性回歸房價預測代碼進行詳細解析,幫助你理解每一步的作用和實現原理。

1. 導入必要的庫
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, r2_score
  • numpy:用于生成和處理數組數據
  • pandas:用于數據處理和分析(本代碼未實際使用,但在實際項目中常用)
  • matplotlib.pyplot:用于數據可視化
  • sklearn:機器學習工具包,包含:
    • LinearRegression:線性回歸模型
    • train_test_split:劃分訓練集和測試集
    • StandardScaler:特征標準化工具
    • mean_squared_errorr2_score:模型評估指標
2. 生成模擬數據
# 1. 生成模擬數據(假設房價與面積、房齡的關系)
np.random.seed(42)  # 設置隨機種子,確保結果可復現
n_samples = 100     # 樣本數量# 生成特征矩陣X(面積和房齡)
X = np.random.rand(n_samples, 2) * 100  # 生成0-100之間的隨機數
X[:, 0] = X[:, 0]  # 面積范圍:0-100平方米
X[:, 1] = X[:, 1]  # 房齡范圍:0-100年# 生成目標變量y(房價)
# 真實房價 = 5000*面積 + 1000*房齡 + 隨機噪聲
y = 5000 * X[:, 0] + 1000 * X[:, 1] + np.random.randn(n_samples) * 10000
  • 數據生成邏輯
    • 特征 X 包含兩個維度:房屋面積和房齡
    • 房價計算公式:5000*面積 + 1000*房齡 + 隨機噪聲
    • 添加隨機噪聲模擬真實場景中的不確定性
  • np.random.seed(42),“42” 的特殊意義:在計算機科學中,“42” 是《銀河系漫游指南》中 “生命、宇宙及一切的答案”,常被用作示例代碼的默認種子,無實際數學含義。
  • 何時設置:應在生成隨機數之前設置種子,通常放在代碼開頭或隨機操作前。
  • 多線程場景:在多線程程序中,僅設置種子可能無法完全保證隨機性一致,需結合其他線程安全措施。
  • np.random.seed(42)?是數據科學中保證實驗可復現的重要工具,通過固定隨機數生成的起點,讓隨機操作變得 “可控”。這在學術研究、工程開發中都是必不可少的步驟 —— 畢竟,能復現的結果才具有說服力!
3. 特征標準化
# 2. 數據預處理:標準化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

  • 其中,μ 是均值,σ 是標準差

  • 為什么需要標準化?

    • 消除不同特征量綱差異的影響
    • 加速梯度下降算法的收斂速度
    • 某些模型(如 SVM、KNN)對特征尺度敏感
4. 劃分訓練集和測試集
# 3. 劃分訓練集與測試集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42
)
  • 參數說明

    • test_size=0.2:將 20% 的數據作為測試集
    • random_state=42:固定隨機種子,確保每次劃分結果相同
  • 數據劃分目的

    • 訓練集:用于模型學習參數
    • 測試集:用于評估模型泛化能力
5. 訓練線性回歸模型
# 4. 訓練線性回歸模型
model = LinearRegression()
model.fit(X_train, y_train)
  • 線性回歸模型數學表達式其中:

    • 是特征權重(對應面積和房齡)
    • b?是偏置項
  • 模型訓練過程

    • 最小化均方誤差(MSE)損失函數
    • 使用正規方程或梯度下降求解最優參數
6. 模型評估
# 5. 模型評估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方誤差(MSE):{mse:.2f}")
print(f"決定系數(R2):{r2:.2f}")
  • 評估指標解釋
    • 均方誤差(MSE)誤差越小,模型預測越準確

    • 決定系數(R2)

7. 查看模型參數
# 6. 查看模型參數(權重和偏置)
print(f"特征權重:{model.coef_}")
print(f"偏置:{model.intercept_}")
  • 參數解釋

    • model.coef_:特征權重數組,對應面積和房齡的影響系數
    • model.intercept_:偏置項,相當于線性方程的截距
  • 注意

    • 由于特征經過標準化,權重不能直接解釋為 “面積每增加 1 平方米,房價增加 5000 元”
    • 需要對標準化后的數據進行反推才能得到原始尺度的解釋
8. 可視化結果
# 7. 可視化(以單特征為例,假設只看面積與房價的關系)
plt.scatter(X[:, 0], y, color='blue', label='真實數據')# 用訓練好的模型預測僅基于面積的房價(固定房齡為平均值)
X_single_feature = scaler.transform(np.array([[50, 0], [100, 0]]))
y_single_pred = model.predict(X_single_feature)# 反標準化面積特征(便于可視化)
X_original = scaler.inverse_transform(X_single_feature)# 繪制回歸線
plt.plot(X_original[:, 0], y_single_pred, color='red', linewidth=2, label='線性回歸預測')
plt.xlabel('房屋面積(平方米)')
plt.ylabel('房價(元)')
plt.title('線性回歸:房屋面積與房價的關系')
plt.legend()
plt.show()
  • 可視化說明
    • 藍色散點:原始數據點(面積 vs 房價)
    • 紅色直線:線性回歸模型預測線
    • 由于我們的模型包含兩個特征(面積和房齡),這里固定房齡為 0,僅展示面積對房價的影響

關鍵概念總結

  1. 特征標準化:消除量綱差異,提高模型穩定性和訓練效率
  2. 訓練測試集劃分:避免過擬合,評估模型泛化能力
  3. 模型評估指標:MSE 衡量預測誤差,R2 表示模型解釋能力
  4. 模型參數解讀:權重反映特征對目標變量的影響程度

這個代碼示例展示了線性回歸的完整流程,從數據準備到模型訓練和評估。在實際應用中,你可以用真實數據集替換模擬數據,并根據需要調整模型復雜度(如添加正則化)。

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

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

相關文章

kubesphere安裝openelb

kubesphere安裝openelb 1.安裝openelb 2.修改配置文件 1.命令直接修改 $ kubectl edit configmap kube-proxy -n kube-system ipvs:strictARP: truemode: "ipvs"重啟kube-proxy組件 $ kubectl rollout restart daemonset kube-proxy -n kube-system 2.通過界面去修…

數據庫10:MySQL的數據類型與約束和屬性設置,數據模式

一.數據類型 整數類型(integer types) 數據類型字節有符號范圍無符號范圍說明tinyint1-128 ~ 1270 ~ 255非常小的整數smallint2-32,768 ~ 32,7670 ~ 65,535小整數mediumint3-8,388,608 ~ 8,388,6070 ~ 16,777,215中等整數int4-2,147,483,648 ~ 2,147,4…

uniapp項目中node_modules\sass\sass.dart.js的體積過大怎么處理

用Node-Sass替代(如果適用):雖然Dart Sass是Sass的主要實現之一,但有時它可能會比Node-Sass占用更多的空間。如果你不需要Dart Sass特有的功能,可以考慮切換到Node-Sass(注意Node-Sass已停止維護&#xff0…

界面組件DevExpress WPF中文教程:Grid - 如何獲取節點?

DevExpress WPF擁有120個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

Kalibr解毒填坑(一):相機標定失敗

文章目錄 ??簡介?? 解毒踩坑?? 主點錯誤??簡介 相機內參標定通常涉及確定焦距(fx, fy)、主點(cx, cy)、畸變系數(徑向和切向)等參數。Kalibr是一個開源的標定工具,支持多相機、IMU和聯合標定,適用于復雜的傳感器系統。 但kalibar標定相機內參受到數據和配置影…

Swift 的基礎設計哲學是 “通過模塊化組合實現安全與效率的平衡“,就像用標準化工業零件建造摩天大樓

一、基礎模塊:地基與鋼結構(Basic Types & Collections) 比喻:積木與工具箱,決定建筑的穩定性和容量。場景:搭建程序的基礎結構,如變量、數據類型、運算符。包含:基本語法、運算…

【RK3568+PG2L50H開發板實驗例程】Linux部分/FPGA dma_memcpy_demo 讀寫案例

本原創文章由深圳市小眼睛科技有限公司創作,版權歸本公司所有,如需轉載,需授權并注明出處(www.meyesemi.com) 1.案例簡介 案例功能描述:ARM端利用 PCIe總線對 FPGA的 DRAM執行讀寫操作。應用程序通過 ioctl函數觸發 …

7.3實驗部分

一、HDFS基礎操作 以root用戶登錄,創建如下HDFS目錄: /dw/yourname/input hadoop fs -mkdir -p /dw/zhanggengchen/input /dw/yourname/output hadoop fs -mkdir -p /dw/zhanggengchen/output 輸出結果: [rootmaster hadoop-mapreduce]# ha…

[nett5: AddressedEnvelope]-源碼解析

AddressedEnvelope AddressedEnvelope<M, A> 表示一個帶有發送者和接收者地址的消息封裝&#xff0c;常用于處理如 UDP 數據報這類含地址信息的通信場景。 public interface AddressedEnvelope<M, A extends SocketAddress> {// 實際的消息內容M content();// 消…

基于 Drone CI 實現前端自動化打包并集成 Spug 自動發布流程

前言&#xff1a;代碼自動化部署目前使用的是Spug開源運維平臺&#xff0c;通過docker直接部署該平臺后&#xff0c;在前端自動化打包&#xff08;npm run build&#xff09;會遇見Node的版本問題&#xff0c;因為Spug容器使用的是Centos7&#xff0c;所以Node版本只支持V16&am…

【基礎】Golang語言開發環境搭建(Linux主機)

目錄 1. 下載并安裝Go語言2. 配置環境變量3. 驗證安裝4. 配置Go模塊5. 安裝常用開發工具6. 配置IDE&#xff08;可選&#xff09;7. 第一個Go程序 在Linux主機上搭建Golang開發環境&#xff0c;你可以按照以下步驟進行操作&#xff1a; 1. 下載并安裝Go語言 首先從官網下載Go…

MySQL安全加固:使用mysql_secure_installation

在安裝MySQL后&#xff0c;為了確保服務器的安全性&#xff0c;建議使用mysql_secure_installation工具對MySQL進行安全加固。這個工具可以幫助我們完成一些關鍵的安全配置&#xff0c;包括設置強密碼、移除匿名用戶、限制root用戶的遠程登錄以及清理默認的測試數據庫等。以下是…

設計模式之中介者模式 (Mediator Pattern) -聊天室-控制室

中介者模式用于減少多個對象之間的直接通信&#xff0c;而是通過一個中介對象來協調它們之間的交互。下面我用一個聊天室的例子來演示這個模式。 舉個栗子&#xff1a;聊天室系統 在這個系統中&#xff0c;用戶不直接相互發送消息&#xff0c;而是通過聊天室&#xff08;中介者…

SpringSecurity01

目錄 一、權限控制 二、相關框架 1、shiro 2、springsecurity 三、springsecurity使用流程 1、搭建環境實現默認用戶名和密碼登錄 2、使用數據庫表中定義好的用戶名和密碼訪問實現等值密碼匹配 1&#xff09;sql文件 2)搭建jdbc或者mybatis或者mybatis-plus環境 3&am…

解決git clone報錯:fatal unable to access xxx. Could not resolve host github.com

作者&#xff1a;唐叔在學習 專欄&#xff1a;問題百寶箱 文章目錄 問題描述問題診斷網絡連通性測試 解決方案1. 獲取GitHub最新IP地址2. 修改系統hosts文件 驗證解決方案常見問題解答總結 問題描述 當使用git clone命令克隆GitHub倉庫時&#xff0c;可能會遇到如下錯誤&#…

魔術方法__call__

__call__ 是一個特殊方法&#xff08;也稱為魔術方法&#xff09;&#xff0c;用于使一個類的實例能夠像函數一樣被調用。當定義了這個方法后&#xff0c;實例對象可以后接括號&#xff08;即 ()&#xff09;來觸發調用&#xff0c;這會讓實例表現得像函數一樣。 ?使實例可調…

PHP中的異常處理與錯誤日志記錄

在PHP編程實踐中&#xff0c;異常處理是一項至關重要的技能&#xff0c;它能夠幫助開發者識別和響應程序執行過程中發生的非預期事件。與此同時&#xff0c;錯誤日志記錄是確保應用程序可靠性和穩定性的關鍵組成部分。本文將詳細介紹如何在PHP中實現這兩個方面的技術。 首先&a…

JS去除空格(數組內字符串)

1.JS中去除空格 去除這個數組中每個對象內部參數&#xff08;也就是屬性值&#xff09;的空格&#xff0c;可以通過遍歷數組&#xff0c;再遍歷每個對象的屬性&#xff0c;使用 trim() 方法來去除字符串首尾的空格。以下是具體實現代碼&#xff1a; let data [{ designHours:…

【Spring篇01】:Bean的線程安全問題總結

文章目錄 1. 核心問題&#xff1a;Spring 框架中的 Bean 是線程安全的嗎&#xff1f;2. 最佳實踐與解決方案禁止方案&#xff1a;濫用prototype作用域推薦方案&#xff08;按優先級排序&#xff09; 3. 生產環境中的典型案例Case 1&#xff1a;訂單服務統計Case 2&#xff1a;用…

本地項目上傳git

將您本地的項目代碼上傳到一個私有的、別人看不見的 GitHub 倉庫&#xff0c;是進行云端協作&#xff08;如使用 Google Colab&#xff09;、版本控制和代碼備份的最佳實踐。這是一個非常重要的技能。 整個過程可以分為三個部分&#xff1a; 準備工作&#xff1a;在您的電腦上…