sklearn快速入门教程:(二)线性回归
文章目錄
- 一、從本文起學(xué)會快速閱讀和學(xué)習(xí)
- 二、線性回歸的原理回顧及官方文檔
- 三、官方文檔的分析
- 四、舉一反三
- 五、小結(jié)
一、從本文起學(xué)會快速閱讀和學(xué)習(xí)
本來是想把關(guān)于快速閱讀的說明寫在前一節(jié),但最后還是覺得放在這個例子里面更加妥當(dāng)。
首先要明確一點:快速閱讀絕不等于讀得快!真正的快速閱讀實際上是明確閱讀的要點,把最多的精力放在最重要的地方去細(xì)讀;同時果斷地減少甚至舍棄對不重要的點的閱讀。比如有的文檔可能有2000個單詞,但實際上真正有用的部分就只有200詞。如果只給你10分鐘的時間,你去搞明白這200詞的內(nèi)容實際上并不困難。但如果每個點都想看明白,估計10分鐘連這2000個詞都還沒認(rèn)全時間就已經(jīng)過去了。
那么與之對應(yīng)的快速學(xué)習(xí)也是同樣的道理。尤其在初學(xué)的時候,一定要把精力放在主干的知識框架上,而那些細(xì)枝末節(jié)的東西有空了或者遇到了再去慢慢看。相反如果一來就想一口氣把所有的細(xì)節(jié)都弄清楚,那么很有可能掌握正確學(xué)習(xí)方法的同學(xué)已經(jīng)在用sklearn做項目了,而你還在糾結(jié)線性回歸的實現(xiàn)。
廢話不多說,我們直接進(jìn)入正題。
二、線性回歸的原理回顧及官方文檔
線性回歸的公式非常簡單:
y^(w,x)=w0+w1x1+...+wpxp\hat{y}(w, x) = w_0 + w_1 x_1 + ... + w_p x_p y^?(w,x)=w0?+w1?x1?+...+wp?xp?
這里 xix_ixi? 代表輸入向量的第 iii 維,wiw_iwi?則是參數(shù)的第 iii維, y^\hat{y}y^? 是輸出值。從原理上我們其實只關(guān)心兩個問題:如何根據(jù)現(xiàn)有的數(shù)據(jù)算出它的參數(shù)?參數(shù)求出之后我們怎么用它來預(yù)測?
官方很直接地先給出了這樣一段代碼:
>>> import numpy as np >>> from sklearn.linear_model import LinearRegression >>> X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]]) >>> # y = 1 * x_0 + 2 * x_1 + 3 >>> y = np.dot(X, np.array([1, 2])) + 3 >>> reg = LinearRegression().fit(X, y)>>> reg.coef_ array([1., 2.]) >>> reg.intercept_ 3.0000... >>> reg.predict(np.array([[3, 5]])) array([16.])注意,上述敘述過程其實就是我們通常的學(xué)習(xí)新模型的方式。先看看原理,再直接粘代碼。這種方式其實就是最簡單直接的方式。但如果只是這樣去復(fù)制粘貼,很顯然是不行的。因為如果沒有理解代碼的涵義,那么遇到變化時就完全不知所措,到時候又得回來老老實實看原理,很顯然這就很浪費時間。
回顧本文開頭所講,我們是要細(xì)讀那些最重要的地方,很顯然,這段代碼就是我們要去細(xì)讀的地方。
三、官方文檔的分析
這段代碼中前2行的代碼只是導(dǎo)入對應(yīng)的Numpy庫和LinearRegression模塊,可以忽略,要用的時候照著樣子照抄即可,頂多注意一下這里把numpy取了一個別名叫np.
接下來3-5行是在生成原始數(shù)據(jù)。這里我們仔細(xì)觀察一下。首先變量X很顯然是輸入變量,而注釋中也很清楚地說明了輸出變量的值是由公式 y=1?x0+2?x1+3y = 1 * x_0 + 2 * x_1 + 3y=1?x0?+2?x1?+3 得到的。那么這里我們仔細(xì)看一下兩個變量的結(jié)構(gòu)。我們將X和 y分別輸出:
Xarray([[1, 1],[1, 2],[2, 2],[2, 3]]) yarray([ 6, 8, 9, 11])這里注意到,X 是一個5×25\times 25×2 的數(shù)組(和矩陣稍有不同,但形狀完全一樣),而y是一個一維的數(shù)組。由此可見,我們要用來擬合的數(shù)據(jù),其輸入變量必須是列向量,而輸出的這個變量則相對自由(注意,這也是sklearn相對比較坑的一點;官方的說法是為了節(jié)省內(nèi)存開銷,但如果熟悉Matlab、R等相對更加專業(yè)的計算類程序的人容易覺得不適應(yīng))。那么明白了這一點,我們要輸入怎樣的數(shù)據(jù)就完全明確了。那么如果我們想換上自己的數(shù)據(jù)不外乎也就是把X 和y 按照同樣的格式輸入即可。
接下來第6行就很有意思了。首先它是直接調(diào)用LinearRegression類的方法fit(X,y),直接實例化了一個線性回歸模型,并且用上面生成的數(shù)據(jù)進(jìn)行了擬合。看到這里就能夠明白了,原來只需要把數(shù)據(jù)按照格式輸入,就可以完成模型的擬合。事實上這段代碼也可以改成以下形式:
reg = LinearRegression() reg.fit(X, y)因為fit()方法返回值其實是模型本身self,所以在初始化reg之后只需要直接調(diào)用fit(),它自己對應(yīng)的系數(shù)值(屬性)就被成功賦值。這種寫法個人更為推薦,因為它雖然看起來多出一行,但整個運行的機(jī)制則顯得更加清晰。
第9,11行就是系數(shù)和偏差值的展示。上面提到,注釋中已經(jīng)說明了數(shù)據(jù)就是由方程y=1?x0+2?x1+3y = 1 * x_0 + 2 * x_1 + 3y=1?x0?+2?x1?+3生成的,而這時我們看到系數(shù)值分別等于 1,2而偏差值是3,和理論模型完全一致。
重點在第13行,此時它調(diào)用了LinearRegression類的predict()方法。那么顯然,這個方法就是利用擬合好的線性回歸模型來計算新輸入值對應(yīng)的輸出值。這里新輸入值仍然和擬合時的格式保持一致。
那么小結(jié)一下,根據(jù)官方文檔,要擬合一個線性回歸模型并且預(yù)測出新值的話,其實只需要進(jìn)行四個步驟:
- 格式化數(shù)據(jù),輸入為n*d的數(shù)組,其中n表示數(shù)據(jù)的個數(shù),d是維度;輸出值是一維數(shù)組。
- 初始化模型LinearReregression()
- 擬合fit(X,y)
- 預(yù)測predict(X_test)
四、舉一反三
注意,到這里還并沒有結(jié)束。一個成功的調(diào)包俠工程師,在看懂一段代碼過后一定要進(jìn)一步對其進(jìn)行探索,那么這里我們?nèi)菀紫氲綆讉€問題:
- 很顯然上述的生成數(shù)據(jù)的方式太低效,我想用點隨機(jī)的數(shù)據(jù)行不行?或者我想用更大一點的數(shù)據(jù)行不行?
- 模型預(yù)測雖然可以做了,但想要評估一下預(yù)測結(jié)果行不行?
- 我想把結(jié)果畫出來行不行?
當(dāng)然都可以。再當(dāng)然,要實現(xiàn)這些方法就要用到其它的一些庫和方法。
比如,上述例子只給了5個點,我想試一試 X={1,2,...,100}X = \left\{1,2,...,100 \right\}X={1,2,...,100}, y=0.3?X+1y = 0.3*X+1y=0.3?X+1,那么這里就涉及到numpy的應(yīng)用了。比如我們可以用這種方法:
import numpy as np X = np.reshape(np.arange(100),[-1,1]) y = 0.3*X + 1 reg.fit(X,y)這段代碼同樣可以運行。但是注意到這里我們用到了另一個方法 np.reshape(),這是為了保證X滿足fit函數(shù)的數(shù)據(jù)結(jié)構(gòu)要求。如果去掉這個方法則會報錯。
另外模型評估可以直接用reg.score(X,y),或者再去查詢其它的模型評估方法。如果要畫圖則需要用到matplotlib。
當(dāng)然,后面兩個問題就是在已經(jīng)理解和掌握了LinearRegression()之后的擴(kuò)展內(nèi)容。實際上在完成了第1個問題時,我們就已經(jīng)學(xué)會了如何使用這個方法了。
五、小結(jié)
本文詳細(xì)講解了sklearn中的線性回歸模型LinearRegression()的使用。相信這會你已經(jīng)發(fā)現(xiàn)我們并沒有講太多的原理,而是直接根據(jù)模型的功能去查詢方的代碼。再通過代碼的內(nèi)容詳細(xì)分析了其中的關(guān)鍵點,即數(shù)據(jù)的結(jié)構(gòu)(我們也可以更直接地叫它shape)。相信看完這篇文章頂多也花不了10分鐘,但你已經(jīng)掌握了LinearRegression的用法。至于更深的理論,更多花哨的用法,就在你具體的項目、研究中再去查詢就好。
其它的模型,我們也會用類似的方法加以講解。有興趣的同學(xué)也可以試試用上述的方式去看看其它的模型,說不定會有意想不到的效果。
參考內(nèi)容:
[1] LinearRegression類官方說明
[2]: LinearRegression官方示例
- sklearn快速入門教程:(一)準(zhǔn)備工作
- sklearn快速入門教程:(三)機(jī)器學(xué)習(xí)的通用模式及實現(xiàn)方法
- sklearn快速入門教程:(四)模型自動調(diào)參
- sklearn快速入門教程:(五)集成學(xué)習(xí)
總結(jié)
以上是生活随笔為你收集整理的sklearn快速入门教程:(二)线性回归的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sklearn快速入门教程:(一)准备工
- 下一篇: sklearn快速入门教程:(三)机器学