簡單線性回歸圍繞一個響應(yīng)變量和解釋變量的某個特征之間的關(guān)系進(jìn)行建模。
討論問題:
“如何對模型進(jìn)行擬合”
雖然簡單的線性回歸對于現(xiàn)實世界的問題幾乎不具有可用性毁嗦,但是理解簡單線性回歸是理解許多其他模型的關(guān)鍵。
本文將學(xué)習(xí)簡單線性回歸的一般模型过牙,并將他們運用到現(xiàn)實世界的數(shù)據(jù)集肝谭。
1. 簡單線性回歸-為何簡單
大家回想一下,回歸問題的目的是去預(yù)測一個連續(xù)響應(yīng)變量的值穴肘。
我們舉個例子:
通過披薩的尺寸來預(yù)測價格
ID | 直徑(英寸) | 價格(RMB) |
---|---|---|
1 | 6 | 7 |
2 | 8 | 9 |
3 | 10 | 13 |
4 | 14 | 17.5 |
5 | 18 | 18 |
表1.1 披薩價格尺寸表
1. 我們用matplotlib作圖來將訓(xùn)練數(shù)據(jù)可視化
-
導(dǎo)入包
-
創(chuàng)建解釋變量和響應(yīng)變量
-
畫圖
-
最后結(jié)果如下
(中文沒顯示歇盼。。)
完整代碼如下:
import numpy as np
import matplotlib.pyplot as plt
#Numpy庫和Matplotlib庫不用我說了吧~~
#在scikit-learn中的一個慣用法是將特征向量的矩形命名為X<-大寫
#大寫字母表示矩陣梢褐,小寫字母表示向量
X = np.array([[6], [8], [10], [14], [18]]).reshape(-1,1)
#X表示披薩的直徑
y = [7, 9, 13, 17.5, 18]
#y表示價格向量
plt.figure()
plt.title('披薩價格尺寸散點圖')
plt.xlabel('直徑(英寸)')
plt.ylabel('價格(RMB)')
plt.plot(X, y, 'k.')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.show()
從訓(xùn)練數(shù)據(jù)中心我們可以看出披薩的直徑和價格之間存在正相關(guān)關(guān)系旺遮,這個結(jié)論我們?nèi)粘R部梢缘贸觥?br> 接下來我們需要
2. 對這個關(guān)系進(jìn)行建模
代碼1.2:
完整代碼如下:
from sklearn.linear_model import LinearRegression
model = LinearRegression() #創(chuàng)建一個估計器實例
model.fit(X, y)#用訓(xùn)練數(shù)據(jù)擬合模型
test_pizza = np.array([12])
predicted_price = model.predict(test_pizza)[0]
#預(yù)測一個新的直徑披薩的價格
print('直徑12的披薩價格為:%.2f 元' %predicted_price)
簡單線性模型假設(shè)響應(yīng)變量和解釋變量之前存在線性關(guān)系,它使用一個被稱為超平面的線性平面來對這種關(guān)系進(jìn)行建模盈咳。
一個超平面是一個子空間,它比組成它的環(huán)繞空間小一個維度边翼。在簡單線性回歸中共有兩個維度鱼响,一個維度表示響應(yīng)變量,另一個維度表示解釋變量组底。因此丈积,回歸超平面只有一個維度,一個一維的超平面是一條直線债鸡。
LinearRegression類是一個估計器江滨,估計器基于觀測到的數(shù)據(jù)預(yù)測一個值。在scikit-learn中厌均,所有的估計器都實現(xiàn)了fit方法和predict方法唬滑。前者用于學(xué)習(xí)模型的參數(shù),后者使用學(xué)習(xí)到的參數(shù)來預(yù)測一個解釋變量對應(yīng)的響應(yīng)變量值棺弊。
LinearRegression的fit方法學(xué)習(xí)了公式簡單線性回歸模型的參數(shù):
y = α+βx 公式1.1
在上面的公式中晶密,y是響應(yīng)變量的預(yù)測值,在這個例子中模她,它表示披薩的預(yù)測價格稻艰,x表示將解釋變量,α和β都是通過學(xué)習(xí)算法學(xué)到的模型參數(shù)侈净。
利用訓(xùn)練數(shù)據(jù)學(xué)習(xí)產(chǎn)生最佳擬合模型的簡單線性回歸的參數(shù)值稱為普通最小二乘(Ordinary Lease Squares, OLS)或者線性最小二乘尊勿。
2. 用代價函數(shù)評價模型的擬合性
實際當(dāng)中,一個參數(shù)的集合繪制畜侦,往往會產(chǎn)生幾條回歸線元扔。那么問題來了,如何評估哪組參數(shù)值產(chǎn)生了最佳擬合回歸線呢夏伊?
代價函數(shù)
代價函數(shù)摇展,也稱為損失函數(shù),它用于定義和衡量一個模型的誤差。
本例子中咏连,由模型預(yù)測出的價格和在訓(xùn)練數(shù)據(jù)集中觀測到的披薩價格之間的差值被稱為殘差或者訓(xùn)練誤差盯孙。
我們可以通過最小化殘差的和來生成最佳披薩價格預(yù)測器。也就是說祟滴,對于所有訓(xùn)練數(shù)據(jù)而言振惰,如果模型預(yù)測的響應(yīng)變量都接近觀測值,那么模型就是擬合的垄懂。
這種衡量模型擬合的方法叫做殘差平方和(RSS)代價函數(shù)骑晶。
在形式上,該函數(shù)通過對所有訓(xùn)練數(shù)據(jù)的殘差平方求和來衡量模型的擬合性草慧。
RSS由下面的方程公式計算出:(坑1:MD里面怎么插入這么復(fù)雜的公式啊桶蛔,先插圖)
(已解決:)
----------------- 公式1.2
有了公式就好辦了,來人漫谷,上代碼:
print("殘差平方和代價函數(shù)為: %.2f " %np.mean((model.predict(X)-y)**2))
結(jié)果如下:
到這一步仔雷,我們有了一個代價函數(shù),可以通過求這個函數(shù)的極小值來找出模型的參數(shù)值舔示。
3. 求解簡單的線性回歸的OLS
回想一下碟婆,簡單線性回歸由方程公式1.1給出,而我們的目標(biāo)是通過求代價函數(shù)的極小值來求解出α和β的值惕稻。
首先竖共,先求解β
這里需要引入?yún)f(xié)方差這個概念。 我們需要計算x的方差以及x和y的協(xié)方差俺祠。
3.1 方差
方差用來衡量一組值偏離程度公给,如果集合中的所有數(shù)值都相等,那么這組數(shù)值的方差為0.方差小意味著這組值都很接近總體均值锻煌,而如果集合中包括偏離均值很遠(yuǎn)的數(shù)據(jù)則集合會有很大的方差妓布。
方差可以使用下面的公式1.3算出:
-------------公式1.3
表示x的均值,是訓(xùn)練數(shù)據(jù)中第i個x的值宋梧,n表示訓(xùn)練數(shù)據(jù)的總量匣沼。
接下來計算一下訓(xùn)練數(shù)據(jù)中披薩直徑的方差,代碼如下:
X=np.array([[6], [8], [10], [14], [18]]).reshape(-1, 1)
x_bar = X.mean()
print('平均值為:',x_bar)
#這里在計算樣本方差的時候?qū)颖镜臄?shù)量減去1
#這個技巧稱為貝塞爾矯正捂龄,它的作用是糾正了對樣本中總體方差估計的偏差
variance = ((X -x_bar)**2).sum() /(X.shape[0]-1)
print('方差是:',variance)
Numpy庫也提供了一個叫做var的方法來計算方差释涛。
計算樣本方差時關(guān)鍵字參數(shù)ddof可以設(shè)置貝塞爾矯正,代碼如下:
print(np.var(X,ddof=1))
結(jié)果如下:
3.2 協(xié)方差
協(xié)方差用來衡量兩個變量如何一同變化倦沧。
如果變量一起增加唇撬,它們的協(xié)方差為證。如果一個變量增加時另外一個變量減少展融,他們的協(xié)方差為負(fù)窖认。如果這兩個變量之間沒有線性關(guān)系,它們的協(xié)方差為0,它們是線性無關(guān)但是不一定是相對獨立的扑浸。
協(xié)方差可以使用下面的公式計算:
和方差一樣烧给,是訓(xùn)練數(shù)據(jù)中第i個x的值,表示披薩直徑的均值喝噪,表示價格的均值础嫡,表示訓(xùn)練數(shù)據(jù)中第i個y的值,n表示訓(xùn)練數(shù)據(jù)的總量酝惧。
我們來計算一下訓(xùn)練數(shù)據(jù)中披薩半徑和價格的協(xié)方差:
代碼如下:
y = np.array([7, 9, 13, 17.5, 18])
y_bar = y.mean()
#因為所有的操作是行向量榴鼎,所以把x轉(zhuǎn)置
covariance = np.multiply((X - x_bar).transpose(), y - y_bar).sum() /(X.shape[0] - 1)
print('協(xié)方差為:',covariance)
#看看Numpy自帶的
print(np.cov(X.transpose(),y)[0][1])
結(jié)果圖如下:
到這里,我們已經(jīng)計算出了解釋變量的方差以及解釋變量和響應(yīng)變量之間的協(xié)方差晚唇,接下來需要求解出β
公式和結(jié)果如下:
( β顯示錯誤巫财,用b來表示,但是請讀者注意哩陕,這里是 β)
把數(shù)字代入得:
現(xiàn)在我們獲得了β的值翁涤,,接下來我們需要求解α萌踱,
這里是y的均值,是x的均值号阿。是質(zhì)心坐標(biāo)并鸵,是一個模型必須經(jīng)過的點。
ok扔涧,到此园担,已經(jīng)通過代價函數(shù)的極小值解除了模型的參數(shù)值,可以代入披薩的直徑預(yù)測他們的價格枯夜。
(一元二次方程弯汰,,湖雹,這就是傳說中:簡單線性回歸S缴痢!Kだ簟)
4. 評價模型
到這里鸽嫂,我們已經(jīng)使用了一種學(xué)習(xí)算法從訓(xùn)練數(shù)據(jù)中估計出了模型的參數(shù)。我們?nèi)绾卧u估模型是否很好的表達(dá)了現(xiàn)實中解釋變量和響應(yīng)變量之間的關(guān)系呢征讲?
表2:評價模型測試實例
測試實例 | 披薩直徑 | 實際價格 | 預(yù)測價格 |
---|---|---|---|
1 | 8 | 11 | 9.77 |
2 | 9 | 8.5 | 10.75 |
3 | 11 | 15 | 12.70 |
4 | 16 | 18 | 17.59 |
5 | 12 | 11 | 13.68 |
本文使用一種叫做R方的方法据某。
R方,也叫決定系數(shù)诗箍,它用來衡量數(shù)據(jù)和回歸線的貼近程度癣籽。 計算R方的方法有很多種,在簡單線性回歸模型中,R方等于皮爾森積差相關(guān)系數(shù)(PPMCC)的平方筷狼,也被稱為皮爾森相關(guān)系數(shù)r的平方瓶籽。使用該計算方法,R方必須是0和1之間的正數(shù)桑逝。
原因非常簡單和直觀:如果R方描述的是由模型解釋的響應(yīng)變量中的方差的比例棘劣,這個比例不能大于1或者小于0.
了解性能指標(biāo)的局限性非常重要,R方對于異常值尤其敏感楞遏,新的特征增加到模型中時茬暇,它常常會出現(xiàn)異樣增長。
我們通過scikit-learn使用的方法來計算披薩價格預(yù)測器R方寡喝。首先我們需要算出平方總和糙俗。
是第i個測試實例的響應(yīng)變量觀測值,是響應(yīng)變量的觀測值均值预鬓。
以我們表格里面數(shù)據(jù)為例:
此外巧骚,我們還要計算出RSS
回顧之前的RSS公式1.2:
把數(shù)字帶進(jìn)去就應(yīng)該是:
最后,我們來求R方
代入具體數(shù)字就是:
R方計算得分為0.662,這表明測試實例價格變量的方差很大比例上是可以被模型解釋的格二。
接下來劈彪,用scikit-learn來印證:
代碼如下:
結(jié)語
簡單線性回歸介紹到此。
因為本人能力有限顶猜,難免有理解不足的地方沧奴,也歡迎大家留言討論,或者直接找我溝通长窄。
Email:
下一篇寫:
從簡單線性回歸到多元線性回歸
Panbo
08242019