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

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

一.sklearn線性迴歸詳解

1.1 線性迴歸參數

介紹完線性迴歸,那麼咱們來看看如何運用sklearn來調用線性迴歸模型,進行訓練和預測。java

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。最後能夠拿來預測數據了。函數式編程

各位小夥伴能夠運行一下天然就知道結果了。函數

二.其餘迴歸模型介紹

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

2.1 樹迴歸

之前有介紹過ID3決策樹算法,不過ID3決策是不適合用做迴歸分析的,但若是用C4.5,那麼就能夠來進行迴歸分析。大數據

咱們都知道若是是離散值,那麼能夠直接選擇某個類別做爲分支。好比說有房,沒房這種。但若是是連續的值呢?好比身上的現金,有人有10塊錢,有人有11.5元,這種若是選擇分支呢?.net

答案是經過遍歷,遍歷所有或部分連續值,嘗試劃分,計算損失函數(損失函數就不貼了,有興趣能夠百度詳細的資料),而後選擇一個最合適的劃分(大於或小於這個值)。好比說,選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,這些名字背後的江湖!

相關文章
相關標籤/搜索