- Python機器學習
- 首頁
- 基礎知識
- Python 生態系統
- 機器學習方法
- 機器學習專案的載入資料
- 用統計學理解資料
- 用視覺化理解資料
- 資料預處理
- 資料特徵選擇
- 機器學習演算法 - 分類
- 簡介
- 邏輯迴歸
- 支援向量機 (SVM)
- 決策樹
- 樸素貝葉斯
- 隨機森林
- 機器學習演算法 - 迴歸
- 隨機森林
- 線性迴歸
- 機器學習演算法 - 聚類
- 概述
- K均值演算法
- 均值漂移演算法
- 層次聚類
- 機器學習演算法 - KNN演算法
- 尋找最近鄰
- 效能指標
- 自動化工作流
- 提升機器學習模型效能
- 提升機器學習模型效能(續...)
- Python機器學習 - 資源
- Python機器學習 - 快速指南
- Python機器學習 - 資源
- Python機器學習 - 討論
提升機器學習模型效能
整合學習提高效能
整合方法可以透過組合多個模型來提升機器學習結果。基本上,整合模型由多個獨立訓練的監督學習模型組成,它們的預測結果以各種方式合併,以實現比單個模型更好的預測效能。整合方法可以分為以下兩類:
順序整合方法
顧名思義,在這種整合方法中,基礎學習器是按順序生成的。此類方法的動機是利用基礎學習器之間的依賴關係。
並行整合方法
顧名思義,在這種整合方法中,基礎學習器是並行生成的。此類方法的動機是利用基礎學習器之間的獨立性。
整合學習方法
以下是幾種最流行的整合學習方法,也就是組合不同模型預測結果的方法:
Bagging
Bagging也被稱為Bootstrap Aggregation。在Bagging方法中,整合模型試圖透過組合在隨機生成的訓練樣本上訓練的各個模型的預測結果來提高預測準確率並降低模型方差。整合模型的最終預測將透過計算所有單個估計器的預測平均值來給出。隨機森林是Bagging方法的一個很好的例子。
Boosting
在Boosting方法中,構建整合模型的主要原理是透過依次訓練每個基礎模型估計器來逐步構建它。顧名思義,它基本上結合了多個弱基礎學習器,這些學習器在訓練資料的多個迭代中依次訓練,以構建強大的整合。在訓練弱基礎學習器期間,會為之前被錯誤分類的學習器分配更高的權重。AdaBoost是Boosting方法的一個例子。
投票
在這種整合學習模型中,構建多個不同型別的模型,並使用一些簡單的統計方法(如計算平均值或中位數等)來組合預測結果。這個預測結果將作為額外的輸入用於訓練,以做出最終預測。
Bagging 整合演算法
以下是三種Bagging整合演算法:
Bagged決策樹
眾所周知,Bagging整合方法適用於方差較大的演算法,在這方面,決策樹演算法是最好的選擇。在下面的Python示例中,我們將使用sklearn的BaggingClassifier函式和DecisionTreeClasifier(一種分類和迴歸樹演算法)在Pima印第安人糖尿病資料集上構建Bagged決策樹整合模型。
首先,匯入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import BaggingClassifier from sklearn.tree import DecisionTreeClassifier
現在,我們需要載入Pima糖尿病資料集,就像我們在之前的示例中做的那樣:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下來,為10折交叉驗證提供輸入,如下所示:
seed = 7 kfold = KFold(n_splits=10, random_state=seed) cart = DecisionTreeClassifier()
我們需要提供我們將構建的樹的數量。這裡我們將構建150棵樹:
num_trees = 150
接下來,使用以下指令碼構建模型:
model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)
計算並列印結果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
輸出
0.7733766233766234
上面的輸出顯示,我們得到了大約77%的Bagged決策樹分類器模型的準確率。
隨機森林
它是Bagged決策樹的擴充套件。對於單個分類器,訓練資料集的樣本是帶放回抽樣的,但樹的構建方式降低了它們之間的相關性。此外,在構建每棵樹時,會考慮特徵的隨機子集來選擇每個分割點,而不是貪婪地選擇最佳分割點。
在下面的Python示例中,我們將使用sklearn的RandomForestClassifier類在Pima印第安人糖尿病資料集上構建Bagged隨機森林整合模型。
首先,匯入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestClassifier
現在,我們需要載入Pima糖尿病資料集,就像在之前的示例中做的那樣:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下來,為10折交叉驗證提供輸入,如下所示:
seed = 7 kfold = KFold(n_splits=10, random_state=seed)
我們需要提供我們將構建的樹的數量。這裡我們將構建150棵樹,並且分割點從5個特徵中選擇:
num_trees = 150 max_features = 5
接下來,使用以下指令碼構建模型:
model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)
計算並列印結果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
輸出
0.7629357484620642
上面的輸出顯示,我們得到了大約76%的Bagged隨機森林分類器模型的準確率。
Extra Trees
它是Bagged決策樹整合方法的另一種擴充套件。在這種方法中,隨機樹是從訓練資料集的樣本中構建的。
在下面的Python示例中,我們將使用sklearn的ExtraTreesClassifier類在Pima印第安人糖尿病資料集上構建Extra Tree整合模型。
首先,匯入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import ExtraTreesClassifier
現在,我們需要載入Pima糖尿病資料集,就像在之前的示例中做的那樣:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下來,為10折交叉驗證提供輸入,如下所示:
seed = 7 kfold = KFold(n_splits=10, random_state=seed)
我們需要提供我們將構建的樹的數量。這裡我們將構建150棵樹,並且分割點從5個特徵中選擇:
num_trees = 150 max_features = 5
接下來,使用以下指令碼構建模型:
model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)
計算並列印結果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
輸出
0.7551435406698566
上面的輸出顯示,我們得到了大約75.5%的Bagged Extra Trees分類器模型的準確率。
Boosting 整合演算法
以下是兩種最常見的Boosting整合演算法:
AdaBoost
它是最成功的Boosting整合演算法之一。該演算法的關鍵在於賦予資料集中例項權重的方式。由於這個原因,該演算法在構建後續模型時需要減少對這些例項的關注。
在下面的Python示例中,我們將使用sklearn的AdaBoostClassifier類在Pima印第安人糖尿病資料集上構建用於分類的Ada Boost整合模型。
首先,匯入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import AdaBoostClassifier
現在,我們需要載入Pima糖尿病資料集,就像在之前的示例中做的那樣:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下來,為10折交叉驗證提供輸入,如下所示:
seed = 5 kfold = KFold(n_splits=10, random_state=seed)
我們需要提供我們將構建的樹的數量。這裡我們將構建150棵樹,並且分割點從5個特徵中選擇:
num_trees = 50
接下來,使用以下指令碼構建模型:
model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)
計算並列印結果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
輸出
0.7539473684210527
上面的輸出顯示,我們得到了大約75%的AdaBoost分類器整合模型的準確率。
隨機梯度提升
它也稱為梯度提升機。在下面的Python示例中,我們將使用sklearn的GradientBoostingClassifier類在Pima印第安人糖尿病資料集上構建用於分類的隨機梯度提升整合模型。
首先,匯入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import GradientBoostingClassifier
現在,我們需要載入Pima糖尿病資料集,就像在之前的示例中做的那樣:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下來,為10折交叉驗證提供輸入,如下所示:
seed = 5 kfold = KFold(n_splits=10, random_state=seed)
我們需要提供我們將構建的樹的數量。這裡我們將構建150棵樹,並且分割點從5個特徵中選擇:
num_trees = 50
接下來,使用以下指令碼構建模型:
model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)
計算並列印結果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
輸出
0.7746582365003418
上面的輸出顯示,我們得到了大約77.5%的梯度提升分類器整合模型的準確率。
投票整合演算法
如前所述,投票首先從訓練資料集中建立兩個或多個獨立模型,然後投票分類器將封裝模型,並在需要新資料時取子模型預測結果的平均值。
在下面的Python示例中,我們將使用sklearn的VotingClassifier類在Pima印第安人糖尿病資料集上構建投票整合模型。我們將邏輯迴歸、決策樹分類器和SVM的預測結果組合起來,用於解決分類問題,如下所示:
首先,匯入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.svm import SVC from sklearn.ensemble import VotingClassifier
現在,我們需要載入Pima糖尿病資料集,就像在之前的示例中做的那樣:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下來,為10折交叉驗證提供輸入,如下所示:
kfold = KFold(n_splits=10, random_state=7)
接下來,我們需要建立子模型,如下所示:
estimators = []
model1 = LogisticRegression()
estimators.append(('logistic', model1))
model2 = DecisionTreeClassifier()
estimators.append(('cart', model2))
model3 = SVC()
estimators.append(('svm', model3))
現在,透過組合上述建立的子模型的預測結果來建立投票整合模型。
ensemble = VotingClassifier(estimators) results = cross_val_score(ensemble, X, Y, cv=kfold) print(results.mean())
輸出
0.7382262474367738
上面的輸出顯示,我們得到了大約74%的投票分類器整合模型的準確率。