始める無料で始める

ラベルノイズへの対処

サイバーアナリストの一人から、学習データ内の最初の100台の送信元コンピュータに対するラベルの多くが、データベースエラーにより誤っている可能性があると連絡がありました。大半のラベルは正しいのでデータは使えるはずですが、この100件のラベルは「ノイズがある」とみなしてほしいとのことです。幸い、重み付き学習を使えば対処できます。汚染されたデータは、ワークスペース内の X_train, X_test, y_train_noisy, y_test として利用できます。GaussianNB() 分類器で、重み付き学習により性能を改善できるか確かめましょう。多くの一般的な分類器の .fit() メソッドは、オプション引数 sample_weight をサポートしています。accuracy_score() 関数は読み込まれています。下の画像も参考にしてください。

この演習はコースの一部です

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

コースを見る

演習の手順

  • 汚染されたラベルを用いて、GaussianNB() のインスタンスを学習データにフィットさせます。
  • accuracy_score() を使ってテストデータでの精度を報告します。
  • 正解ラベルにはノイズのあるラベルの2倍の重みを与える重みを作成します。重みは学習データに対するものです。
  • 上記の重みを用いて分類器を再学習し、その精度を報告します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Fit a Gaussian Naive Bayes classifier to the training data
clf = ____.____(____, y_train_noisy)

# Report its accuracy on the test data
print(accuracy_score(y_test, ____.____(X_test)))

# Assign half the weight to the first 100 noisy examples
weights = [____]*100 + [1.0]*(len(____)-100)

# Refit using weights and report accuracy. Has it improved?
clf_weights = GaussianNB().fit(X_train, y_train_noisy, ____=____)
print(accuracy_score(y_test, ____))
コードを編集して実行