通俗得說線性回歸算法(二)線性回歸實戰


前情提要:
通俗得說線性回歸算法(一)線性回歸初步介紹

一.sklearn線性回歸詳解

1.1 線性回歸參數

介紹完線性回歸,那么我們來看看如何運用sklearn來調用線性回歸模型,進行訓練和預測。

def LinearRegression(fit_intercept=True,
                       normalize=False,
                       copy_X=True,
                       n_jobs=None
                       )
										
- fit_intercept:默認為true,參數意思是說要不要計算此模型的截距。 如果設置為False,則不會在計算中使用截距。
- normalize:正則化,默認是false。
- copy_X:默認是true,會復制一份x,否則會覆蓋掉原有的x。
		
- n_jobs:指定多少個CPU進行運算,默認是None,表示1。如果設置為-1則表示使用全部cpu。

1.2 線性回歸例子

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.score(X, y)
#打印線性回歸的相關系數,在二維空間中,就是斜率k
print(reg.coef_)
#打線性回歸中的獨立項,二維空間中的,b
print(reg.intercept_)

pre = reg.predict(np.array([[3, 5]]))
print(pre)

這個例子取自sklearn官網,先是生成一個二維的x向量,然后對每個向量,根據公式生成y值。公式是

y = x11 + x22 + 3

得到y值后,拿去訓練一個模型,由於公式已知,那結果自然也就知道了。訓練好模型后,可以直接查看系數和獨立項,也就是k和b。最后可以拿來預測數據了。

各位小伙伴可以運行一下自然就知道結果了。

二.其他回歸模型介紹

回歸分析是統計學中常見的一種分析方法,在之前也有講過線性回歸分析和梯度下降相關內容線性回歸。那么這次,就來說說除了線性回歸外,還有哪些回歸分析方法。

2.1 樹回歸

以前有介紹過ID3決策樹算法,不過ID3決策是不適合用作回歸分析的,但如果用C4.5,那么就可以來進行回歸分析。

我們都知道如果是離散值,那么可以直接選擇某個類別作為分支。比如說有房,沒房這種。但如果是連續的值呢?比如身上的現金,有人有10塊錢,有人有11.5元,這種如果選擇分支呢?

答案是通過遍歷,遍歷全部或部分連續值,嘗試划分,計算損失函數(損失函數就不貼了,有興趣可以百度詳細的資料),然后選擇一個最合適的划分(大於或小於這個值)。比如說,選5個人,這5個人身上的現金有[500,20,40,800,3000],那么遍歷這5個值,最終選到一個損失函數最小的值。比如取到800,那么就是[大於800]和[小於800]着兩個區間。通過這種方式可以讓決策樹也實現回歸分析,當然,分析結果和線性回歸就不大相同了。

我在網上找了兩個圖,一看就知道樹回歸和線性回歸的區別了。

樹回歸和線性回歸

左邊的圖就是樹回歸,右邊是線性回歸。樹回歸按段來划分,所以看起來像一棵樹橫着放。而線性回歸基本上總是處理成一條直線來擬合。

回歸樹的主要優點,是能夠對復雜的數據,以及非線性的數據進行建模。但如果是線性數據,一般線性回歸會比回歸樹的效果好

2.2 Stepwise Regression逐步回歸

說到這個,就得先解釋一下多重共線性這個問題了。

多重共線性:指多個自變量之間有高度相似或高關聯性的現象。比如以房價預測為例,房屋面積和房間個數就是相關的,將這兩個自變量一同作為特征,就容易出現多重共線性問題。

為解決多重共線性,就有了逐步回歸的解決方法。逐步回歸一個常見做法,就是先只有一個變量。逐漸加入其他特征,看看模型的效果會不會變好,如果變好了,就讓這個特征加入模型中,否則不加。

這一過程不斷迭代,直到沒有其他特征。

當然限於篇幅,這里只是比較粗淺的介紹,有興趣的小伙伴可以自己上網了解更多。

2.3 Ridge Regression嶺回歸和Lasso Regression套索回歸

嶺回歸和套索回歸也是為了解決多重共線性的問題,但和逐步回歸從特征上動手腳不一樣的是,嶺回歸和套索回歸是從計算過程來嘗試解決問題的。

這里引用一下脊回歸(Ridge Regression)這篇博文中的介紹:

當設計矩陣XX存在多重共線性的時候(數學上稱為病態矩陣),最小二乘法求得的參數ww在數值上會非常的大,而一般的線性回歸其模型是 y=wTxy=wTx ,顯然,就是因為ww在數值上非常的大,所以,如果輸入變量xx有一個微小的變動,其反應在輸出結果上也會變得非常大,這就是對輸入變量總的噪聲非常敏感的原因。

如果能限制參數ww的增長,使ww不會變得特別大,那么模型對輸入ww中噪聲的敏感度就會降低。這就是脊回歸和套索回歸(Ridge Regression and Lasso Regrission)的基本思想。

為了限制模型參數ww的數值大小,就在模型原來的目標函數上加上一個懲罰項,這個過程叫做正則化(Regularization)。

如果懲罰項是參數的l2l2范數,就是脊回歸(Ridge Regression)

如果懲罰項是參數的l1l1范數,就是套索回歸(Lasso Regrission)

小結

今天主要介紹了sklearn中線性回歸的參數,以及使用sklearn來訓練線性回歸模型。然后介紹了其他各個線性回歸模型及主要作用和優缺點。

以上~


推薦閱讀:
Windows上IDEA搭建最新Spark2.4.3源碼閱讀及調試的開發環境
Scala 函數式編程指南(一) 函數式思想介紹
通俗地說決策樹算法(二)實例解析
大數據存儲的進化史 --從 RAID 到 Hadoop Hdfs
C,java,Python,這些名字背后的江湖!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM