日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python 散点图线性拟合_一文教你全面掌握用Python实现线性回归

發(fā)布時(shí)間:2024/3/24 python 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 散点图线性拟合_一文教你全面掌握用Python实现线性回归 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
全文共4968字,預(yù)計(jì)學(xué)習(xí)時(shí)長(zhǎng)15分鐘或更長(zhǎng)

本文旨在為讀者理解和應(yīng)用線性回歸時(shí)提供參考。雖然線性回歸算法很簡(jiǎn)單,但是只有少數(shù)人能真正理解其基本原則。

本文首先會(huì)深入挖掘線性回歸理論,理解其內(nèi)在的工作機(jī)制,然后利用Python實(shí)現(xiàn)該算法,為商業(yè)問(wèn)題建模。

理論

線性回歸或許是學(xué)習(xí)統(tǒng)計(jì)學(xué)最簡(jiǎn)單的方法。在學(xué)習(xí)更高級(jí)的方法之前,這是一個(gè)很好的入門(mén)方法。事實(shí)上,許多更高級(jí)的方法可被視為線性回歸的延伸。因此,理解好這一簡(jiǎn)單模型將為將來(lái)更復(fù)雜的學(xué)習(xí)打下良好基礎(chǔ)。

線性回歸可以很好地回答以下問(wèn)題:

· 兩個(gè)變量間有關(guān)系嗎?

· 關(guān)系有多強(qiáng)?

· 哪一個(gè)變量的影響最大?

· 預(yù)測(cè)的各個(gè)變量影響值能有多精確?

· 預(yù)測(cè)的目標(biāo)值能有多精確?

· 其關(guān)系是線性的嗎?

· 是否有交互作用?

預(yù)估系數(shù)

假設(shè)僅有一個(gè)自變量和因變量,那么線性回歸表達(dá)如下:

一個(gè)自變量和因變量線性模型的方程式

在上圖的方程中,兩個(gè)β就是系數(shù)。在模型中預(yù)測(cè)結(jié)果需要用到這些系數(shù)。

那么,如何算出這些參數(shù)呢?

為此,需要最小化最小二乘法或者誤差平方和。當(dāng)然,線性模型也不是完美的,也不能準(zhǔn)確預(yù)測(cè)出所有數(shù)據(jù),這就意味著實(shí)際值和預(yù)測(cè)值間存在差異。該誤差能用以下方程簡(jiǎn)單算出:

實(shí)際值減去預(yù)測(cè)值

但為什么要平方誤差呢?

平方誤差,是因?yàn)轭A(yù)測(cè)值可能大于也可能小于實(shí)際值,從而分別產(chǎn)生負(fù)或正的誤差。如果沒(méi)有平方誤差值,誤差的數(shù)值可能會(huì)因?yàn)檎?fù)誤差相消而變小,而并非因?yàn)槟P蛿M合好。

此外,平方誤差會(huì)加大誤差值,所以最小化平方誤差可以保證模型更好。

下圖有助于更好地理解這個(gè)概念:

線性擬合數(shù)據(jù)集

在上述圖表中,紅點(diǎn)是實(shí)際值,而藍(lán)線是線性模型。灰線展現(xiàn)了預(yù)測(cè)值和實(shí)際值之間的誤差。因此,藍(lán)線就是灰線長(zhǎng)度平方的最小值。

經(jīng)過(guò)一系列超出本文難度的數(shù)學(xué)計(jì)算,最終可以得到以下這個(gè)方程式,用以計(jì)算參數(shù)。

x和y代表平均值

預(yù)估系數(shù)的相關(guān)性

目前已得知系數(shù),那么如何證明系數(shù)與因變量是否相關(guān)?

最好的方法就是找到p值。p值被用于量化數(shù)據(jù)的重要性,它能判斷零假設(shè)是否被否定。

什么是零假設(shè)?

所有建模任務(wù)都是在自變量和因變量存在一定關(guān)聯(lián)的假設(shè)下進(jìn)行的。而零假設(shè)則正好相反,也就是說(shuō)自變量和因變量之間沒(méi)有任何關(guān)聯(lián)。

因此,算出每一個(gè)系數(shù)的p值就能得知,從數(shù)據(jù)值上來(lái)說(shuō),該變量對(duì)于預(yù)估因變量是否重要。一般來(lái)說(shuō),如果p值小于0.05,那么自變量和因變量就之間存在強(qiáng)烈關(guān)系。

