Machine Learning Notes-Linear Regression-Udacity


什么是 Regression?

Regression 就是想找到因變量和自變量之間的關(guān)系,用一個函數(shù)來表示,并且可用這個函數(shù)來預(yù)測任意一個新的 x 會有怎樣的 y 。

那么怎么找最好的那條線來表示 x 與 y 之間的關(guān)系呢?

用積分的方式。

怎么確定擬合線的階數(shù)?

判斷的標(biāo)準(zhǔn),就是最小的 mean squared error,最好是為0.

下面這條線雖然把每個點都 fit 了,但是在某兩個點之間卻急劇上升或者下降。


從 Training Error 的曲線上看,也是當(dāng) order=8 時,error幾乎沒有,但是曲線卻非常地 crazy。


接下來用矩陣來表示多項式。

求解系數(shù)矩陣W的公式:

用來 Training 的數(shù)據(jù)其實是有 Error 的,產(chǎn)生的原因如下幾條,

所以要讓我們的擬合函數(shù)盡量避開這些error,從而達(dá)到更準(zhǔn)的效果。


用 Training 和 Testing 數(shù)據(jù)訓(xùn)練出來的模型,我們需要相信它們是可以代表未來要被應(yīng)用的系統(tǒng)的,

用 Cross Validation 去調(diào) Polynomial 的參數(shù),

取最小的 Error 相應(yīng)的參數(shù)。


Cross Validation 的 Error 一開始要比 Training Error 要高,因為:Training 用了所有的數(shù)據(jù),而 Cross Validation 用的是一部分?jǐn)?shù)據(jù),還有一部分?jǐn)?shù)據(jù)用來 test,

隨著階數(shù)的增加,Cross Validation 的 Error 漸漸接近 Training Error,但超過某個值后,又劇增,因為:隨著級數(shù)越來越大,雖然會更好的擬合數(shù)據(jù),但是會 Over Fitting,那么在未來的數(shù)據(jù)上就會不太適用。


我們想要找到的是 fit 的這個點。

在 sklearn 里有很多線性回歸模型:
http://scikit-learn.org/stable/modules/linear_model.html

怎樣評價你的線性回歸模型

一個是畫出來,一個是看Error, error 就是實際值-預(yù)測值,注意符號。

回歸之后,測試數(shù)據(jù)和訓(xùn)練數(shù)據(jù)同時顯示在這個圖里。


對于回歸模型,想要 Error 達(dá)到最小,合適的評價模型有兩個,一個是絕對值,一個是平方。

目標(biāo)就是想要這個 Error 達(dá)到最小,SSE 越大,擬合的效果越不好。

r squared 是評價回歸模型的一種很重要的方法,

這個值越大越好,最大為1。越小說明沒有很好地捕捉到數(shù)據(jù)的趨勢,越大說明很好地描述了輸入輸出的關(guān)系。
這個值要用 test data 去檢驗,也可以看出是否 Over fitting。



多元回歸


Classification 和 Regression 比較:


Regression 方法列表:

1. Parametric Regression

可以用 polyfit 直接得到多項式的系數(shù):

import numpy as np

# The rank of the coefficient matrix in the least-squares fit is deficient. 
# The warning is only raised if full = False.
# The warnings can be turned off by
import warnings
warnings.simplefilter('ignore', np.RankWarning)

sleep = [5,6,7,8,10,12,16]
scores = [65,51,75,75,86,80,0]

import matplotlib.pyplot as plt
%matplotlib inline

plt.plot(sleep, scores)

coeffs=np.polyfit(sleep, scores, 2)

coeffs

2. K Nearest Neighbor

取 k 個值的平均值作為擬合后的點,最后可以得到一條沿著點的光滑的曲線。


3. Kernel Regression

和 KNN 類似,只是不同的點,根據(jù)距離來加權(quán),而 KNN 的每個點作用都是一樣的。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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