今回は、グリッドサーチでハイパーパラメータを調整しました。
これまで、学習モデルは、特に引数を指定しないか、特定の値のみ指定して学習をおこなっていました。この「引数」は、学習時に更新されていくパラメータとは区別して、「ハイパーパラメータ」と呼ばれます。
ハイパーパラメータの値によって、学習モデルの精度も変わってくるため、ハイパーパラメータを調整(チューニング)する必要があります。
この調整を自動的に行う手法の1つが「グリッドサーチ」になります。
今回も Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]の第4章を参考にさせていただきながら、取り組んでいます。
今回は、Jupyter notebookを使って実行を行いました。
Jupyter notebookについては、以下もご参照ください。
では、振り返っていきたいと思います。
グリッドサーチは、前述の通り、学習モデルに渡す引数(ハイパーパラメータ)の組み合わせを、総当たりで試して、最も良い精度のハイパーパラメータを探索する手法になります。 この手法は、総当たりで探索するので、探索に時間がかかりますが、わかりやすい手法です。 例:3つのハイパーパラメータをを調整する場合 以下のように、組み合わせ1から順に、ハイパーパラメータの組み合わせを試していき、一番精度が高いハイパーパラメータの組み合わせを探索します。 コード全体は以下の通りで、Jupyter Notebook上で実行しました。 では、コードを順番に見ていきます。 まず、MNISTのCSVデータを読み込みます。 MNISTのデータをダウンロードして、CSV化する手順については、以下をご参照ください。 CSVのデータが準備できたら、Pandasのread_csv()メソッドを使って、CSVデータを読み込みます。 読み込んだPandasのデータから、訓練用データと訓練用の正解ラベルデータ、検証用データと検証用の正解ラベルデータを読み込みます。 正解ラベルデータは、それぞれのデータの先頭の列(.iloc[:, 0])にあります。 グリッドサーチをするために、ハイパーパラメータの組み合わせを設定します。 辞書型の変数(params)に、1~1000までの値の'C'と、'kernel'に'linear'を組み合わせるパターンと、1~1000までの値の'C'と、'kernel'に'rbf','gamma'に0.0001~0.001を組み合わせるパターンを設定します。 なお、'C'はサポートベクターマシンの境界を計算する際に誤分類をどこまで許容するかを指定する値です。小さければ小さいほど誤分類を許容しません。 また、'kernel'は、サポートベクターマシンのアルゴリズムを指定します。'linear'は線形分類で、'rbm'は、ガウシアンカーネルを用いた分類となります。'gamma'は、ガウシアンカーネルで、境界の複雑さを表す値になります。小さいほど単純な境界で、大きいほど複雑な境界となります。 sklearn.model_selectionモジュールの、GridSearchCV()メソッドを使って、グリッドサーチの実体を作成します。 引数の一つ目は、学習モデル(今回は、SVC(サポートベクターマシン分類))、二つ目は、先ほど設定した学習モデルに渡すハイパーパラメータの組み合わせになります。 続く'n_jobs'は、使用するCPUコア数で、-1を指定すると全コア数を利用します。'cv'はクロスバリデーションの分割数になります。 グリッドサーチをの実体ができたら、fit()メソッドを使って、ハイパーパラメータの組み合わせを総当たりで学習します。 総当たりの学習が完了した時点で、best_estimator_で、精度が最も高かったハイパーパラメータの組み合わせを出力できます。 predict()メソッドを使って、検証用データ(test_data)の予測を行います。 accuracy_score()メソッドを使って、予測データと正解データを比較して、正解率を計算します。 先ほど作成したコードをJupyter Notebook上で実行してみます。 以下の通り、グリッドサーチを実施して、ハイパーパラメータの組み合わせを探索後、このモデルの精度が測定できました。 正解率は、86.6%となりました。 学習データ1000件でなかなかの性能が得られたと思います。 ただ、組み合わせを総当たりで探索するので、結構計算時間がかかりました。 今回で、第4章の機械学習が完了しました。 次回からは、第5章の深層学習に入ります!頑張ります! 今後も、Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]で、スクレイピングと機械学習開発に取り組んでいきたいと思います。 【過去記事】 2019年8月31日(土)にE資格を受験して、合格しました! E資格対策として勉強の進め方や、参考書などをまとめました。 これから受験される方がいらっしゃいましたらご参考まで。 2019年3月9日(土)にG検定を受験し、見事合格できました! 受験の体験記や勉強法などを別のブログにまとめました。 これから受験される方がいらっしゃいましたらご参考まで。 【E資格対策に使った参考書】 クロスバリデーションでモデルの妥当性を検証する
1.グリッドサーチとは
2.全体像
3.MNISTのCSVデータを読み込む
4.必要な列を抽出
5.グリッドサーチのパラメータを設定
6.グリッドサーチを行う
7.検証用データで精度を確認
8.Jupyter Notebook上で実行してみる