機器學習——線性回歸(LinearRegression)

Python 線性回歸詳解:從原理到實戰

線性回歸(Linear Regression)是機器學習中最基礎也是最重要的算法之一,廣泛應用于預測分析領域,例如房價預測、銷售額預測等。本文將帶你從理論出發,用 Python 手把手實現線性回歸,助你邁出機器學習實戰第一步。


一、線性回歸是什么?

線性回歸是一種用于預測目標變量(因變量)與一個或多個特征變量(自變量)之間關系的模型,其核心思想是擬合一條“最佳直線”:

y=w1?x1?+w2?x2?+?+wn?xn?+b

其中:

  • y:預測值

  • x1?,x2?,…,xn:特征

  • w1?,w2?,…,wn?:系數(權重)

  • b:截距項


二、使用 sklearn 實現一元線性回歸

我們從簡單的一元線性回歸入手,使用 scikit-learn 庫實現。

先創建一個csv數據:
import csv# 數據
data = [["廣告投入", "銷售額"],[29, 77],[28, 62],[34, 93],[31, 84],[25, 59],[29, 64],[32, 80],[31, 75],[24, 58],[33, 91],[25, 51],[31, 73],[26, 65],[30, 84]
]# 創建 CSV 文件并寫入數據
with open('test1.csv', 'w', newline='', encoding='utf-8') as csvfile:writer = csv.writer(csvfile)writer.writerows(data)

實現一元線性回歸:

此代碼看似長,其實是因為打印了很多數據和注釋,為了讓初學者加深了解。

實際作用代碼就幾行

import pandas as pd
from sklearn.linear_model import LinearRegression
import numpy as npdata = pd.read_csv("data.csv")
# 準備訓練數據:X為特征矩陣(所有列除了"銷售額"),y為目標變量("銷售額")
X = data.drop("銷售額",axis=1)  # 特征矩陣
y = data[["銷售額"]]           # 目標變量# 創建線性回歸模型實例
# 使用特征矩陣X和目標變量y訓練線性回歸模型
lr_model = LinearRegression()
lr_model.fit(X,y)# 計算"廣告投入"和"銷售額"兩列之間的相關系數矩陣
corr = data[["廣告投入","銷售額"]].corr()   # 關系系數矩陣
print(corr)
print("-----")# 計算模型在訓練數據上的擬合優度(R2值),評估模型性能
score = lr_model.score(X,y)
print(f"模型擬合優度(R2): {score}")# 獲取模型參數:a為自變量系數(斜率),b為截距(偏置)
a = lr_model.coef_
b = lr_model.intercept_
print(f"自變量系數: {a}")
print(f"截距: {b}")# 打印線性回歸方程
print(f"線性回歸模型為: y = {a[0][0]:.2f}x1 + {b[0]:.2f}")# 預測廣告投入為28時的銷售額
print(f"當廣告投入為28時,預測銷售額為: {lr_model.predict([[28]])}")import matplotlib.pyplot as plt
# 生成用于繪制回歸線的新數據點(廣告投入范圍從24到39)
# 使用模型預測新數據點對應的銷售額
x_new = np.arange(20, 40).reshape(-1, 1)
y_new = lr_model.predict(x_new)
# 繪制回歸線
plt.plot(x_new, y_new, '--', color='#1F77B4', linewidth=2)
# 繪制散點圖
plt.scatter(X,y)
plt.show()


三、多元線性回歸示例

如果有多個特征變量:

創建數據:
import csvdata = [["體重", "年齡", "血壓收縮"],[76.0, 50, 120],[91.5, 20, 141],[85.5, 20, 124],[82.5, 30, 126],[79.0, 30, 117],[80.5, 50, 125],[74.5, 60, 123],[79.0, 50, 125],[85.0, 40, 132],[76.5, 55, 123],[82.0, 40, 132],[95.0, 40, 155],[92.5, 20, 147]
]with open('test2.csv', 'w', newline='') as csvfile:writer = csv.writer(csvfile)writer.writerows(data)

多元線性回歸示例:

import pandas as pd
from sklearn.linear_model import LinearRegression# 導入數據
data = pd.read_csv("test2.csv", encoding='gbk', engine='python')# 打印相關系數矩陣
corr = data[["體重", "年齡", "血壓收縮"]].corr()
print("相關系數矩陣:")
print(corr)# 第二步,估計模型參數,建立回歸模型
lr_model = LinearRegression()
x = data[['體重', '年齡']]
y = data['血壓收縮']# 訓練模型
lr_model.fit(x, y)# 第四步,對回歸模型進行檢驗
score = lr_model.score(x, y)  # 利用 score 方法獲取模型擬合優度(R2)
print("模型擬合優度(R2):", score)# 第五步,利用回歸模型進行預測
print("預測結果 1:", lr_model.predict([[80, 60]]))
print("預測結果 2:", lr_model.predict([[70, 30], [70, 20]]))# 獲取自變量系數和截距
a = lr_model.coef_
b = lr_model.intercept_
print("線性回歸模型為: y = {:.2f}x1 + {:.2f}x2 + {:.2f}".format(a[0], a[1], b))


