2019年1月21日月曜日

【機械学習】設計と実装まとめ

  • 公開日:2019年01月20日
  • 最終更新日:2019年01月20日

記事概要

機械学習でデータ分析をするときに気が付いたこと、得た知見のまとめ

記事の対象者

  • 機械学習の基礎を理解している
  • 実務で機械学習を利用している
  • kaggleで機械学習を利用している

記事で使うデータ

Categoricalデータ取得

Categoricalデータを取得するとき、pandas_profilingでEDA(探索的データ解析)でデータを見ながら、必要な変数名をコピペしながら配列に設定していくことが多々あります。

Categoricalデータはone_hot_encode化して分類器にかけることがほとんどだと思うので(特にkaggleとか)、以下のようにdtype=objectのデータを取ってきてしまうと便利です。

terminal

categorical_train = df.select_dtypes(include=object)

Categoricalデータは、dtype=objectであることが多いので、とても役に立ちます。

当然データによっては不要なカラムもあるので、その場合、不要なカラムはdropで消しましょう。

terminal

extracted_categorical_train = categorical_train.drop(['customerID', 'TotalCharges', 'Churn'],  axis=1)

命名する変数名は、実装時にきちんと考えましょう。地雷化したコードが多すます。

モデル実装

モデルをチューニングしてモデルの性能検証をする場合は、以下の流れで行います。

  • GridSearchCVでモデルのハイパーパラメータを測定
  • 交差検証でモデルの性能を測定

モデルの汎化性能を測定するには、交差検証だけでなく、k分割を使うとさらに良いです。

まずはGridSearchCVを使ってハイパーパラメーターを決定します。

terminal

from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import KFold
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier()

# 試行するパラメータを羅列する
params = {
    'max_depth': list(range(1, 20)),
    'criterion': ['gini', 'entropy']
}

# KFoldクラスで分割数を指定する
kFold = KFold(n_splits=5, shuffle=True, random_state=0)


grid_search = GridSearchCV(clf,  # 分類器を渡す
    param_grid=params,  # 試行してほしいパラメータを渡す
    cv=kFold,  # KFoldで汎化性能を調べる
)

# グリッドサーチで優れたハイパーパラメータを探す
grid_search.fit(X, y)

# 最も良かったスコア
print(grid_search.best_score_)
# 上記を記録したパラメータの組み合わせ
print(grid_search.best_params_)

上記を実行します。

terminal

0.8036348147096408
{'criterion': 'entropy', 'max_depth': 8}

accuracyとハイパーパラメーターが出力されました。

上記のハイパーパラメーターを使って交差検証でモデルの性能を測定します。

terminal

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

# 引数はdictで渡せないので注意。
clf = RandomForestClassifier(criterion= 'entropy', 
                             max_depth=8)

scores = cross_val_score(clf, X, y, scoring='accuracy', cv=kFold)

print(scores)
print(scores.mean())

実行します。

terminal

[0.7920511  0.80624556 0.79418027 0.79545455 0.81676136]
0.8009385686173301

これでGridSearchCVでモデルのハイパーパラメータを測定して、交差検証でモデルの性能を測定できました。

まとめ

機械学習は慣れるまで大変ですが、素晴らしい技術なので頑張って身につけてください。

機械学習エンジニアは不要になるとか、クラウドで全部できるようになるとか言う人がいますが、真に受けて学習を怠ってはいけません。
プログラマーは不要になるとか、大企業は潰れないとか、世の中に流れている通説はほとんど嘘です。
リターンの大きい技術なので、是非頑張ってください。

以上です。

参照サイト


この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...