機器學習之線性回歸

主要參考:

機器學習| 算法筆記-線性回歸(Linear Regression) - 知乎 (zhihu.com)

2-2 線性回歸_嗶哩嗶哩_bilibili

Python機器學習實戰:線性回歸模型預測波士頓房價_嗶哩嗶哩_bilibili

回歸分析

在數學和統計學中,回歸(Regression) 是一種用于分析變量之間關系的方法,核心目標是通過一個或多個自變量(解釋變量) 來預測因變量(響應變量) 的連續數值。它不僅是機器學習中的基礎任務(如前文所述),更是統計學的重要分支,其數學本質和應用邏輯可從以下維度深入解析:

數學上的回歸是一種通過數據擬合函數關系來預測連續值的方法論,其核心在于用統計或機器學習手段建立自變量到因變量的映射,并通過誤差最小化確保模型有效性。從簡單的線性回歸到復雜的非線性模型,回歸分析始終是理解變量關系、解決預測問題的基礎工具,其思想貫穿統計學、機器學習及各應用學科。

回歸的分類

我們這里主要關注線性回歸

線性回歸

如果在回歸分析中,自變量與因變量是線性關系(一次方),那么這種回歸分析,我們稱之為線性回歸。

比如住宅面積和房價的關系:

線性回歸通常僅用于連續型數值預測,比如預測房價(面積與價格呈直線關系)

顯然,如果投資150萬,遠遠大于預測出來的房價,那么就不值得投資。

線性回歸優缺點

  • 優點:簡單、計算高效、可解釋性強。

  • 缺點:對非線性關系效果差、易受異常值和多重共線性影響。

線性回歸是機器學習和統計建模的基礎工具,適合初步探索變量關系,但通常需結合數據特性選擇合適的變體或更復雜模型。

線性回歸分析的目標

還是以房價問題為例

這里,我們是想找到房屋面積和房價之間的線性關系,其中,房屋面積就是一個特征,我們現在要找到這個特征跟房價之間的關系,也就是要尋找到合理的a和b,使得預測結果是相對準確的,因為不同的a和b對結果的影響肯定是不一樣的。

那么,怎么就能找到最適合的a和b呢?

如果我們已經知道一些現有的數據,也就是知道一些面積和房價之間的確切對應關系,之后,對于某個模型,使得模型的輸出結果和實際值之間的差距最小,也就能確定對應的a和b的值了。

由此,我們引出損失函數這一概念

所謂的損失函數,就是模型輸出結果和實際結果之間的差距的函數,當差距最小時,也就是損失函數值最小時,我們的目標就達到了。

所以,上面說的線性回歸的目標是什么呢?

答案是:不斷迭代數據特征的系數,然后找到損失函數的極小值,從而確定對應的特征系數。

舉例說明:

下面有兩組假設的擬合所預測出來的結果,我們看看對應的損失函數值各是多少

J1小于J2,看起來J1更合適。

上面只是假設已經有了系數,然后求解下損失函數,但是這個損失函數并不一定就是最小的,那么,我們實際中如何求解呢?

我們先了解兩種基礎的方法:最小二乘法梯度下降法,其他更多方法以后有需要再學習。

最小二乘法

最小二乘法(Least Squares Method)是一種經典的數學優化方法,主要用于線性回歸問題,通過最小化預測值與真實值之間的殘差平方和來求解模型參數。它是統計學和機器學習中最基礎的參數估計方法之一。

應用場景

  1. 線性回歸(房價預測、銷量分析等)。

  2. 曲線擬合(如多項式回歸)。

  3. 信號處理(濾波器設計)。

  4. 經濟學(計量模型參數估計)。

總結

  • 最小二乘法是線性回歸的經典解法,適用于小規模數據且特征數較少的情況。

  • 解析解高效但受限于矩陣求逆,大數據時改用梯度下降或隨機梯度下降。

  • 改進方法(如嶺回歸、Lasso)可以解決過擬合和不可逆問題。

  • 非線性問題需使用更復雜的優化方法(如Levenberg-Marquardt)。

最終選擇

  • 數據量小且特征少 → 最小二乘法(解析解)

  • 數據量大或特征多 → 梯度下降/SGD

  • 需要特征選擇 → Lasso 回歸

  • 非線性回歸 → 非線性最小二乘法