評(píng)估模型的準(zhǔn)確性

通過(guò)找出p值,從數(shù)據(jù)值上來(lái)說(shuō),自變量是非常重要的。

如何得知該線性模型是擬合好呢?

通常使用RSE(殘差標(biāo)準(zhǔn)差)和 R2 來(lái)評(píng)估模型。

RSE計(jì)算公式

R2計(jì)算公式

第一個(gè)誤差度量很容易理解:殘差越小,模型數(shù)據(jù)擬合越好(在這種情況下,數(shù)據(jù)越接近線性關(guān)系)。

R2可以衡量因變量的變化比例,并用自變量x表述。因此,假設(shè)在一個(gè)線性方程中,自變量x可以解釋因變量,那么變化比例就高, R2 將接近1。反之,則接近0。

多元線性回歸理論

在現(xiàn)實(shí)生活中,不會(huì)出現(xiàn)一個(gè)自變量預(yù)測(cè)因變量的情況。所以,線性回歸模型是一次只分析一個(gè)自變量嗎?當(dāng)然不是了,實(shí)際情況中采取多元線性回歸。

該方程式和一元線性回歸方程很像,只不過(guò)是再加上預(yù)測(cè)數(shù)和相應(yīng)的系數(shù)。

多元線性回歸等式。p表示自變量的個(gè)數(shù)。

評(píng)估自變量的相關(guān)性

在前文中,通過(guò)找出p值來(lái)評(píng)估一元線性回歸中自變量的相關(guān)性。在多元線性回歸中,F統(tǒng)計(jì)量將被用于評(píng)估相關(guān)性。

F統(tǒng)計(jì)量計(jì)算公式。n表示數(shù)據(jù)量,p表示自變量的個(gè)數(shù)。

F統(tǒng)計(jì)量在整個(gè)方程中計(jì)算,而p值則針對(duì)特定的自變量。如果兩者有強(qiáng)烈的相關(guān)性,F大于1。相反,F大約等于1。

比1大多少是足夠大呢?

這是一個(gè)很難回答的問(wèn)題。通常,如果數(shù)據(jù)中有一個(gè)很大的數(shù)值的話,F可以?xún)H比1大一點(diǎn)點(diǎn),而又代表了強(qiáng)烈的相關(guān)性。如果數(shù)據(jù)集中的數(shù)據(jù)量很小的話,F值一定要比1大很多,才能表示強(qiáng)烈的相關(guān)性。

為什么在這種情況下不能使用p值呢?

因?yàn)槲覀償M合了許多自變量,所以我們需要考慮一個(gè)有很多自變量的情況(p值很大)。當(dāng)自變量的數(shù)量較大時(shí),通常會(huì)有大約5%的自變量的p值會(huì)很小——即使它們?cè)诮y(tǒng)計(jì)上并不顯著。因此,我們使用F統(tǒng)計(jì)量來(lái)避免將不重要的自變量視為重要的自變量。

評(píng)估模型準(zhǔn)確性

和一元線性回歸模型一樣,多元線性回歸模型的準(zhǔn)確性也可以用R2來(lái)評(píng)估。然而,需要注意的是,隨著自變量數(shù)量的增加,R2的數(shù)值也會(huì)增大。這是因?yàn)槟P捅厝缓陀?xùn)練數(shù)據(jù)擬合得更好。

但是,這并不意味著該模型在測(cè)試數(shù)據(jù)上(預(yù)測(cè)未知數(shù)據(jù)時(shí))也會(huì)有很好的表現(xiàn)。

增加干擾

在線性模型中,多元自變量意味著其中一些自變量會(huì)對(duì)其他自變量產(chǎn)生影響。

比如說(shuō),已知一個(gè)人年齡和受教育年數(shù),去預(yù)測(cè)她的薪資。很明顯,年齡越大,受教育時(shí)長(zhǎng)就越長(zhǎng)。那么,在建模時(shí),要怎樣處理這種干擾呢?

以?xún)蓚€(gè)自變量為例:

多元線性回歸中的干擾

從上式可知,我們將兩個(gè)自變量相乘,得到一個(gè)新的系數(shù)。從簡(jiǎn)化的公式中可以看到,該系數(shù)受到另一個(gè)特征值的影響。

