グリッドサーチ
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 39/58。
手作業で調整するには、ループを入れ子にする必要があります。GridSearchCVは設定の組み合わせをすべて交差検証し、最良のものを保持します。300件の路面電車の移動について、遅延か定刻かを予測します。
辞書は各設定を試す値に対応付けます。min_samples_leafは、葉が保持できる最小の行数です。
from sklearn.model_selection import GridSearchCV
grid = {"max_depth": [2, 4, 6], "min_samples_leaf": [1, 5, 20]}
search = GridSearchCV(DecisionTreeClassifier(random_state=0), grid, cv=5)
search.fit(X_train, y_train)
print(search.best_params_)
print(f"{search.best_score_:.3f}")
print(f"{search.score(X_test, y_test):.3f}")これは次のように出力されます:
{'max_depth': 4, 'min_samples_leaf': 5}
0.876
0.813探索では、すべての学習用行を使って最良のモデルを再学習するため、search.scoreで1回テストします。グリッドは小さく保ちましょう。各セルには5回の適合処理が必要です。
チャレンジ
中級衛星チームは k-NN を使って、ピクセルを雲または晴天として分類します。プログラムは試す最大の k を読み込みます。スターターコードではデータを分割します。
- 1 からその数までの奇数の k すべてについて、
weightsを"uniform"または"distance"(近い近傍ほど重く数える)として、cv=5でグリッドサーチします。 - 最適な設定と、その交差検証精度およびテスト精度を小数点以下3桁で出力します。
ほかのピクセルと 7 の場合:
Best k: 7, weights: distance
Cross-validated accuracy: 0.885
Test accuracy: 0.800自分で試してみよう
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
max_k = int(input())
# 以下の行は変更しないでください:衛星画像の画素が360個あり、それぞれに光の測定値が4つあります。ラベル1は雲を意味します
X, y = make_classification(n_samples=360, n_features=4, n_informative=3, n_redundant=0,
flip_y=0.08, class_sep=0.7, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