通俗得說線性迴歸演算法(二)線性迴歸實戰
前情提要:
通俗得說線性迴歸演算法(一)線性迴歸初步介紹
一.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,這些名字背後的江湖