傳統的機器學習的監督學習分類分類和迴歸,分類是爭對離散的資料,而回歸是爭對連續的資料,在資料預處理好的基礎上要對資料進行預測,通常採用CV交叉驗證來進行模型評價和選擇。這篇文章通過連續的資料結合sklearn庫對各種迴歸器做一比較:
1.linear regression
缺點:顧名思義,linear regression是假設資料服從線性分佈的,這一假設前提也限制了該模型的準確率,因為現實中由於噪聲等的存在很少有資料是嚴格服從線性的。
優點:基於這種假設,linear regression可以通過normal equation求閉合解的方式求得y_predict
2.logistic regression
缺點:從線性迴歸衍生而來,將線性的值域通過sigmoid函式壓縮在(0,1)範圍內,缺點同linear regression,且也是要求資料是無缺失的
優點:有兩種方式求解,精確的解析解和SGD演算法估計,在要求準確性時使用解析解,在要求時間效率時使用SGD 迭代
3.SVM(支援向量機 )
缺點:計算代價比較大,SVM是將低維無序雜亂的資料通過核函式(RBF,poly,linear,sigmoid)對映到高維空間,通過超平面將其分開
優點:SVM是通過支撐面做分類的,也就是說不需要計算所有的樣本,高維資料中只需去少量的樣本,節省了記憶體
在sklearn預設配置中三種核函式的準確率大概是:RBF>poly>linear
4.Naive Bayes
缺點:這一模型適合用在文字樣本上,採用了樸素貝葉斯原理假設樣本間是相互獨立的,因此在關聯比較強的樣本上效果很差
優點:也是基於其獨立的假設,概率計算大大簡化,節省記憶體和時間
5.K近鄰
缺點:k需要人為設定,且該演算法的複雜度很高
優點:“近朱者赤,近墨者黑”KNN是無引數訓練的模型
6.決策樹(DT)
缺點:在訓練資料上比較耗時
優點:對資料要求度最低的模型,資料可以缺失,可以是非線性的,可以是不同的型別,,最接近人類邏輯思維的模型,可解釋性好
7.整合模型(眾志成城模型)
random forest:隨機抽取樣本形成多個分類器,通過vote,少數服從多數的方式決定最終屬於多數的分類器結果,分類器之間是相互去之間關聯的
gradient boost:弱弱變強,最典型的代表是adaboost(三個臭皮匠,頂個諸葛亮),弱分類器按照一定的計算方式組合形成強的分類器,分類器之間存在關聯,最終分類是多個分類器組合的結果
一般地,GB>RF>DT
但是整合模型缺點在於受概率的影響,具有不確定性
以上是常用的迴歸分類器的比較,在知道各種分類器的優缺點之後就可以使用正確的分類器完成自己的資料處理,如下表是通過計算各類分類器的殘差來對比同一任務不同分類器之間的好壞,可以看出來在sklearn預設引數的前提下,準確率排序是:整合模型>DT>SVM>KNN>Linear
分類迴歸器 | 匯入python庫命令 | 匯入函式命令 | 殘差(%) |
linear regression | from sklearn.linear_model import LinearRegressor | lr = LinearRegressor() | 5.223 |
SGD regression penalty L2 | from sklearn.linear_model import SGDRegressor | SGDR = SGDRegressor("penalty = l2") | 5.780 |
SGD regression penalty L1 | SGDR = SGDRegressor("penalty = l1") | 5.765 | |
SVR(rbf kernel) | from sklearn .svm import SVR (Penalty parameter :C,Kernel coefficient :gamma) | SVR = SVR(kernel="rbf") | 0.627 |
SVR(sigmoid kernel) | SVR = SVR(kernel="sigmoid ") | 82.507 | |
SVR(poly kernel) | SVR = SVR(kernel="poly") | 20.862 | |
SVR(linear kernel) | SVR = SVR(kernel="linear") | 6.451 | |
KNN(n=5,weights=uniform) | from sklearn.neighbors import KNeighborsRegressor | knn = KNeighborsRegressor(n=5,weights="uniform") | 0.731 |
KNN(n=5,weights=distance) | knn = KNeighborsRegressor(n=5,weights="distance") | 1.087 | |
DT | from sklearn.tree import DecisionTreeRegressor | DT = DecisionTreeRegressor() | 0.447 |
Random forest | from sklearn.ensemble import RandomForestRegressor | RF = RandomForestRegressor() | 0.270 |
Extra Trees | from sklearn.ensemble import ExtraTreesRegressor | ET = ExtraTreesRegressor() | 0.246 |
Gradient Boosting | from sklearn.ensemble import GradientBoostingRegressor | GB = GradientBoostingRegressor() | 0.284 |