利用回歸模型預測數值型數據

回歸

機器學習算法按照目標變量的類型,分為標稱型數據和連續型數據。標稱型數據類似于標簽型的數據,而對于它的預測方法稱為分類,連續型數據類似于預測的結果為一定范圍內的連續值,對于它的預測方法稱為回歸。

含義

“回歸”一詞比較晦澀,下面說一下這個詞的來源:

“回歸”一詞是由達爾文的表兄弟Francis Galton發明的。Galton于1877年完成了第一次回歸預測,目的是根據上一代豌豆種子(雙親)的尺寸來預測下一代豌豆種子(孩子)的尺寸。 Galton在大量對象上應用了回歸分析,甚至包括人的身高預測。他注意到,如果雙親的高高度比平均高度高,他們的子女也傾向于比平均高度高,但尚不及雙親(筆者感覺未必,Galton并未考慮物質條件的發展會帶來整體身高的增加,至少筆者感覺80,90的人普遍比父母高)。孩子的高度向著平均高度“回歸”。

類型

回歸按照方法可分為線性回歸和非線性回歸。線性回歸適用線性方程來擬合曲線進行預測。在非線性回歸中,特征之間出現非線性操作的可能性(比如相乘或者相除)。非線性回歸中有種特殊的類型--邏輯回歸,和線性回歸不同的是,它屬于“分類”的問題,這是由于它適用曲線擬合的方式來解決分類問題,所以也被稱為回歸。

線性回歸

原理簡介

線性回歸衡量的是兩個變量之間的關系,最直接的辦法就是求得一個回歸方程(regression equation),將已知條件x代入方程得到預測結果y。

假設我們獲取到一個地區過去一段時間內的房價走勢情況,我們根據下面的公式進行評估:

上面的式子可以看到房價和房屋面積、房子朝向呈線性的關系。而求該方程的過程稱為回歸方程,其中0.7和0.19稱為回歸系數,面積和房子的朝向稱為特征

可以看到“回歸”問題最重要的是如何獲得回歸方程,如果得到該方程后,所有的一切問題將迎刃而解。

假如我們用X(m×n)來表示特征的矩陣,回歸系數θ(n×1)來表示,預測結果由Y=Xθ獲得。在實際應用中,我們通常認為能帶來最小平方誤差的θ就是我們所要尋找的回歸系數向量。平方誤差指的是預測值與真實值的差的平方,這種方法就稱為“最小二乘法”。所以回歸問題轉化為如何求最小平方誤差,即目標函數為:

求該函數的方法很多,在此介紹一種方法:

θ求導: 該矩陣還可以寫成

,如果對θ求導,就會得到

倒數為0,求出θ

注意,上述公式中包含

,也就是需要對矩陣求逆。因此這個方程只在逆矩陣存在的情況下適用。

應用

上面講解了線性回歸的原理,那如何將上面的算法應用到現實的場景中呢?我們使用python語言將上述的算法實現了一遍:

defstandRegres(xArr,yArr):xMat = mat(xArr); yMat = mat(yArr).T? ? xTx = xMat.T*xMat# #判斷是否存在逆矩陣iflinalg.det(xTx) ==0.0:print"This matrix is singular, cannot do inverse"returnws = xTx.I * (xMat.T*yMat)returnws

得到回歸系數后,還需要乘以特征值后得到預測值。

大家會說python不是以算法包的種類多而出名嗎?有現成的算法庫,我干嘛還要自己去實現算法呢。當然,python里面有sklearn包中有現成的linear_model的函數可以供大家使用,而且使用方法特別簡單:

導入算法包

fromsklearnimportdatasets, linear_model

訓練模型

regr= linear_model.LinearRegression()regr.fit(x, mydata)

預測

predict_outcome= regr.predict(x)

模型評估

基本上所有的數據集都可以使用上述的方法建立模型,那么,如何來判斷模型的好壞呢?如果比較一下下面兩個圖,如果在這兩個數據集上做線性回歸,那么效果肯定不相同。

圖1 具有相同回歸系數的兩組數據的對比

我們可以計算預測值和真實值之間的誤差,也就是計算這兩個序列的相關系數,來評價模型的好壞。

python中,Numpy庫提供了相關系數的計算方法corrcoef(yEstimate,yActual)來計算預測值和真實值之間的相關性。可以看出具有相同回歸系數的兩組數據,上圖的相關系數是0.58,而下圖的相關系數是0.99,則可以說明該回歸系數對下圖使用的數據集效果要好。

局部加權線性回歸

前一節我們用普通的線性回歸在遇到圖1的上圖時候就會出現嚴重的欠擬合現象,這種現象在圖1的下圖也會反映出來。解決這種欠擬合的問題最直接的方法是犧牲普通線性回歸的無偏估計方法,轉為有偏估計,對預測點的周圍節點賦予不同的權值。離預測點近的點賦予較高的權值,反之則賦予低的權值。這種通過改變權值的方法就叫做局部加權線性回歸。

該算法解出來回歸系數的形式為:

可以看到,在普通的線性回歸的基礎上,多了一個矩陣W,W是一個n×m的矩陣。那如何做到不同的點被賦予不同的權值呢?局部加權線性回歸適用“核函數”來賦予權值,最常用的高斯核,它的權重為:

可以看到高斯核中涉及到一個參數k,如何選擇合適的k成為了關鍵的問題。圖2可以看到參數k和權重的關系:

圖2 每個點的權重值(假設我們預測的點為x=0.5)

在圖2中,k越大,權重衰減的越慢,而k越小,權重衰減的越快,離預測點比較近的點才對預測值產生影響。

我們采用了三種k對圖1下圖中的樣本進行預測,結果如圖3、4和5所示。

圖3 k為1,和普通的線性回歸一樣,用來做對比

圖4 k為0.01

圖5 k為0.003

可以看到k為1時,由于是用一條直線進行擬合,所以反映不出來樣本的規律,容易出現欠擬合的現象,而當k為0.003時,由于將個別樣本的特例反映到整體趨勢中,所以容易出現過擬合的現象。k為0.01時,效果最好。

除了容易出現過擬合的問題外,局部加權線性回歸的計算量也相當大,因為它對每個待遇測點做預測時都必須遍歷整個數據集才能得出回歸系數向量,使用時要加以注意。

嶺回歸

線性回歸能夠求解回歸系數的前提是

是滿秩矩陣,即矩陣有逆矩陣,而如果

矩陣中有某些矩陣共線,也就是

的行列式為0,則這種情況就不能求出回歸系數。

嶺回歸中通過引入λI來使回歸矩陣可解,則回歸系數的矩陣變為:

I為n*n的單位矩陣,該矩陣看起來就像一個“嶺”,所以叫做嶺回歸,嶺回歸歸根結底就是求λ。

嶺回歸的目標函數變為:

可以看到嶺回歸在原來普通的線性回歸的基礎上加入了一個二范數懲罰項,其目的在于限制回歸系數矩陣的取值,減少不必要的參數。

不同的λ將會得到不同的θ,反映不同的λ和θ的關系的圖叫做嶺跡圖:

在λ為很小的時候,θ基本上不怎么變化,而當λ很大時,θ趨于0,在中間時可以找到一個最好的回歸系數,圖中最好的效果是最上面的一條曲線。

總的來說,嶺回歸用來處理變量之間相關度比較高的情況,它在最小二乘法的基礎上加入了一個系數后,能夠解決共線的問題,因而具有比較高的應用價值。

本文鏈接:https://addops.cn/post/line_regression.html

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容