四、模型評估:R2 分數

線性回歸模型的評估通常使用決定系數 R2:

r2 = model.score(X, y)
print(f"模型 R2 分數: {r2:.2f}")
  • R2=1:完美預測

  • R2=0:模型沒有預測能力

  • R2<0:預測還不如使用平均值


五、相關系數矩陣

相關系數矩陣(Correlation Matrix)是描述多個變量之間兩兩線性相關程度的矩陣,通常使用皮爾遜相關系數(Pearson Correlation Coefficient)來衡量。

一、皮爾遜相關系數公式

皮爾遜相關系數 rrr 公式如下:

其取值范圍為:

  • r=1:完全正相關

  • r=?1:完全負相關

  • r=0:無線性關系

二、相關系數的解釋

相關系數范圍線性相關強度解釋
0.9 ~ 1.0極強正相關幾乎嚴格線性關系
0.7 ~ 0.9強正相關明顯線性趨勢
0.5 ~ 0.7中等正相關有一定線性趨勢
0.3 ~ 0.5弱正相關稍有線性趨勢
0.0 ~ 0.3極弱或無相關幾乎無線性關系
< 0負相關越小,反向關系越強


六、幾點注意事項

  1. 特征縮放:當特征尺度差異較大時,應使用 StandardScaler 進行歸一化或標準化。

  2. 共線性問題:特征之間高度相關可能導致模型不穩定。

  3. 異常值:極端值會顯著影響回歸線。

  4. 殘差分析:擬合后應分析殘差是否符合正態分布。


七、總結

  • 線性回歸是回歸分析的入門基礎;

  • 使用 sklearn.linear_model.LinearRegression 可以快速構建模型;

  • 可以可視化預測結果和分析模型性能;

  • 推薦在實際應用中注重數據預處理、特征選擇與殘差分析。

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

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

相關文章

H.264視頻的RTP有效載荷格式(翻譯自:RFC6184 第5節 RTP有效載荷格式)

RTP協議格式 RFC地址&#xff1a;https://datatracker.ietf.org/doc/html/rfc6184 RTP報頭的格式在RFC3550中指定 0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1------------------------…

秒級構建消息驅動架構:描述事件流程,生成 Spring Cloud Stream+RabbitMQ 代碼

在消息驅動架構開發中&#xff0c;Spring Cloud Stream 與 RabbitMQ 的整合往往需要手動配置綁定器、定義消息通道、編寫消費邏輯&#xff0c;流程繁瑣且易出錯。而飛算JavaAI 作為高效的 IDE 插件&#xff0c;能讓開發者通過自然語言描述事件流程&#xff0c;自動生成可運行的…

從零搭建3D激光slam框架-基于mid360雷達節點實現

目錄 MID360雷達介紹 雷達SDK編譯與測試 雷達驅動的修改、編譯與測試 去ros的編譯方式 livox_ros_driver2的代碼框架介紹 livox_ros_driver2編譯 雷達IP配置文件介紹 常見問題介紹 優化改進 MID360雷達介紹 1 硬件介紹&#xff1a; livox-mid360是大疆的一款非重復掃描…

【Spring】日志級別的分類和使用

文章目錄介紹日志級別的分類日志級別的順序日志級別的使用介紹 日志級別代表著日志信息對應問題的嚴重性&#xff0c;為了更快的篩選符合目標的日志信息 試想一下這樣的場景&#xff0c;假設你是一家 2 萬人公司的老板&#xff0c;如果每個員工的日常工作和瑣碎的信息都要反饋…

【C++】第十九節—一文萬字詳解 | AVL樹實現

好久不見&#xff0c;我是云邊有個稻草人&#xff0c;偶爾中二博主與你分享C領域專業知識^(*&#xffe3;(oo)&#xffe3;)^ 《C》—本篇文章所屬專欄—持續更新中—歡迎訂閱~喔 目錄 一、AVL的概念 二、AVL樹的實現 2.1 AVL樹的結構 2.2 AVL樹的插入 【AVL樹插入?個值…

【Delphi】快速理解泛型(Generics)

Delphi的泛型&#xff08;generics&#xff09;是一項強大的特性&#xff0c;它使得代碼更加靈活、類型安全&#xff0c;并且可以實現各種通用的數據結構和算法。下面我將為你詳細介紹Delphi中的泛型&#xff0c;包括基本概念、語法、常用實例&#xff0c;以及使用建議。Delphi…

Java Stream流的使用

獲取Stream流 單列集合直接使用stream()方法 List<String> list Arrays.asList("a", "b", "c"); Stream<String> stream list.stream(); // 獲取順序流數組使用靜態方法Arrays.stream() String[] array {"a", "b&…

前端實現添加水印,兩種方式

