機器學習第二課之線性回歸的實戰技巧

1 線性回歸簡介

1 線性回歸應用場景

????????線性回歸是一種用于分析自變量與連續型因變量之間線性關系的模型,其核心是通過擬合線性方程(y = w_1x_1 + w_2x_2 + ... + w_nx_n + b)來預測因變量或解釋自變量的影響。由于其簡單、可解釋性強的特點,線性回歸在多個領域有廣泛應用。預測類場景(核心應用)包括房價預測、銷售額 / 銷量預測能源消耗預測等。影響因素分析(解釋性應用)上包括經濟指標分析、醫學健康分析等都可以使用線性回歸算法進行預測。

?2.線性回歸的定義與公式

????????線性回歸 (Linear regression) 是利用回歸方程 (函數) 對一個或多個自變量 (特征值) 和因變量 (目標值) 之間關系進行建模的一種分析方式。這種函數是一個或多個稱為回歸系數的模型參數的線性組合。只有一個自變量的情況稱為簡單回歸,大于一個自變量情況的叫做多元回歸。(這反過來又應當由多個相關的因變量預測的多元線性回歸區別,而不是一個單一的標量變量。)在線性回歸中,數據使用線性預測函數來建模,并且未知的模型參數也是通過數據來估計。這些模型被叫做線性模型。最常用的線性回歸建模是給定X值的y的條件均值是X的仿射函數。不太一般的情況,線性回歸模型可以是一個中位數或一些其他的給定X的條件下y的條件分布的分位數作為X的線性函數表示。像所有形式的回歸分析一樣,線性回歸也把焦點放在給定X值的y的條件概率分布,而不是X和y的聯合概率分布(多元分析領域)。

  • 特點:只有一個自變量的情況稱為單變量回歸,多于一個自變量情況的叫做多元回歸

?那么怎么理解呢?我們來看幾個例子

  • 期末成績:0.7× 考試成績 + 0.3× 平時成績
  • 房子價格 = 0.02× 中心區域的距離 + 0.04× 城市一氧化氮濃度 + (-0.12× 自住房平均房價) + 0.254× 城鎮犯罪率

上面兩個例子,我們看到特征值與目標值之間建立了一個關系,這個關系可以理解為線性模型。

3.線性回歸的特征與?標的關系分析?

????????線性回歸當中主要有兩種模型,?種是線性關系,另?種是?線性關系。在這?我們只能畫?個平?更好去理解,所以都?單個特征或兩個特征舉例?。
????????線性關系
單變量線性關系:(一元線性回歸)

?y=mx+b

????????中學時,我們經常使用上面的方程來解一些數學問題,方程描述了變量?y?隨著變量?x?而變化。方程從圖形上來看,是一條直線。如果建立好這樣的數學模型,已知?x?我們就可以得到預測的\hat{y}值了。統計學家給變量帶上了一個小帽子,表示這是預測值,以區別于真實觀測到的數據。方程只有一個自變量?x,且不含平方立方等非一次項,因此被稱為一元線性方程。?

????????在對收入數據集進行建模時,我們可以對參數?m?和?b?取不同值來構建不同的直線,這樣就形成了一個參數家族。參數家族中有一個最佳組合,可以在統計上以最優的方式描述數據集。那么監督學習的過程就可以被定義為:給定?N?個數據對?(x, y),尋找最佳參數?m*和?b*,使模型可以更好地擬合這些數據。?

????????上圖給出了不同的參數,到底哪條直線是最佳的呢?如何衡量模型是否以最優的方式擬合數據呢?機器學習用損失函數(loss function)來衡量這個問題。損失函數又被稱為代價函數(cost function),它計算了模型預測值\hat{y}和真實值?y?之間的差異程度。從名字也可以看出,這個函數計算的是模型犯錯的損失或代價,損失函數越大,模型越差,越不能擬合數據。統計學家通常使用\(L(\hat{y}, y)\)來表示損失函數。?

????????對于線性回歸,一個簡單實用的損失函數為預測值與真實值誤差的平方。上圖展示了收入數據集上預測值與真實值之間的誤差。

多變量線性關系?(多元線性回歸)

????????現在我們把?x?擴展為多元的情況,即多種因素共同影響變量?y。現實問題也往往是這種情況,比如,要預測房價,需要考慮包括是否學區、房間數量、周邊是否繁華、交通方便性等。共有?D?種維度的影響因素,機器學習領域將這?D?種影響因素稱為特征(feature)。每個樣本有一個需要預測的?y?和一組?D?維向量?\mathbf{X}。原來的參數?m?變成了?D?維的向量?\mathbf{w}。這樣,某個?y_i可以表示成?b + \sum_{d=1}^{D} w_d x_{i,d},其中x_{i,d}表示第?i?個樣本向量?\mathbf{x}_i中第?d?維特征值。

