教師あり学習のパイプライン

Python で設計する Machine Learning ワークフロー

Dr. Chris Anagnostopoulos

Honorary Associate Professor

ラベル付きデータ

  • 特徴量変数(略記: X)
  • ラベル/クラス(略記: y)
credit_scoring.head(4)
  checking_status  duration  ...  foreign_worker class
0            '<0'         6  ...             yes  good
1      '0<=X<200'        48  ...             yes   bad
2   'no checking'        12  ...             yes  good
3            '<0'        42  ...             yes  good
Python で設計する Machine Learning ワークフロー

特徴量エンジニアリング

  • 多くの分類器は数値特徴量を想定
  • 文字列列は数値に変換が必要

sklearn.preprocessing の LabelEncoder で前処理:

le = LabelEncoder()
le.fit_transform(credit_scoring['checking_status'])[:4]
array([1, 0, 3, 1])
Python で設計する Machine Learning ワークフロー

モデルの学習

  • .fit(features, labels)
  • .predict(features)
features, labels = credit_scoring.drop('class', 1), credit_scoring['class']

model_nb = GaussianNB() model_nb.fit(features, labels) model_nb.predict(features.head(5))
['good' 'bad' 'good' 'bad' 'good']

最初の5件で正解率60%。

Python で設計する Machine Learning ワークフロー

モデル選択

  • .fit() はモデルのパラメータを最適化
  • 他のモデルはどうでしょうか?

AdaBoostClassifier は最初の5件で GaussianNB を上回る:

model_ab = AdaBoostClassifier()
model_ab.fit(features, labels)
model_ab.predict(features.head(5))
numpy.array(labels[0:5])
['good' 'bad' 'good' 'good' 'bad']
['good' 'bad' 'good' 'good' 'bad']
Python で設計する Machine Learning ワークフロー

性能評価

サンプルが多いほど精度推定は安定:

from sklearn.metrics import accuracy_score
accuracy_score(labels, model_nb.predict(features)) # naive bayes
0.706
accuracy_score(labels, model_ab.predict(features)) # adaboost
0.802

この計算の問題点は?

Python で設計する Machine Learning ワークフロー

過学習とデータ分割

過学習: モデルは学習データより未知データで精度が下がります。

X_train, y_trainで学習し、X_test, y_testで精度評価:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

GaussianNB().fit(X_train, y_train).predict(X_test)
Python で設計する Machine Learning ワークフロー

特徴量エンジニアリング、学習/テスト分割、モデル評価、モデル選択という標準的な教師あり学習ワークフロー。現実問題では標準パイプラインだけでは不十分なこともある。

Python で設計する Machine Learning ワークフロー

本コースの内容

  1. パイプラインをスケーラブルにチューニングする方法。
  2. ドメイン専門家を巻き込み、予測の妥当性を確保。
  3. 時間が経っても性能を維持する方法。
  4. ラベルが不足しているときの学習方法。
Python で設計する Machine Learning ワークフロー

住宅ローン危機を防げたでしょうか?

Python で設計する Machine Learning ワークフロー

Preparing Video For Download...