一、自定義指令的方式/*需求&#xff1a;給整個頁面添加背景水印。思路&#xff1a;1、使用 canvas 特性生成 base64 格式的圖片文件&#xff0c;設置其字體大小&#xff0c;顏色等。2、將其設置為背景圖片&#xff0c;從而實現頁面或組件水印效果使用&#xff1a;設置水印文案…

使用LangChain構建法庭預定智能體:結合vLLM部署的Qwen3-32B模型

文章目錄 技術架構概述 核心實現步驟 1. 配置vLLM與Qwen3-32B模型 2. 定義工具(Tools) 3. 構建Agent系統 4. 運行與交互 關鍵技術亮點 1. 工具調用自動化 2. Hermes解析器優勢 3. 對話記憶管理 實際運行效果 性能優化建議 擴展應用場景 總結 在人工智能應用開發中,如何讓大語…

vscode開發微信小程序

下載插件 插件下載位置 1.微信小程序開發工具 2.vscode weapp api 3.vscode wxml 4.vscode-wechat 創建項目 終端運行命令 cd 到要創建項目的目錄執行命令&#xff1a;vue create -p dcloudio/uni-preset-vue test test就是項目名稱 選擇默認模板&#xff0c;回車 出現下圖這…

板凳-------Mysql cookbook學習 (十二--------3_3)

https://cloud.tencent.com/developer/article/1454690 侯哥的Python分享 # 創建節點 class Node(object):def __init__(self,item):self.element itemself.next None# 創建單鏈表類 class SingleLinkList(object):def __init__(self):self.header Noneself.length 0# 1、判…

Flutter開發實戰之CI/CD與發布流程

第12章:CI/CD與發布流程 在前面的章節中,我們學習了Flutter應用開發的各個方面,從基礎UI構建到復雜的狀態管理,從網絡請求到本地存儲。現在,我們將探討一個同樣重要但常被忽視的話題:如何將我們精心開發的應用高效、可靠地發布到各大應用商店。 想象一下,你花費了數月…

ElasticSearch 的3種數據遷移方案

在實際工作中&#xff0c;我們經常會遇到需要將自建的 Elasticsearch 遷移上云&#xff0c;或者遷移到其他 ES 集群的情況。這時&#xff0c;選擇合適的數據遷移方案就顯得尤為重要啦。今天就來給大家介紹三種常用的遷移方案&#xff0c;分別是 COS 快照、logstash 和 elastics…

MySQL 中的“雙路排序”與“單路排序”:原理、判別與實戰調優

一句話導讀 ORDER BY 不能走索引時&#xff0c;MySQL 會在 Server 層做一次 filesort。內部實現分 單路&#xff08;全字段&#xff09; 與 雙路&#xff08;rowid&#xff09; 兩種&#xff1b;了解它們的觸發條件、判別方法與調優思路&#xff0c;是 SQL 性能優化的必修課。一…

OpenLayers 綜合案例-信息窗體-彈窗

看過的知識不等于學會。唯有用心總結、系統記錄&#xff0c;并通過溫故知新反復實踐&#xff0c;才能真正掌握一二 作為一名摸爬滾打三年的前端開發&#xff0c;開源社區給了我飯碗&#xff0c;我也將所學的知識體系回饋給大家&#xff0c;助你少走彎路&#xff01; OpenLayers…

GaussDB 開發基本規范

1 集中式1.1數據庫價值特性推薦特性分類特性列表說明表類型PARTITION表數據分區存儲引擎行存儲按行順序存儲表&#xff0c;建議點查&#xff0c;增刪改操作較多場景下使用事務事務塊顯式啟動事務單語句事務不顯式啟動事務&#xff0c;單語句即為事務擴容在線擴容擴節點和數據重…

工作中使用git可能遇到的場景

1.main歷史發布版本出問題需要查看&#xff0c;怎么切換歷史發布版本&#xff1f;git reset --hard commitid 更新本地庫和代碼2.A分支的代碼已經做過一些功能&#xff0c;想遷移到B分支當前在A分支git checkout B &#xff08;切換到B分支&#xff09;git cherry-pick A的com…

【Spring AI】本地大型語言模型工具-Ollama

Ollama 是一個專注于在本地運行大型語言模型&#xff08;LLM&#xff09;的工具&#xff0c;支持多種開源模型&#xff08;如 Llama 3、Mistral、Gemma 等&#xff09;&#xff0c;提供簡單的命令行和 API 接口。<dependency><groupId>org.springframework.ai</…

電機S加減速

STM32步進電機S型加減速算法_stm32___build__-2048 AI社區 以上&#xff0c;電機加減速說的非常清楚&#xff0c;收藏點贊&#xff01;

一、初識 Linux 與基本命令

作者&#xff1a;IvanCodes 日期&#xff1a;2025年7月28日 專欄&#xff1a;Linux教程 思維導圖 一、Linux 簡介 1.1 什么是 Linux? Linux 是一種自由、開源的類Unix操作系統內核&#xff0c;由林納斯托瓦茲 (Linus Torvalds) 在1991年首次發布。我們通常所說的 “Linux 系統…