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算法的殘差的近似值。
在迴歸問題中,
[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,可是進行了獨有的改進。
####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.