通常來(lái)說(shuō),在將干擾模型考慮在內(nèi)時(shí),也需要考慮個(gè)體特征的影響,即使在p值不重要時(shí)也要這么做。這就是分層遞階原則。該原則背后的根據(jù)是,如果兩個(gè)自變量互相干擾,那么將它們個(gè)體影響考慮在內(nèi)將會(huì)對(duì)建模有很小的影響。

以上就是線性回歸的基本原理。接下來(lái)本文將介紹如何在Python中實(shí)現(xiàn)一元線性回歸和多元線性回歸,以及如何評(píng)估兩種模型的模型參數(shù)質(zhì)量和模型整體表現(xiàn)。

代碼和數(shù)據(jù)傳送門(mén):https://github.com/marcopeix/ISL-linear-regression

強(qiáng)烈建議讀者在閱讀本文之后動(dòng)手在Jupyter notebook上復(fù)現(xiàn)整個(gè)過(guò)程,這將有助于讀者充分理解和利用該教程。

那么開(kāi)始吧!

本文用到的數(shù)據(jù)集包括在電視、廣播和報(bào)紙上花費(fèi)的廣告費(fèi)用及各自帶來(lái)的銷(xiāo)售額。

該實(shí)驗(yàn)旨在利用線性代數(shù)了解廣告費(fèi)用對(duì)銷(xiāo)售額的影響。

導(dǎo)入庫(kù)

利用Python編程有一個(gè)好處,就是它可以提供多個(gè)庫(kù)的渠道,使得我們可以快速讀取數(shù)據(jù)、繪制數(shù)據(jù)和執(zhí)行線性回歸。

筆者習(xí)慣于將所有必要的庫(kù)放在代碼的開(kāi)頭,使代碼井然有序。導(dǎo)入:

import pandas as pdimport numpy as np import matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import r2_score import statsmodels.api as sm

讀取數(shù)據(jù)

下載數(shù)據(jù)集后,將數(shù)據(jù)集放在項(xiàng)目文件的數(shù)據(jù)目錄中,讀取數(shù)據(jù):

data = pd.read_csv("data/Advertising.csv")

查看數(shù)據(jù)時(shí),輸入:

data.head()

得到結(jié)果如下:

可以看到,“未命名:0”列是多余的。所以,我們把這一列刪除。

data.drop(['Unnamed: 0'], axis=1)

現(xiàn)在數(shù)據(jù)已經(jīng)清理完畢,可以運(yùn)行線性回歸了!

簡(jiǎn)單線性回歸

建模

使用簡(jiǎn)單線性回歸建模時(shí),這里只考慮電視廣告對(duì)銷(xiāo)售額的影響。在正式建模之前,首先查看一下數(shù)據(jù)。

可以利用matplotlib(一個(gè)常用的Python繪制庫(kù))來(lái)畫(huà)一個(gè)散點(diǎn)圖。

plt.figure(figsize=(16, 8))plt.scatter( data['TV'], data['sales'], c='black')plt.xlabel("Money spent on TV ads ($)")plt.ylabel("Sales ($)")plt.show()

運(yùn)行上述代碼,可以得到下圖:

電視廣告費(fèi)用和銷(xiāo)售額散點(diǎn)圖

從圖中可以看到,電視廣告費(fèi)用和銷(xiāo)售額明顯相關(guān)。

基于此數(shù)據(jù),可以得出線性近似。操作如下:

X = data['TV'].values.reshape(-1,1)y = data['sales'].values.reshape(-1,1)reg = LinearRegression()reg.fit(X, y)print("The linear model is: Y = {:.5} + {:.5}X".format(reg.intercept_[0], reg.coef_[0][0]))

就這么簡(jiǎn)單?

對(duì)的!對(duì)數(shù)據(jù)集給出一條擬合直線并查看等式參數(shù)就是這么簡(jiǎn)單。在該案例中,可以得到:

一元線性回歸等式

接下來(lái)將數(shù)據(jù)擬合線可視化。

predictions = reg.predict(X) plt.figure(figsize=(16, 8))plt.scatter( data['TV'], data['sales'], c='black')plt.plot( data['TV'], predictions, c='blue', linewidth=2)plt.xlabel("Money spent on TV ads ($)")plt.ylabel("Sales ($)")plt.show()

可以得到:

線性擬合

從上圖可以發(fā)現(xiàn),一元線性回歸模型似乎就可以大致解釋電視廣告費(fèi)用對(duì)銷(xiāo)售額的影響。

評(píng)估模型相關(guān)性

