モデルの評価と可視化

End-to-End Machine Learning

Joshua Stapleton

Machine Learning Engineer

精度(Accuracy)

  • 適切な精度指標は堅牢な評価に不可欠
  • 結果を誤解・見誤りやすい

標準的な精度:

  • 正解数 / 予測数
  • 不均衡データでは有用でない場合あり

例:

# 陽性99、陰性1の不均衡データで約99%を達成
for patient_datapoint in heart_disease_dataset:
    model.prediction(patient_datapoint) = 'positive'
End-to-End Machine Learning

混同行列

真陽性(TP)

  • 予測 = 実際 = 陽性
  • 予測:心疾患あり、実際:心疾患あり

偽陽性(FP)

  • 予測 = 陽性、実際 = 陰性
  • 予測:心疾患あり、実際:心疾患なし

偽陰性(FN)

  • 予測 = 陰性、実際 = 陽性
  • 予測:心疾患なし、実際:心疾患あり

真陰性(TN)

  • 予測 = 実際 = 陰性
  • 予測:心疾患なし、実際:心疾患なし
End-to-End Machine Learning

平均適合率(Balanced accuracy)

  • 多くの二値分類で単純な精度より優れた指標
  • 両クラスの加重平均を提供
  • 平均適合率(Balanced accuracy)= (TP + TN) / 2
from sklearn.metrics import balanced_accuracy_score

# y_test は正解ラベル、y_pred は予測ラベル
y_pred = model.predict(X_test)
bal_accuracy = balanced_accuracy_score(y_test, y_pred)
print(f"Balanced Accuracy: {bal_accuracy:.2f}")
Balanced Accuracy: 0.85
End-to-End Machine Learning

混同行列の使い方

混同行列

End-to-End Machine Learning

交差検証

交差検証

  • 再サンプリング手法
  • 結果の頑健性を確保

 

k 分割交差検証

  • パラメータ k = データ分割数
  • 各実行で新たに学習/テストを再サンプル

交差検証の図

End-to-End Machine Learning

交差検証の使い方

  • sklearn での k 分割交差検証の簡単実装
  • モデル非依存のスコアリング

使い方:

from sklearn.model_selection import cross_val_score, KFold

# データを等分に分割
kfold = KFold(n_splits=5, shuffle=True, random_state=42)

# 指定モデルの交差検証精度を取得 cv_results = cross_val_score(model, heart_disease_X, heart_disease_y, cv=kfold, scoring='balanced_accuracy')
End-to-End Machine Learning

ハイパーパラメータ調整

ハイパーパラメータ:

  • 学習中に変化しないモデル全体の設定
  • 調整して性能を改善
# 試すハイパーパラメータ
C_values = [0.001, 0.01, 0.1, 1, 10, 100, 1000]

# 手動で反復
for C in C_values:
    model = LogisticRegression(max_iter=200, C=C)
    model.fit(X_train, y_train)
    accuracy = cross_val_score(model, X, y, cv=kfold, scoring='balanced_accuracy')
    print(f"C = {C}: Bal Acc: {accuracy.mean():.4f} (+/- {accuracy.std():.4f})")
End-to-End Machine Learning

ハイパーパラメータ調整の例

ハイパーパラメータ調整の出力例:

 

C = 0.001: Bal Acc: 0.6200 (+/- 0.0215)
C = 0.01: Bal Acc: 0.7325 (+/- 0.0234)
C = 0.1: Bal Acc: 0.7923 (+/- 0.0202)
C = 1: Bal Acc: 0.8050 (+/- 0.0191)
C = 10: Bal Acc: 0.8034 (+/- 0.0185)
C = 100: Bal Acc: 0.8021 (+/- 0.0187)
C = 1000: Bal Acc: 0.8017 (+/- 0.0188)
End-to-End Machine Learning

¡Vamos a practicar!

End-to-End Machine Learning

Preparing Video For Download...