[Sklearn] Linear regression models to fit noisy data

Ref: [Link] sklearn各類迴歸和預測【各線性模型對噪聲的反應】html

Ref: Linear Regression 實戰【按部就班思考過程】python

Ref: simple linear regression詳解【涉及到假設檢驗】算法

 

引伸問題,如何擬合sin數據呢? 網絡

若是不引入sin這樣周期函數,可使用:scikit learn 高斯過程迴歸【有官方例子】
多線程

參考:[Bayesian] 「我是bayesian我怕誰」系列 - Gaussian Process dom

牛津講義:An Introduction to Fitting Gaussian Processes to Data函數

博客:Fitting Gaussian Process Models in Python工具

 

 

 

####3.1 決策樹迴歸####
from sklearn import tree
model_DecisionTreeRegressor = tree.DecisionTreeRegressor()

Ref: [ML] Decision Tree & Ensembling Metholdspost

參見連接中:構造決策樹算法的理解。性能

 

####3.2 線性迴歸####
from sklearn import linear_model
model_LinearRegression = linear_model.LinearRegression()

Ref: ML Glossary - Linear Regression【幫助理解原理】

Ref: [Scikit-learn] 1.1 Generalized Linear Models - from Linear Regression to L1&L2【有示例代碼,模型參數理解】

 

####3.3 SVM迴歸####
from sklearn import svm
model_SVR = svm.SVR()

[Scikit-learn] 1.4 Support Vector Regression【依據最外邊距】

SVM迴歸結果出現問題,這是爲何?調參後能夠麼?是否取決於」核「的選取?

kernel='rbf' 出現上述情況;kernel='linear",則恢復正常。

Ref: Parameter Selection for Linear Support Vector Regression【一篇paper】

 

####3.4 KNN迴歸####
from sklearn import neighbors
model_KNeighborsRegressor = neighbors.KNeighborsRegressor()

聚類迴歸也能作線性擬合?

Ref: Nearest Neighbors regression

Ref: https://coding.m.imooc.com/questiondetail.html?qid=84216

貌似是利用」最近的五個點「,天然就不合適了。

 

####3.5 隨機森林迴歸####
from sklearn import ensemble
model_RandomForestRegressor = ensemble.RandomForestRegressor(n_estimators=20)    #這裏使用20個決策樹

 

一棵樹不行,多棵樹天然也不行。

不得不說的是:隨機森林是集成學習中能夠和梯度提高樹GBDT平起平坐的算法,尤爲是它能夠很方便的並行訓練,在現在大數據大樣本的的時代頗有誘惑力。

 

####3.6 Adaboost迴歸####
from sklearn import ensemble
model_AdaBoostRegressor = ensemble.AdaBoostRegressor(n_estimators=50)    #這裏使用50個決策樹

 

這裏取消了sin的噪聲,但仍是"樹"自己的問題。

Ref: https://blog.csdn.net/sunflower_sara/article/details/81214290【bagging, boosting的區別】

 

並行計算:

Bagging:各個預測函數能夠並行生成。

Boosting:各個預測函數只能順序生成,由於後一個模型參數須要前一輪模型的結果。

誤差和方差:

bagging是減小variance,而boosting是減小bias。

bias度量模型預測結果和真實結果的偏離程度,刻畫模型算法自己的擬合能力。

variance度量一樣大小的訓練集的變更致使的學習能力的變化,刻畫數據的分佈狀況形成的影響。

 

####3.7 GBRT迴歸####
from sklearn import ensemble
model_GradientBoostingRegressor = ensemble.GradientBoostingRegressor(n_estimators=100)    #這裏使用100個決策樹

在Boosting算法中,

當採起平方偏差損失函數時,損失函數恰好表達的是當前模型的擬合殘差,最優化比較方便;當採起指數損失函數時,也很方便;

但對於通常函數時,最優化十分困難。所以,利用最速降低的近似法,即利用損失函數的負梯度在當前模型的值,做爲迴歸問題中Boosting算法的殘差的近似值。

在迴歸問題中,

    • 這稱爲梯度提高迴歸樹(GBRT);
    • 分類問題則稱爲梯度提高決策樹(GBDT);

 

[Boosting ----> GBDT ----> XGBoost]