梯度下降法

上面提到,最小二乘法是線性回歸的經典解法,適用于小規模數據且特征數較少的情況,解析解高效但受限于矩陣求逆,大數據時改用梯度下降或隨機梯度下降

梯度下降法(Gradient Descent,GD)是一種迭代優化算法,用于尋找可微函數的局部最小值(或最大值)。它是機器學習和深度學習的核心優化方法之一,尤其適用于大規模數據和高維參數空間的優化問題。

示意如下:

對于y=ax+b

總結

  • 梯度下降法是機器學習和深度學習的核心優化算法,通過迭代更新參數最小化損失函數。

  • 主要變體:BGD(穩定但慢)、SGD(快但震蕩)、Mini-batch GD(平衡)。

  • 改進算法:Momentum、Adam等可加速收斂并提高穩定性。

  • 適用場景

    • 大規模數據 → Mini-batch GD 或 Adam。

    • 非凸優化(如神經網絡)→ Adam/RMSprop。

    • 線性模型 → 可對比最小二乘法(小數據時更高效)。

關鍵建議

  1. 數據標準化(加速收斂)。

  2. 調試學習率(可從0.01開始嘗試)。

  3. 監控損失曲線(判斷是否收斂或震蕩)。

使用sklearn求解線性回歸過程

?我們舉個簡單的例子看看步驟

那么,我們如何進一步確定擬合出來的效果好不好呢?

代碼示例如下:

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score# 1. 直接在程序中定義上面示例的10組數據,我們假設X是房屋面積,y是房價
# 格式:X和y的順序一一對應
X = np.array([[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]])
y = np.array([7, 9, 11, 13, 15, 17, 19, 21, 23, 25])# 2. 創建線性回歸模型并訓練
model = LinearRegression()
model.fit(X, y)  # 傳入特征和目標變量進行訓練# 3. 模型預測(使用訓練數據進行預測,查看擬合效果)
y_pred = model.predict(X)# 4. 計算評估指標
mse = mean_squared_error(y, y_pred)  # 均方誤差
r2 = r2_score(y, y_pred)  # R2決定系數(越接近1越好)# 5. 輸出模型結果
print("=== 線性回歸模型結果 ===")
print(f"回歸方程:房價 = {model.coef_[0]:.4f} × 房間面積 + {model.intercept_:.4f}")
print(f"均方誤差(MSE):{mse:.4f}")
print(f"R2決定系數:{r2:.4f}")# 6. 示例:預測新的房間面積對應的房價
new_area = 150  # 假設新房間面積為150平方米
predicted_price = model.predict([[new_area]])[0]
print(f"\n預測面積為{new_area}平方米的房價:{predicted_price:.2f}萬元")

結果:

結果跟預期是一致的,可見訓練是有效的。

當然,這只是機器學習最最基礎的一種場景了,我們后續由淺入深慢慢深入了解。

實戰:波士頓房價預測

使用的是波士頓房屋數據

上面的13行是輸入數據的特征,最后一行是房屋價格,也就是機器學習中說的標簽。

我們開始測試

線性回歸模型假設多個影響房價的因素和房價之間是線性關系,屬于多元線性回歸,我們可以用線性方程來表示:


線性回歸模型訓練的目的就是找到一組參數使得模型預測的誤差最小,這里面用到了損失函數,最小二乘法,正則化等理論,這里不-一證明了,我們直接看模型訓練和預測的效果。

注意:因為波士頓房價數據下架了,所以用加州房價來替代,差不多的。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score# 加載加州房價數據集
california = fetch_california_housing()
X = california.data  # 特征數據
y = california.target  # 目標數據(房價中位數)# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 創建線性回歸模型
model = LinearRegression()# 訓練模型
model.fit(X_train, y_train)# 在測試集上進行預測
y_pred = model.predict(X_test)# 計算評估指標
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, y_pred)# 輸出結果
print("線性回歸模型評估結果:")
print(f"MSE: {mse:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"R2 Score: {r2:.4f}")# 可視化預測結果
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.6)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--')
plt.xlabel('實際房價 (10萬美元)')
plt.ylabel('預測房價 (10萬美元)')
plt.title('線性回歸模型預測結果')
plt.grid(True)
plt.tight_layout()
plt.savefig('prediction_results.png')# 顯示特征系數(重要性)
print("\n特征系數(重要性):")
for i, feature in enumerate(california.feature_names):print(f"{feature}: {model.coef_[i]:.4f}")print("\n模型訓練和評估已完成,預測結果圖已保存為 prediction_results.png")

