scikit-learn 0.24に関するメモ

scikit-learn 0.24でよく使う便利な機能に関するメモです

sklearn.semi_supervised.SelfTrainingClassifier

https://scikit-learn.org/stable/modules/generated/sklearn.semi_supervised.SelfTrainingClassifier.html

教師あり分類器を半教師あり分類器として機能させるクラスです。

アルゴリズムの概要は以下のようになります。

  1. ラベル付きデータで学習
  2. ラベルのないデータを予測
  3. 予測値をトレーニングセットに追加

そのため、教師なし学習のように全くラベルが付いていないデータでは学習させることができないので注意して下さい。

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
from sklearn import datasets
from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.svm import SVC
rng = np.random.RandomState(42)
iris = datasets.load_iris()
random_unlabeled_points = rng.rand(iris.target.shape[0]) < 0.3
iris.target[random_unlabeled_points] = -1 # -1がラベルなしを表す。
svc = SVC(probability=True, gamma="auto")
self_training_model = SelfTrainingClassifier(svc)
self_training_model.fit(iris.data, iris.target)

predict_probaメソッドを持つ、全ての分類器で利用が可能です。疑似ラベルを付与する際に閾値を用いて付与するかを決めるため、predict_probaが必要なのだと思います。

おまけ

半教師あり学習に関する記述がある書籍です。

  • 機械学習 100+ページ エッセンス

記事情報

  • 投稿日:2021年8月20日
  • 最終更新日:2021年8月20日