GBDT的性能相對於Boosting有必定的提高,它和AdaBoost都是Boosting族方法的一種。

XGBoost的性能在GBDT上又有一步提高。

 

對XGBoost最大的認知在於其可以自動地運用CPU的多線程進行並行計算,同時在算法精度上也進行了精度的提升。 因爲GBDT在合理的參數設置下,每每要生成必定數量的樹才能達到使人滿意的準確率,在數據集較複雜時,模型可能須要幾千次迭代運算,可是XGBoost利用並行的CPU更好的解決了這個問題。

傳統GBDT在優化時只用到一階導數信息,xgboost則對代價函數進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支持自定義代價函數,只要函數可一階和二階求導。

 

####3.8 Bagging迴歸####
from sklearn.ensemble import BaggingRegressor
model_BaggingRegressor = BaggingRegressor()

Ref: Bagging與隨機森林算法原理小結【博客不錯】

對於這部分大約36.8%的沒有被採樣到的數據(由於是無放回採樣),咱們經常稱之爲袋外數據(Out Of Bag, 簡稱OOB)。這些數據沒有參與訓練集模型的擬合,所以能夠用來檢測模型的泛化能力。

bagging對於弱學習器沒有限制,這和Adaboost同樣。可是最經常使用的通常也是決策樹和神經網絡。

"隨機森林」 是 Bagging算法 的進化版,也就是說,它的思想仍然是bagging,可是進行了獨有的改進。

    • bagging只是針對「樣本的採樣過程」,對「特徵」沒有處理;
    • 隨機森林對「特徵」也進行了篩選。

 

####3.9 ExtraTree極端隨機樹迴歸####
from sklearn.tree import ExtraTreeRegressor
model_ExtraTreeRegressor = ExtraTreeRegressor()

Ref: 極端隨機樹(ET)--Bagging

極端隨機樹隨機森林有兩點主要區別:

(1)ET中每棵樹採用全部訓練樣本,即每棵樹的樣本集相同。

(2)RF在特徵子集中選擇最優分叉特徵,而ET直接隨機選擇分叉特徵。

優缺點:基本與隨即森林相似。因爲ET採用全部訓練樣本使得計算量相對RF增大,而採用隨機特徵,減小了信息增益(比)或基尼指數的計算過程,計算量又相對RF減小。

 

####3.10 ARD貝葉斯ARD迴歸
model_ARDRegression = linear_model.ARDRegression()

  

Ref: [ML] Bayesian Linear Regression【ARD詳見連接】

 

####3.11 BayesianRidge貝葉斯嶺迴歸
model_BayesianRidge = linear_model.BayesianRidge()

Ref: [ML] Bayesian Linear Regression

 

####3.12 TheilSen泰爾森估算
model_TheilSenRegressor = linear_model.TheilSenRegressor()


Ref: 穩健迴歸(Robustness regression)

Theil-Sen迴歸是一個參數中值估計器,它適用泛化中值,對多維數據進行估計,所以其對多維的異常點(outliers 外點)有很強的穩健性。

在單變量回歸問題中,Theil-Sen方法的Breakdown point爲29.3%,也就是說,Theil-Sen方法能夠容忍29.3%的數據是outliers。 

 

####3.13 RANSAC隨機抽樣一致性算法
model_RANSACRegressor = linear_model.RANSACRegressor()


Ref: 穩健迴歸(Robustness regression)

RANSAC算法在線性和非線性迴歸中都獲得了普遍的應用,而其最典型也是最成功的應用,莫過於在圖像處理中處理圖像拼接問題,這部分在Opencv中有相關的實現。

RANSAC算法將輸入樣本分紅了兩個大的子集:內點(inliers)外點(outliers)。其中內點的數據分佈會受到噪聲的影響;而外點主要來自於錯誤的測量手段或者是對數據錯誤的假設。而RANSAC算法最終的結果是基於算法所肯定的內點集合獲得的。

 

from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C

# Instantiate a Gaussian Process model
kernel = C(1.0, (1e-3, 1e3)) * RBF(10, (1e-2, 1e2))
gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)
try_different_method(gp)

高斯迴歸看樣子也不錯,在predict(紅色)表現良好。

 

End.

相關文章
相關標籤/搜索