はじめに
この実験では、半教師あり学習の概念を探ります。半教師あり学習は、学習データの一部がラベル付けされており、一部がラベル付けされていない機械学習の一種です。半教師あり学習アルゴリズムは、ラベル付けされていないデータを活用して、モデルの性能を向上させ、新しいサンプルに対してより良く汎化させることができます。これは、ラベル付けされたデータが少なく、ラベル付けされていないデータが多い場合に特に役立ちます。
この実験では、Self Training と Label Propagation の 2 つの半教師あり学習アルゴリズムに焦点を当てます。Python の人気のある機械学習ライブラリである scikit-learn を使用して、これらのアルゴリズムを実装して使用する方法を学びます。
VM のヒント
VM の起動が完了したら、左上隅をクリックして Notebook タブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み完了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。そうすれば、迅速に問題を解決します。
scikit-learn のインストール
始める前に、scikit-learn がインストールされていることを確認しましょう。インストールされていない場合は、次のコマンドを使用してインストールできます。
pip install -U scikit-learn
Self Training
Self Training アルゴリズムの概要
Self Training アルゴリズムは、Yarowsky のアルゴリズムに基づいています。このアルゴリズムは、教師付き分類器を、未ラベル付きデータから学習することで半教師あり分類器として機能させます。このアルゴリズムは、ラベル付きデータと未ラベル付きデータの両方で教師付き分類器を反復的に訓練し、その後、未ラベル付きデータに対する予測を使って、これらのサンプルのサブセットをラベル付きデータに追加します。すべてのサンプルにラベルが付くか、反復で新しいサンプルが選択されなくなるまで、アルゴリズムは反復を続けます。
scikit-learn での Self Training の使用
scikit-learn では、Self Training アルゴリズムは SelfTrainingClassifier クラスに実装されています。このアルゴリズムを使用するには、predict_proba メソッドを実装する教師付き分類器を提供する必要があります。Self Training アルゴリズムを使用する方法の例を以下に示します。
from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.linear_model import LogisticRegression
## ロジスティック回帰分類器を作成
classifier = LogisticRegression()
## ロジスティック回帰分類器をベース分類器とした自己訓練分類器を作成
self_training_classifier = SelfTrainingClassifier(classifier)
## 自己訓練分類器をラベル付きデータと未ラベル付きデータで訓練
self_training_classifier.fit(X_labeled, y_labeled, X_unlabeled)
## 新しいサンプルのラベルを予測
y_pred = self_training_classifier.predict(X_test)
上記の例では、X_labeled と y_labeled はラベル付きデータ、X_unlabeled は未ラベル付きデータ、X_test は予測対象の新しいサンプルです。
ラベル伝播
ラベル伝播アルゴリズムの概要
ラベル伝播は、半教師ありグラフ推論アルゴリズムの一種です。入力データセットのすべての項目に対して類似度グラフを構築し、このグラフを使って、ラベル付きデータから未ラベル付きデータにラベルを伝播させます。ラベル伝播は分類タスクに使用でき、データを別の次元空間に射影するためのカーネル手法をサポートします。
scikit-learn でのラベル伝播の使用
scikit-learn では、2 つのラベル伝播モデルが利用可能です。LabelPropagation と LabelSpreading です。両方のモデルは類似度グラフを構築し、ラベルを伝播させます。ラベル伝播を使用する方法の例を以下に示します。
from sklearn.semi_supervised import LabelPropagation
## ラベル伝播モデルを作成
label_propagation = LabelPropagation()
## ラベル付きデータでラベル伝播モデルを訓練
label_propagation.fit(X_labeled, y_labeled)
## 新しいサンプルのラベルを予測
y_pred = label_propagation.predict(X_test)
上記の例では、X_labeled と y_labeled はラベル付きデータであり、X_test は予測対象の新しいサンプルです。
まとめ
半教師あり学習は、未ラベル付きデータを活用してモデルの性能を向上させる強力な手法です。この実験では、Self Training と Label Propagation の 2 つの半教師あり学習アルゴリズムについて学びました。また、scikit-learn を使ってこれらのアルゴリズムを実装して使用する方法も学びました。機械学習のワークフローに未ラベル付きデータを組み込むことで、利用可能なデータをより良く活用し、より正確な予測を行うことができます。