y_i = b + \sum_{d=1}^{D} w_d x_{i,d} \qquad b = w_{D+1}\)\(y_i = \sum_{d=1}^{D+1} w_d x_{i,d}?

????????比一元線性回歸更為復雜的是,多元線性回歸組成的不是直線,是一個多維空間中的超平面,數據點散落在超平面的兩側。

?????????線性關系?

為什么會這樣的關系呢?原因是什么? 如果是?線性關系,那么回歸?程可以理解為

?

?4.最小二乘法

????????線性回歸模型經常用最小二乘逼近來擬合,但他們也可能用別的方法來擬合,比如用最小化“擬合缺陷”在一些其他規范里(比如最小絕對誤差回歸),或者在橋回歸中最小化最小二乘損失函數的懲罰.相反,最小二乘逼近可以用來擬合那些非線性的模型.因此,盡管“最小二乘法”和“線性模型”是緊密相連的,但他們是不能劃等號的。

????????要使損失函數最小,可以將損失函數當作多元函數來處理,采用多元函數求偏導的方法來計算函數的極小值。

對于上面提到的:預測值與真實值之間的誤差

?2.線性回歸項目案例

1.簡單線性回歸分析廣告投入與銷售額關系

導入必要的庫

import pandas as pd
import matplotlib.pyplot as plt  
from sklearn.linear_model import LinearRegression

加載數據

data = pd.read_csv("data(1).csv")
廣告投入銷售額
2977
2862
3493
3184
2559
2964
3280
3175
2458
3391
2551
3173
2665
3084

?數據預處理與可視化?

plt.scatter(data['廣告投入'], data['銷售額'])
plt.xlabel('廣告投入')
plt.ylabel('銷售額')
plt.show()

準備訓練數據

x = data[["廣告投入"]]  # 特征矩陣(自變量),需使用二維數組格式
y = data[['銷售額']]   # 目標向量(因變量)
  • x:選取廣告投入列作為特征
  • y:選取銷售額列作為目標變量

創建并訓練模型?

estimator = LinearRegression(fit_intercept=True)  # 創建線性回歸模型,包含截距項
estimator.fit(x, y)  # 訓練模型
  • fit_intercept=True:指定模型包含截距項(即公式中的 b)
  • fit()方法通過最小二乘法計算最佳擬合參數

輸出模型參數?

print(estimator.coef_)        # 輸出斜率(權重)
print(estimator.intercept_)   # 輸出截距
print("線性回歸模型為: y = {}x + {}".format(estimator.coef_[0][0], estimator.intercept_[0]))
  • coef_:模型的斜率(即廣告投入對銷售額的影響系數)
  • intercept_:模型的截距
  • 模型公式:銷售額 = 系數 × 廣告投入 + 截距

評估模型?

score = estimator.score(x, y)  # 計算R2得分
print(score)
  • score()方法返回模型的 R2(決定系數)
  • R2 表示模型對數據的擬合程度,取值范圍 [0,1],越接近 1 表示擬合效果越好

運行結果

[[3.73788546]]
[-36.36123348]
線性回歸模型為: y = [[3.73788546]]x+[-36.36123348]
0.8225092881166945

完整代碼?

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegressiondata=pd.read_csv("data(1).csv")plt.scatter(data['廣告投入'], data['銷售額'])
plt.xlabel('廣告投入')
plt.ylabel('銷售額')
plt.show()x=data[["廣告投入"]]
y=data[['銷售額']]estimator=LinearRegression(fit_intercept=True)estimator.fit(x,y)
print(estimator.coef_)
print(estimator.intercept_)
print("線性回歸模型為: y = {}x+{}".format(estimator.coef_,estimator.intercept_))
score=estimator.score(x,y)
print(score)

2.多元線性回歸分析體重、年齡與收縮壓關系

導入必要的庫導入數據?

import pandas as pd
from sklearn.linear_model import LinearRegression
data = pd.read_csv("多元線性回歸.csv", encoding='gbk', engine='python')

計算相關系數矩陣

corr = data[["體重", "年齡", "血壓收縮"]].corr()

  • 相關系數矩陣可幫助判斷變量間的線性相關程度,絕對值越接近1表示越相關

?準備訓練數據

x = data[['體重', '年齡']]  # 特征矩陣(自變量)
y = data[['血壓收縮']]     # 目標向量(因變量)
  • x:選取體重年齡作為特征
  • y:選取血壓收縮作為目標變量

創建并訓練模型?

lr_model = LinearRegression()
lr_model.fit(x, y)  # 訓練模型
  • 創建線性回歸模型實例
  • fit()方法通過最小二乘法計算最佳擬合參數

模型評估?

score = lr_model.score(x, y)  # 計算R2得分
  • score()方法返回模型的 R2(決定系數)
  • R2 表示模型對數據的擬合程度,取值范圍 [0,1]

預測新數據?

print(lr_model.predict([[80, 60]]))  # 預測體重80kg、年齡60歲的收縮壓
print(lr_model.predict([[70, 30], [70, 20]]))  # 批量預測
  • predict()方法根據訓練好的模型進行預測
  • 輸入需為二維數組,每行代表一個樣本

輸出模型參數

a = lr_model.coef_       # 獲取系數
b = lr_model.intercept_  # 獲取截距
print("線性回歸模型為: y = {:.2f}x1 + {:.2f}x2 + {:.2f}.".format(a[0][0], a[0][1], b[0]))

運行結果

[[131.97426124]]
[[98.60219521][94.60003367]]
線性回歸模型為: y = 2.14x1 + 0.40x2 + -62.96.

完整代碼

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

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

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

相關文章

【時時三省】(C語言基礎)指向指針數據的指針變量

山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省在了解了指針數組的基礎上,需要了解指向指針數據的指針變量,簡稱為指向指針的指針。怎樣定義一個指向指針數據的指針變量呢?下面定義一個指向指針數據的指針變量&#…

前端css 的固定布局,流式布局,彈性布局,自適應布局,響應式布局

1. 固定布局容器的寬高是固定的,單位一般是px,不會隨著屏幕大小變化2.流式布局(百分比布局/vw)vw: 視圖寬度的百分比,1vw代表視窗寬度的1% vh: 視圖高度的百分比,1vh代表視窗高度的1%特點: 寬度隨屏幕大小變化單位用%或vw 高度通常…

python學習DAY26打卡

DAY 26 函數專題1:函數定義與參數 內容: 函數的定義 變量作用域:局部變量和全局變量 函數的參數類型:位置參數、默認參數、不定參數 傳遞參數的手段:關鍵詞參數 傳遞參數的順序:同時出現三種參數類型時…

echarts圖表點擊legend報錯問題(折線圖)

原因是&#xff1a;echats 實例&#xff0c;不能夠用響應式變量去接收。<template><div class"attendance-chart"><div v-if"loading" class"loading">加載中...</div><div v-else-if"error" class"e…

Django模型開發:模型字段、元數據與繼承全方位講解

文章目錄一、模型字段類型詳解Django 與 MySQL 字段類型映射整數類型深度對比二、常用字段選項null 與 blank 的區別注釋與幫助文本默認值設置日期時間特殊選項選項列表&#xff08;choices&#xff09;三、模型元數據與方法模型 Meta 類模型管理器&#xff08;Manager&#xf…

墨者:SQL注入實戰-MySQL

1. 墨者學院&#xff1a;SQL注入實戰-MySQL&#x1f680; 2. 實訓重點目標? 目標一&#xff1a; 了解sqlmap的使用及其tamper插件的使用&#xff1b; 目標二&#xff1a; 了解base64編碼及解碼。 3. 解題方向&#x1f50d; 目標網站的id參數通過Base64編碼傳輸&#xff0c;…

Milvus 實戰全流程

&#x1f4da; 學習路徑總覽1. Milvus 基礎知識什么是向量數據庫&#xff1f;Milvus 的核心概念&#xff08;collection、field、index、partition、segment&#xff09;Milvus 和 Faiss、Annoy、HNSW 的區別2. 安裝與部署Docker 快速部署 Milvus&#xff08;推薦&#xff09;本…

Mysql數據庫基礎(入門)

目錄 一.認識Sql 1.什么是Sql 2.Sql的作用 3.Sql通用語法 4.Sql分類 二.數據庫的操作&#xff08;DDL&#xff09; 1.創建數據庫 2.顯示/使用數據庫 3.修改數據庫 4.刪除數據庫 三.常用數據類型 1.數值類型 2.字符串類型 3.日期類型 4.詳細的數據類型 四.表的操…

MySQL 鎖機制 15 連問 · 面試速答版

一、腦圖&#xff1a;鎖全景&#xff08;先記結構&#xff0c;再填細節&#xff09; 鎖層級 ├─ 表鎖 │ ├─ 意向鎖 IS / IX │ └─ 表鎖 READ / WRITE └─ 行鎖├─ 記錄鎖 Record├─ 間隙鎖 Gap└─ 臨鍵鎖 Next-Key二、15 問 15 答&#xff08;面試官一問一…

【Linux】發展歷程

很高興為您詳細介紹Linux操作系統的詳細發展歷程。Linux是一個自由和開放源代碼的操作系統內核&#xff0c;由林納斯托瓦茲&#xff08;Linus Torvalds&#xff09;于1991年首次發布。以下是Linux操作系統的主要發展里程碑&#xff1a;1. Linux 0.01 (1991)發布日期&#xff1a…

LNMP架構+wordpress實現動靜分離

WordPress簡稱WP&#xff0c;最初是一款博客系統&#xff0c;后逐步演化成一款免費的CMS&#xff08;內容管理系統/建站系統&#xff09;。 WordPress網站的適用場景&#xff1a; 博客 企業官網 作品集網站 電商平臺 線上教育系統 論壇和社群網站 甚至會員系統、訂閱內容…

智慧燈桿:不止于照明,塔能科技的城市感知網絡野心

當夜幕悄然降臨&#xff0c;城市里的路燈便依次亮了起來&#xff0c;它們可不單單照亮了行人前行的路以及車輛行駛的道路&#xff0c;實際上還在悄無聲息地經歷著一場變革。現如今的路燈&#xff0c;早已不再僅僅充當單純的照明工具這么一個角色了&#xff0c;而是逐漸轉變成了…

【Linux內核模塊】調試技巧

內核模塊開發最讓人頭疼的不是寫代碼&#xff0c;而是調試 —— 代碼編譯通過了&#xff0c;加載后卻要么沒反應&#xff0c;要么直接讓系統崩潰。這就像在黑屋子里修機器&#xff0c;看不見摸不著。其實內核調試有一套成熟的工具箱&#xff0c;掌握這些工具和技巧&#xff0c;…

RK3568筆記九十一:QT環境搭建

若該文為原創文章,轉載請注明原文出處。 記錄按照正點原子給的手冊搭建QT環境 參考《09【正點原子】ATK-DLRK3568_Qt開發環境搭建V1.2.pdf》 一、安裝 1、下載 https://mirrors.sau.edu.cn/qt/archive/online_installers/4.6/qt-unified-linux-x64-4.6.0-online.run 2、賦…

面試實戰,問題十六,Java面試,消息隊列,如何避免消息重復消費,怎么回答

在Java面試中&#xff0c;關于消息隊列如何防止消息被重復消費的問題&#xff0c;可以從以下幾個方面進行回答&#xff0c;結合系統架構設計、消息隊列機制和業務邏輯處理&#xff0c;確保在不同場景下實現消息的冪等性。 1. 消息隊列重復消費的根本原因 消息重復消費的根本原因…

PDF轉圖片實用指南:如何批量高效轉換?

將PDF轉換為圖片后&#xff0c;可以更方便地在演示文稿、網頁或電子相冊中使用這些資料&#xff0c;以便更好地展示信息。它 是一款支持多文件批量轉換的工具&#xff0c;可將多個 PDF 文檔一鍵轉換為圖片格式。雖然界面為英文&#xff0c;但操作簡單&#xff0c;不影響使用。你…

走入Linux的世界:編輯器Vim

嘿&#xff0c;各位技術潮人&#xff01;好久不見甚是想念。生活就像一場奇妙冒險&#xff0c;而編程就是那把超酷的萬能鑰匙。此刻&#xff0c;陽光灑在鍵盤上&#xff0c;靈感在指尖跳躍&#xff0c;讓我們拋開一切束縛&#xff0c;給平淡日子加點料&#xff0c;注入滿滿的pa…

PyTorch中神經網絡的模型構建

要構建自定義模型&#xff0c;需完成兩個核心步驟&#xff1a;繼承 nn.Module 類&#xff1b;重載 __init__ 方法&#xff08;初始化&#xff09;和 forward 方法&#xff08;前向計算&#xff09; 神經網絡的構造 初始化方法&#xff08;__init__&#xff09; def __init__…

QML QtCharts坐標軸系統

QtCharts是Qt框架中強大的數據可視化模塊&#xff0c;它提供了豐富的圖表類型和靈活的坐標軸系統&#xff0c;能夠滿足各種數據展示需求。本文將全面介紹QML中QtCharts的坐標軸系統&#xff0c;包括數值坐標軸(ValueAxis)、對數坐標軸(LogValueAxis)、分類坐標軸(CategoryAxis)…

TI 2025全國電賽猜題

本科組可能的題目方向本科組器材更側重高頻信號處理、復雜控制系統、精密測量及多設備協同&#xff0c;可能涉及以下題目&#xff1a;四旋翼飛行器相關任務題目示例&#xff1a;設計 “基于四旋翼的 UV 光控自主導航系統”任務要求&#xff1a;利用四旋翼飛行器&#xff08;最大…