結果如下:

更多待補充。

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

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

相關文章

Boost.Asio學習(2):同步讀寫

Asio 的 buffer 是什么? boost::asio::buffer(...) 是一個函數模板,用于創建一個通用的 buffer 對象,可傳遞給 I/O 函數(如 read, write, read_some, write_some 等)。 它返回的是 mutable_buffer 或 const_buffer 的…

Java中如何枚舉正則表達式捕獲組的名字

在使用正則表達式在匹配文本時&#xff0c;除了可以通過表達式捕獲命中的文本串外&#xff0c;還可以對捕獲的文本串進行命名。尤其是在解析日志的場景中&#xff0c;經常會被用到。表達式如下&#xff1a; \<(?<pri>\d)\>(?<time>.*) (?<host>\S)…

CentOS 系統高效部署 Dify 全攻略

系列文章目錄 CentOS系統高效部署fastGPT全攻略 文章目錄 系列文章目錄一、前言二、準備工作與系統要求三、安裝 Docker 與 Docker Compose四、部署 Dify 核心服務五、數據庫與存儲配置六、網絡與安全優化七、監控與運維八、升級與擴展九、附錄與資源關鍵命令速查表官方文檔…

xyctf2025第三屆京麒CTF

一.MISC 1.XGCTF 直接ai搜索一遍找到了出題人的博客LamentXU 2024-2025年終總結 - LamentXU - 博客園 知道了原題是ciscn中的 在LamentXU的博客亂逛Patriot CTF 2024 MISC 部分 wp - LamentXU - 博客園 找到了博客網站,讓后搜索ciscn扎到了博客 CISCN華東南WEB-Polluted |…

Python爬蟲 模擬登錄 requests版

前言 網站必須是登錄狀態才能查看網站信息,是最常見的反爬手段,下面我分享一下request模擬登錄狀態進行請求 目錄 模擬登錄的原理 直接復制網站Cookie模擬登錄狀態 通過登錄接口信息破解出Cookie模擬登錄狀態 模擬登錄的原理 網站是使用Cookie和session記錄網站的登錄狀態…

一些改進策略

1.要計算一個神經網絡模型的總參數量、可訓練參數量以及計算量&#xff08;FLOPs&#xff09;&#xff0c;可以使用以下步驟&#xff1a; ### 計算總參數量和可訓練參數量&#xff1a; 1. **逐層計算參數量**&#xff1a; - 對于每一層&#xff0c;確定該層的參數量。這通…

React Native響應式布局實戰:告別媒體查詢,擁抱跨屏適配新時代

前言:當設計師說"這個頁面要適配所有手機和平板…" “什么?React Native不支持CSS媒體查詢?那怎么實現響應式布局?”——這是很多剛接觸React Native的開發者會遇到的靈魂拷問。 但別慌,沒有@media,我們照樣能玩轉多端適配!想象一下:你的App在iPhone SE的小…

[Java惡補day39] 整理模板·考點六【反轉鏈表】

考點六【反轉鏈表】 【考點總結】 1. 206. 【題目】 【核心思路】 【復雜度】 時間復雜度&#xff1a; O ( ) O() O()。 空間復雜度&#xff1a; O ( ) O() O()。 【代碼】 92. 【題目】 【核心思路】 【復雜度】 時間復雜度&#xff1a; O ( ) O() O()。 空間復雜度&a…

7,TCP服務器

1,創建一個工程 文件目錄:

Modbus_TCP_V5 新功能

odbus TCP 服務器指令 MB_SERVER V5.0 新功能概述 如下圖1所示服務器指令 MB_SERVER 從 V5.0 以后增加了三個新功能&#xff0c;分別為&#xff1a; 訪問數據塊中的數據區域&#xff0c;而不是直接訪問 MODBUS 地址過程映像區的讀訪問限制統計變量 NDR_immediate 和 DR_immed…

2-RuoYi-UI管理平臺的啟動

