簡單線性回歸

簡單線性回歸圍繞一個響應(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ù)可視化

  1. 導(dǎo)入包


    image.png
  2. 創(chuàng)建解釋變量和響應(yīng)變量


    image.png
  3. 畫圖


    image.png
  4. 最后結(jié)果如下


    image.png

    (中文沒顯示歇盼。。)

完整代碼如下:

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:

image.png

完整代碼如下:

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

(已解決:)

SS_{res}=\sum_{n}^{i=1}(y_{i}-f(x_{i}))^{2} ----------------- 公式1.2
有了公式就好辦了,來人漫谷,上代碼:

print("殘差平方和代價函數(shù)為: %.2f " %np.mean((model.predict(X)-y)**2))

結(jié)果如下:


RSS

到這一步仔雷,我們有了一個代價函數(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算出:
var(x)=\frac{\sum_{n}^{i=1}(x_{i}-\bar{x})^{2}}{n-1} -------------公式1.3
\bar{x}表示x的均值,x_{i}是訓(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é)果如下:


image.png

3.2 協(xié)方差

協(xié)方差用來衡量兩個變量如何一同變化倦沧。
如果變量一起增加唇撬,它們的協(xié)方差為證。如果一個變量增加時另外一個變量減少展融,他們的協(xié)方差為負(fù)窖认。如果這兩個變量之間沒有線性關(guān)系,它們的協(xié)方差為0,它們是線性無關(guān)但是不一定是相對獨立的扑浸。
協(xié)方差可以使用下面的公式計算:

cov(x,y)=\frac{\sum_{n}^{i=1}(x_{i}-\bar{x})(y_{i}-\bar{y}))}{n-1}
和方差一樣烧给,x_{i}是訓(xùn)練數(shù)據(jù)中第i個x的值,\bar{x}表示披薩直徑的均值喝噪,\bar{y}表示價格的均值础嫡,y_{i}表示訓(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é)果圖如下:

協(xié)方差結(jié)果圖.png

到這里,我們已經(jīng)計算出了解釋變量的方差以及解釋變量和響應(yīng)變量之間的協(xié)方差晚唇,接下來需要求解出β
公式和結(jié)果如下:

b=\frac{cov(x,y)}{var(x)} ( β顯示錯誤巫财,用b來表示,但是請讀者注意哩陕,這里是 β)
把數(shù)字代入得:
b=\frac{22.65}{23.2} =0.98
現(xiàn)在我們獲得了β的值翁涤,,接下來我們需要求解α萌踱,
a = \bar{y}-b\bar{x}
這里\bar{y}是y的均值,\bar{x}是x的均值号阿。(\bar{x},\bar{y})是質(zhì)心坐標(biāo)并鸵,是一個模型必須經(jīng)過的點。
a = 12.9 - 0.98x11.2 = 1.92
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方寡喝。首先我們需要算出平方總和糙俗。
y_{i}是第i個測試實例的響應(yīng)變量觀測值,\bar{y}是響應(yīng)變量的觀測值均值预鬓。
SS_{tot}=\sum_{n}^{i=1}(y_{i}- \bar{y})^{2}
以我們表格里面數(shù)據(jù)為例:
SS_{tot}=(11-12.7)^{2}+(8.5-12.7)^{2}+....+(11-12.7)^{2}=56.8
此外巧骚,我們還要計算出RSS
回顧之前的RSS公式1.2:
SS_{res}=\sum_{n}^{i=1}(y_{i}-f(x_{i}))^{2}
把數(shù)字帶進(jìn)去就應(yīng)該是:
SS_{res}=(11-9.78)^{2} +(8.5-10.75)^{2} +.....+(11-13.68)^{2}=19.20
最后,我們來求R方
R^{2}= 1-\frac{SS_{res}}{SS_{tot}}
代入具體數(shù)字就是:
R^{2}= 1-\frac{19.20}{56.8} =0.66
R方計算得分為0.662,這表明測試實例價格變量的方差很大比例上是可以被模型解釋的格二。
接下來劈彪,用scikit-learn來印證:
代碼如下:

結(jié)果圖

結(jié)語

簡單線性回歸介紹到此。
因為本人能力有限顶猜,難免有理解不足的地方沧奴,也歡迎大家留言討論,或者直接找我溝通长窄。
Email:
下一篇寫:
從簡單線性回歸到多元線性回歸
Panbo
08242019

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滔吠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挠日,更是在濱河造成了極大的恐慌疮绷,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚣潜,死亡現(xiàn)場離奇詭異冬骚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)郑原,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門唉韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犯犁,你說我怎么就攤上這事属愤。” “怎么了酸役?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵住诸,是天一觀的道長驾胆。 經(jīng)常有香客問我,道長贱呐,這世上最難降的妖魔是什么丧诺? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮奄薇,結(jié)果婚禮上驳阎,老公的妹妹穿的比我還像新娘。我一直安慰自己馁蒂,他們只是感情好呵晚,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沫屡,像睡著了一般饵隙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沮脖,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天金矛,我揣著相機(jī)與錄音,去河邊找鬼勺届。 笑死驶俊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的免姿。 我是一名探鬼主播废睦,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼养泡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奈应,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤澜掩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杖挣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肩榕,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年惩妇,在試婚紗的時候發(fā)現(xiàn)自己被綠了株汉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡歌殃,死狀恐怖乔妈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氓皱,我是刑警寧澤路召,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布勃刨,位于F島的核電站,受9級特大地震影響股淡,放射性物質(zhì)發(fā)生泄漏身隐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一唯灵、第九天 我趴在偏房一處隱蔽的房頂上張望贾铝。 院中可真熱鬧,春花似錦埠帕、人聲如沸垢揩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽水孩。三九已至,卻和暖如春琐驴,著一層夾襖步出監(jiān)牢的瞬間俘种,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工绝淡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留宙刘,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓牢酵,卻偏偏與公主長得像悬包,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子馍乙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容