什么是 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 的每個點作用都是一樣的。