RuoYi-UI是RuoYi后端框架的管理中心(基于 Vue.js 的前端項目)的詳細配置與啟動指南,結合官方文檔和常見實踐整理,涵蓋環境準備、配置修改、啟動流程及問題排查。 ?? 一、環境準備 Node.js 版本要求:≥12.0(推薦 ≥14.0 或 18.18+ 適配 Vue3) 安裝后驗證: node -v …

WPF學習筆記(21)ListBox、ListView與控件模板

ListBox與控件模板 一、 ListBox默認控件模板詳解二、ItemsPresenter集合數據呈現1. 概述2. 示例 三、 ListView默認控件模板詳解1. 概述2. 示例 一、 ListBox默認控件模板詳解 WPF 中的大多數控件都有默認的控件模板。 這些模板定義了控件的默認外觀和行為&#xff0c;包括控…

操作系統【2】【內存管理】【虛擬內存】【參考小林code】

本文完全參考 虛擬內存內存分段內存分頁段頁式內存管理Linux內存管理 一、虛擬內存 1. 單片機的絕對物理地址 以單片機作為引子&#xff0c;它沒有操作系統&#xff0c;每次寫完程序是借助工具將程序燒錄進單片機&#xff0c;程序才能運行。 單片機由于沒有操作系統&#…

【王樹森推薦系統】召回05:矩陣補充、最近鄰查找

概述 這節課和后面幾節課將詳細講述向量召回&#xff0c;矩陣補充是向量召回最簡單的一種方法&#xff0c;不過現在已經不太常用這種方法了本節課的矩陣補充是為了幫助理解下節課的雙塔模型上節課介紹了embedding&#xff0c;它可以把用戶ID和物品ID映射成向量 矩陣補充 模型…

C# 事件(訂閱事件和觸發事件)

訂閱事件 訂閱者向事件添加事件處理程序。對于一個要添加到事件的事件處理程序來說&#xff0c;它必須具有 與事件的委托相同的返回類型和簽名。 使用運算符來為事件添加事件處理程序&#xff0c;如下面的代碼所示。事件處理程序位于該運 算符的右邊。事件處理程序的規范可以…

64頁精品PPT | 基于DeepSeek的數據治理方案AI大數據治理解決方案數據治理大模型解決方案

這份PPT文檔是關于基于DeepSeek的大模型技術在數據治理方案中的應用介紹。強調數據作為新型生產要素與人工智能技術相結合的重要性&#xff0c;指出大模型憑借強大的文學理解、生成能力以及多模態數據處理能力&#xff0c;能為數據治理帶來新機遇。文檔詳細闡述了數據資產化的路…

【文獻筆記】Tree of Thoughts: Deliberate Problem Solving with Large Language Models

Tree of Thoughts: Deliberate Problem Solving with Large Language Models https://github.com/princeton-nlp/tree-of-thought-llm 標題翻譯&#xff1a;思維樹&#xff1a;利用大型語言模型問題求解 1. 內容介紹 1.1. 背景 決策過程有兩種模式&#xff1a; 快速、自動…

使用 Mathematical_Expression 從零開始實現數學題目的作答小游戲【可復制代碼】

從零開始實現數學題目的作答小游戲 開源技術欄 使用 Mathematical_Expression 讓計算機做出題人&#xff0c;讓代碼與數學碰撞出趣味火花。 目錄 文章目錄 從零開始實現數學題目的作答小游戲目錄 從零開始實現數學題目的作答小游戲&#xff1a;讓代碼與數學碰撞出趣味火花為…

DQL-9-小結

DQL-9-小結 小結DQL語句 小結 DQL語句 SELECT 字段列表 -- 字段名 [AS] 別名FROM 表名列表WHERE條件列表 -- >、 >、 <、 <、 、 <>、 like、 between ... and、 in、 and、 or, 分組之前過濾 GROUP BY分組字段列表HAVING分組后條件列表 -- 分組之后…

[netty5: WebSocketServerHandshaker WebSocketServerHandshakerFactory]-源碼分析

在閱讀這篇文章前&#xff0c;推薦先閱讀以下內容&#xff1a; [netty5: WebSocketFrame]-源碼分析[netty5: WebSocketFrameEncoder & WebSocketFrameDecoder]-源碼解析 WebSocketServerHandshakerFactory WebSocketServerHandshakerFactory 用于根據客戶端請求中的 Web…