ラベルノイズへの対処
サイバーアナリストの一人から、学習データ内の最初の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, ____))