Machine-learning-with-python-improving-performance-of-ml-models
MLモデルのパフォーマンスの改善
アンサンブルによるパフォーマンスの改善
アンサンブルは、いくつかのモデルを組み合わせることにより、機械学習の結果を向上させることができます。 基本的に、アンサンブルモデルは、個別にトレーニングされたいくつかの教師あり学習モデルで構成され、その結果はさまざまな方法でマージされ、単一のモデルと比較して予測パフォーマンスが向上します。 アンサンブルの方法は、次の2つのグループに分けることができます-
シーケンシャルアンサンブルメソッド
名前が示すように、これらの種類のアンサンブルメソッドでは、基本学習器は順番に生成されます。 このような方法の動機は、基本学習者間の依存関係を活用することです。
並列アンサンブルメソッド
名前が示すように、これらの種類のアンサンブルメソッドでは、基本学習器が並行して生成されます。 このような方法の動機は、基本学習者間の独立性を活用することです。
アンサンブル学習方法
以下は、最も一般的なアンサンブル学習方法です。 異なるモデルからの予測を組み合わせる方法-
バギング
バギングという用語は、ブートストラップ集約とも呼ばれます。 バギング法では、アンサンブルモデルは、ランダムに生成されたトレーニングサンプルでトレーニングされた個々のモデルの予測を組み合わせることにより、予測精度を改善し、モデルの分散を減少させます。 アンサンブルモデルの最終的な予測は、個々の推定量からのすべての予測の平均を計算することにより与えられます。 バギング方法の最良の例の1つは、ランダムフォレストです。
ブースティング
ブースティング方法では、アンサンブルモデルを構築する主な原則は、各ベースモデル推定器を順番にトレーニングすることにより、段階的にモデルを構築することです。 名前が示すように、基本的には、トレーニングデータの複数の反復で順次トレーニングされた数週間の基本学習者を組み合わせて、強力なアンサンブルを構築します。 週単位の学習者のトレーニング中に、以前に誤分類された学習者に高い重みが割り当てられます。 ブースティング方法の例はAdaBoostです。
投票
このアンサンブル学習モデルでは、異なるタイプの複数のモデルが構築され、平均や中央値などの計算などのいくつかの単純な統計が予測の結合に使用されます。 この予測は、最終的な予測を行うためのトレーニングの追加入力として機能します。
バギングアンサンブルアルゴリズム
以下は、3つのバギングアンサンブルアルゴリズムです-
- リンク:/machine_learning_with_python/machine_learning_with_python_bagged_decision_tree [Bagged Decision Tree]
- リンク:/machine_learning_with_python/machine_learning_with_python_random_forest [ランダムフォレスト]
- リンク:/machine_learning_with_python/machine_learning_with_python_extra_trees [Extra Trees]
アンサンブルアルゴリズムのブースト
以下は、2つの最も一般的なブースティングアンサンブルアルゴリズムです-
- リンク:/machine_learning_with_python/machine_learning_with_python_adaboost [AdaBoost]
- リンク:/machine_learning_with_python/machine_learning_with_python_stochastic_gradient_boosting [Stochastic Gradient Boosting]
投票アンサンブルアルゴリズム
説明したように、投票はまずトレーニングデータセットから2つ以上のスタンドアロンモデルを作成し、次に投票分類器が新しいデータが必要なときにサブモデルの予測の平均を取るとともにモデルをラップします。
次のPythonレシピでは、Pima Indians糖尿病データセットでsklearnのVotingClassifierクラスを使用して、分類用の投票アンサンブルモデルを作成します。 私たちは、ロジスティック回帰、デシジョンツリー分類器、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%であることを示しています。