接下來(lái)是檢驗(yàn)一個(gè)模型表現(xiàn)是否良好,需要查看它的R2值和每個(gè)系數(shù)的p值。

輸入以下代碼:

X = data['TV']y = data['sales'] X2 = sm.add_constant(X)est = sm.OLS(y, X2)est2 = est.fit()print(est2.summary())

可以得到如下輸出:

R2值和p值

觀察兩個(gè)系數(shù)可以發(fā)現(xiàn),p值雖然并不一定是0,但是非常低。這意味著這些系數(shù)和目標(biāo)值(此處即銷(xiāo)售額)之間有很強(qiáng)烈的聯(lián)系。

同時(shí)可以觀察到,R2值為0.612。這說(shuō)明大約60%的銷(xiāo)售額變化是可以由電視廣告花費(fèi)來(lái)解釋的。這樣的結(jié)果是合理的。但是,這一定不是可以用來(lái)準(zhǔn)確預(yù)測(cè)銷(xiāo)售額的最好的結(jié)果。在報(bào)紙和廣播廣告上的花費(fèi)必定對(duì)銷(xiāo)售額有一定的影響。

接下來(lái)將檢測(cè)多元線性回歸模型是否能取得更好的結(jié)果。

多元線性回歸

建模

和一元線性回歸的建模過(guò)程一樣,定義特征值和目標(biāo)變量,并利用scikit-learn庫(kù)來(lái)執(zhí)行線性回歸模型。

Xs = data.drop(['sales', 'Unnamed: 0'], axis=1)y = data['sales'].reshape(-1,1)reg = LinearRegression()reg.fit(Xs, y)print("The linear model is: Y = {:.5} + {:.5}*TV + {:.5}*radio + {:.5}*newspaper".format(reg.intercept_[0], reg.coef_[0][0], reg.coef_[0][1], reg.coef_[0][2]))

就是這么簡(jiǎn)單!根據(jù)上述代碼可以得到如下等式:

多元線性回歸等式

當(dāng)然,由于一共有四個(gè)變量,這里無(wú)法把三種廣告媒介對(duì)銷(xiāo)售額的影響可視化,那將需要一個(gè)四維圖形。

需要注意的是,報(bào)紙的系數(shù)是負(fù)數(shù),并且很小。這和模型有關(guān)嗎?為了回答這個(gè)問(wèn)題,我們需要計(jì)算模型的F統(tǒng)計(jì)量、R2值以及每個(gè)系數(shù)的p值。

評(píng)估模型相關(guān)性

正如你所想,這一步驟和一元線性回歸模型中的相應(yīng)步驟非常相似。

X = np.column_stack((data['TV'], data['radio'], data['newspaper']))y = data['sales']X2 = sm.add_constant(X)est = sm.OLS(y, X2)est2 = est.fit()print(est2.summary())

可以得到:

R2值,p值和F統(tǒng)計(jì)量

可以看到,多元線性回歸模型的R2值比一元線性回歸模型要高得多,達(dá)到了0.897!

其F統(tǒng)計(jì)量為570.3。這比1要大得多。由于本文使用的數(shù)據(jù)集比較小(只有200個(gè)數(shù)據(jù)),這說(shuō)明廣告花費(fèi)和銷(xiāo)售額之間有強(qiáng)烈的聯(lián)系。

最后,由于本文只用了三個(gè)自變量可以利用p值來(lái)衡量它們是否與模型相關(guān)。從上表可以發(fā)現(xiàn),第三個(gè)系數(shù)(即報(bào)紙廣告的系數(shù))的p值比另外兩個(gè)要大。這說(shuō)明從數(shù)據(jù)來(lái)看,報(bào)紙廣告花費(fèi)并不重要。去除這個(gè)自變量可能會(huì)使R2有輕微下降,但是可以幫助得到更加準(zhǔn)確的預(yù)測(cè)結(jié)果。

線性回歸模型也許不是表現(xiàn)最好的模型,但了解線性回歸是非常重要的,這將幫助我們打好基礎(chǔ),理解更加復(fù)雜的統(tǒng)計(jì)學(xué)方法。

留言 點(diǎn)贊 關(guān)注

我們一起分享AI學(xué)習(xí)與發(fā)展的干貨

總結(jié)

以上是生活随笔為你收集整理的Python 散点图线性拟合_一文教你全面掌握用Python实现线性回归的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。