機械学習/Pythonで学習パラメーターを最適化する
をテンプレートにして作成
開始行:
*目次 [#nb6ab729]
#contents
*はじめに [#p849067f]
前回、Pythonの機械学習ライブラリーscikit-learnを用いて、...
-[[Pythonで決定木を使う>/機械学習/Pythonで決定木を使う]] ...
前回はすべての訓練データを使って予測モデルを学習しました...
例えば、機械学習の手法を決定木に限定した場合でも、木の深...
ここでは、学習した予測モデルの評価と学習パラメーターの最...
環境やデータは前回と同じです。
*学習した予測モデルの評価 [#b48b97d6]
前回は、訓練データから学習した予測モデルのスコア(ここで...
#geshi(python){{
clf.fit(X, y)
clf.score(X, y)
}}
実際の分析では、予測する対象は訓練データ以外のデータであ...
そこで、訓練データを全て学習に使わずに、学習用データと検...
sklearn.model_selectionのtrain_test_splitを用いて、訓練デ...
#geshi(python){{
from sklearn.model_selection import train_test_split
X_train, X_valid, y_train, y_valid = \
train_test_split(X, y, test_size=0.2, random_state=0)
}}
ここでは、検証用データのサイズ (test_size) を20% (0.2) と...
random_stateは、乱数生成器のシードを表します。
次のようにすると、学習用データと検証用データに分割された...
#geshi(python){{
print(X_train.shape)
print(X_valid.shape)
}}
fit関数を用いて学習用データから学習し、score関数を用いて...
#geshi(python){{
clf.fit(X_train, y_train)
clf.score(X_valid, y_valid)
}}
学習した予測モデルは、学習用データに対するスコアは 1.0 で...
つまり、実際の平均正解率は86.7%程度であると見込まれます。
今回学習された予測モデルはこちら(前回の続きなので、crite...
&ref(./decision_tree_3.png,nolink,75%);
このように、どの学習パラメーターを用いるのが良いかについ...
*クロス・バリデーション [#s6792412]
上の評価では、sklearn.model_selectionクラスのtrain_test_s...
乱数を使っているため、偶然に、予測が難しいデータばかりが...
そこで、何回か学習とスコアの計算を行い、その平均を求めま...
**[math]k[/math]-フォールド・クロス・バリデーション [#a2e...
[math]k[/math]-フォールド・クロス・バリデーション ([math]...
[math]k[/math]-フォールド・クロス・バリデーションを行うに...
#geshi(python){{
from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)
scores.mean()
}}
ファイブ・フォールド・クロス・バリデーションを行なったと...
**リーブ・ワン・アウト・クロス・バリデーション [#l05b75ca]
リーブ・ワン・アウト・クロス・バリデーション (Leave One O...
リーブ・ワン・アウト・クロス・バリデーションは、[math]k[/...
リーブ・ワン・アウト・クロス・バリデーションを行うには、s...
#geshi(python){{
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
scores = cross_val_score(clf, X, y, cv=loo)
scores.mean()
}}
リーブ・ワン・アウト・クロス・バリデーションを行なったと...
*グリッド探索による学習パラメーターの最適化 [#ma36f285]
今、検討しているのは、決定木の深さは、3がいいのか、4がい...
sklearn.model_selection.GridSearchCVは、複数の学習パラメ...
GridSearchCVには、学習器、学習パラメーターの辞書、[math]k...
#geshi(python){{
from sklearn.model_selection import GridSearchCV
clf = DecisionTreeClassifier()
params = {'criterion':('gini', 'entropy'), 'max_depth':[1...
gscv = GridSearchCV(clf, params, cv=5)
gscv.fit(X, y)
}}
fit関数を実行すると、すべての学習パラメーターの組み合わせ...
また、最もスコアが高いパラメーターを best_params_ に、そ...
次のようにして、最も良い学習パラメーターを取り出すことが...
#geshi(python){{
print('%.3f %r' % (gscv.best_score_, gscv.best_params_))
}}
すると、次のように出力されます。
#geshi(txt){{
0.973 {'criterion': 'gini', 'max_depth': 2}
}}
評価基準はジニ係数、決定木の深さは2が最も良い学習パラメー...
この最もスコアが良かった予測モデルを採用する場合は、この...
#geshi(python){{
X = df_iris_test.values
p = gscv.predict(X)
}}
しかし、実は、この結果から「評価基準はジニ係数、決定木の...
すべての学習パラメーターの組み合わせと、そのスコアを出力...
#geshi(python){{
scores = gscv.cv_results_['mean_test_score']
params = gscv.cv_results_['params']
for score, param in zip(scores, params):
print('%.3f %r' % (score, param))
}}
すると、次のように出力されました。
#geshi(txt){{
0.720 {'criterion': 'gini', 'max_depth': 1}
0.973 {'criterion': 'gini', 'max_depth': 2}
0.973 {'criterion': 'gini', 'max_depth': 3}
0.973 {'criterion': 'gini', 'max_depth': 4}
0.973 {'criterion': 'gini', 'max_depth': 5}
0.720 {'criterion': 'entropy', 'max_depth': 1}
0.973 {'criterion': 'entropy', 'max_depth': 2}
0.973 {'criterion': 'entropy', 'max_depth': 3}
0.973 {'criterion': 'entropy', 'max_depth': 4}
0.973 {'criterion': 'entropy', 'max_depth': 5}
}}
評価基準はジニ係数でも情報量利得でも変わらず、木の深さは1...
*グリッド探索における最適化基準の変更 [#k9bf8b3f]
GridSearchCVでは、最適化の基準を指定することもできます。
何も指定しないと、学習器のデフォルトのスコア関数が使われ...
分類分析用の学習器の場合は正解率 (accuracy)、回帰分析用の...
最適化の基準を指定するには、 scoring オプションに最適化基...
例えば、回帰分析において、最適化基準として決定係数 [math]...
#geshi(python){{
gscv = GridSearchCV(clf, params, scoring='neg_mean_square...
}}
ここで、neg_mean_squared_error は、平均二乗誤差 (MSE, mea...
指定可能な最適化基準は、ドキュメントで確認できます。
-[[3.3.1 The scoring parameter: defining model evaluation...
終了行:
*目次 [#nb6ab729]
#contents
*はじめに [#p849067f]
前回、Pythonの機械学習ライブラリーscikit-learnを用いて、...
-[[Pythonで決定木を使う>/機械学習/Pythonで決定木を使う]] ...
前回はすべての訓練データを使って予測モデルを学習しました...
例えば、機械学習の手法を決定木に限定した場合でも、木の深...
ここでは、学習した予測モデルの評価と学習パラメーターの最...
環境やデータは前回と同じです。
*学習した予測モデルの評価 [#b48b97d6]
前回は、訓練データから学習した予測モデルのスコア(ここで...
#geshi(python){{
clf.fit(X, y)
clf.score(X, y)
}}
実際の分析では、予測する対象は訓練データ以外のデータであ...
そこで、訓練データを全て学習に使わずに、学習用データと検...
sklearn.model_selectionのtrain_test_splitを用いて、訓練デ...
#geshi(python){{
from sklearn.model_selection import train_test_split
X_train, X_valid, y_train, y_valid = \
train_test_split(X, y, test_size=0.2, random_state=0)
}}
ここでは、検証用データのサイズ (test_size) を20% (0.2) と...
random_stateは、乱数生成器のシードを表します。
次のようにすると、学習用データと検証用データに分割された...
#geshi(python){{
print(X_train.shape)
print(X_valid.shape)
}}
fit関数を用いて学習用データから学習し、score関数を用いて...
#geshi(python){{
clf.fit(X_train, y_train)
clf.score(X_valid, y_valid)
}}
学習した予測モデルは、学習用データに対するスコアは 1.0 で...
つまり、実際の平均正解率は86.7%程度であると見込まれます。
今回学習された予測モデルはこちら(前回の続きなので、crite...
&ref(./decision_tree_3.png,nolink,75%);
このように、どの学習パラメーターを用いるのが良いかについ...
*クロス・バリデーション [#s6792412]
上の評価では、sklearn.model_selectionクラスのtrain_test_s...
乱数を使っているため、偶然に、予測が難しいデータばかりが...
そこで、何回か学習とスコアの計算を行い、その平均を求めま...
**[math]k[/math]-フォールド・クロス・バリデーション [#a2e...
[math]k[/math]-フォールド・クロス・バリデーション ([math]...
[math]k[/math]-フォールド・クロス・バリデーションを行うに...
#geshi(python){{
from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)
scores.mean()
}}
ファイブ・フォールド・クロス・バリデーションを行なったと...
**リーブ・ワン・アウト・クロス・バリデーション [#l05b75ca]
リーブ・ワン・アウト・クロス・バリデーション (Leave One O...
リーブ・ワン・アウト・クロス・バリデーションは、[math]k[/...
リーブ・ワン・アウト・クロス・バリデーションを行うには、s...
#geshi(python){{
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
scores = cross_val_score(clf, X, y, cv=loo)
scores.mean()
}}
リーブ・ワン・アウト・クロス・バリデーションを行なったと...
*グリッド探索による学習パラメーターの最適化 [#ma36f285]
今、検討しているのは、決定木の深さは、3がいいのか、4がい...
sklearn.model_selection.GridSearchCVは、複数の学習パラメ...
GridSearchCVには、学習器、学習パラメーターの辞書、[math]k...
#geshi(python){{
from sklearn.model_selection import GridSearchCV
clf = DecisionTreeClassifier()
params = {'criterion':('gini', 'entropy'), 'max_depth':[1...
gscv = GridSearchCV(clf, params, cv=5)
gscv.fit(X, y)
}}
fit関数を実行すると、すべての学習パラメーターの組み合わせ...
また、最もスコアが高いパラメーターを best_params_ に、そ...
次のようにして、最も良い学習パラメーターを取り出すことが...
#geshi(python){{
print('%.3f %r' % (gscv.best_score_, gscv.best_params_))
}}
すると、次のように出力されます。
#geshi(txt){{
0.973 {'criterion': 'gini', 'max_depth': 2}
}}
評価基準はジニ係数、決定木の深さは2が最も良い学習パラメー...
この最もスコアが良かった予測モデルを採用する場合は、この...
#geshi(python){{
X = df_iris_test.values
p = gscv.predict(X)
}}
しかし、実は、この結果から「評価基準はジニ係数、決定木の...
すべての学習パラメーターの組み合わせと、そのスコアを出力...
#geshi(python){{
scores = gscv.cv_results_['mean_test_score']
params = gscv.cv_results_['params']
for score, param in zip(scores, params):
print('%.3f %r' % (score, param))
}}
すると、次のように出力されました。
#geshi(txt){{
0.720 {'criterion': 'gini', 'max_depth': 1}
0.973 {'criterion': 'gini', 'max_depth': 2}
0.973 {'criterion': 'gini', 'max_depth': 3}
0.973 {'criterion': 'gini', 'max_depth': 4}
0.973 {'criterion': 'gini', 'max_depth': 5}
0.720 {'criterion': 'entropy', 'max_depth': 1}
0.973 {'criterion': 'entropy', 'max_depth': 2}
0.973 {'criterion': 'entropy', 'max_depth': 3}
0.973 {'criterion': 'entropy', 'max_depth': 4}
0.973 {'criterion': 'entropy', 'max_depth': 5}
}}
評価基準はジニ係数でも情報量利得でも変わらず、木の深さは1...
*グリッド探索における最適化基準の変更 [#k9bf8b3f]
GridSearchCVでは、最適化の基準を指定することもできます。
何も指定しないと、学習器のデフォルトのスコア関数が使われ...
分類分析用の学習器の場合は正解率 (accuracy)、回帰分析用の...
最適化の基準を指定するには、 scoring オプションに最適化基...
例えば、回帰分析において、最適化基準として決定係数 [math]...
#geshi(python){{
gscv = GridSearchCV(clf, params, scoring='neg_mean_square...
}}
ここで、neg_mean_squared_error は、平均二乗誤差 (MSE, mea...
指定可能な最適化基準は、ドキュメントで確認できます。
-[[3.3.1 The scoring parameter: defining model evaluation...
ページ名: