機械学習:マルチラベル学習とskmultilearnライブラリ
Machine Learning Multi Label Learning
概要 :マルチラベル学習法は、同時に複数のラベルを持つインスタンスの学習問題を解決します。この記事では、いくつかの古典的なマルチラベル学習の方法と指標を要約し、sklearnに基づく特定の実装プロセスを示します。
目次
- 指標、学習戦略、学習方法
- バイナリの関連性
- 分類子チェーン
- ラベルパワーセット
- ランダムk-ラベルセット
主な参考資料
【1】「マルチラベル学習アルゴリズムのレビュー」
1.測定、学習戦略、学習方法
マルチラベル問題のメトリックは、2つのカテゴリに分類できます。
- サンプルベースの指標:各サンプルの測定と平均
- ラベルベースの指標:各ラベルの測定と平均。
具体的な分類を以下に示します。
マルチラベル問題には、3つの主要な学習戦略があります。 一次戦略 、 二次戦略 と 高レベルの戦略 。
- 一次戦略はラベルの関連性を考慮せず、効率が高い
- 二次戦略は、2つのタグ間の相関を考慮します
- 高次戦略は、複数のタグ間の相関を考慮し、優れたパフォーマンスを発揮します。
学習方法は2つのカテゴリーに分けることができます。 問題ベースのアプローチ と アルゴリズム適応に基づく方法 。
- 問題ベースの変換方法:マルチラベル問題を、バイナリ分類問題、カテゴリランキング問題、マルチ分類問題などの扱いやすい形式に変換し、既存の方法を使用してそれらを解決します。
- アルゴリズム適応に基づく方法:ML-KNN、ML-DT、Rank-SVMなどの既存のアルゴリズムを適応させます。
次の表に、いくつかのアルゴリズムを要約します。
次の手順はsklearnと組み合わされています 問題ベースの学習方法 、測定方法は直接使用できますsklearn.metrics
。使用されるデータセットは次のとおりです。
from sklearn.datasets import make_multilabel_classification from sklearn.model_selection import train_test_split X, Y = make_multilabel_classification(n_samples=150, n_features=6, n_classes=5, n_labels=2, allow_unlabeled=False) x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)
2.バイナリの関連性
基本的な考え方:マルチラベル学習問題を複数の独立した二項分類問題に変換します。
タグ間の相関は考慮されていないので、 一次戦略 。
利点:
- 単一のラベル分類子を推定する
- ラベルの組み合わせの範囲を超えて拡張できます。
短所:
- ラベル数が多い場合は不向き
- タグ間の相関関係は無視してください。
2分類器を構築する方法は、one-vs-rest法を使用します。これは、基本分類子がsklearnの任意のプリセット分類子を使用できる次のインターフェースを使用して直接実装できます。
from sklearn.ensemble import RandomForestClassifier from sklearn import metrics from skmultilearn.problem_transform import BinaryRelevance classifier = BinaryRelevance( classifier = RandomForestClassifier(), require_dense = [False, True] ) classifier.fit(x_train, y_train) pred = classifier.predict(x_test) metrics.f1_score(y_test, pred, average='micro')
3.分類子チェーン
基本的な考え方:ラベルを並べ替えてから、問題をバイナリ分類問題に変換します。 j番目のバイナリ分類問題では、最初のj-1ラベル値も特徴入力として使用されます。
それでもバイナリ分類の問題として解決されますが、複数のタグの相関は連鎖的にランダムに考慮されます。これは 高レベルの戦略 。
利点:
- 単一のラベル分類子を推定する
- ラベルの組み合わせの範囲を超えて拡張できます
- タグ間の相関関係を考慮してください。
短所:
- ラベル数が多い場合は不向き
- ラベルの並べ替えの順序に大きく依存します。
one-vs-restメソッドは2分類子を構築するために使用され、インターフェースの実装メソッドはBinaryRelevanceと同じです。
from skmultilearn.problem_transform import ClassifierChain
4.パワーセットにラベルを付ける
基本的な考え方:マルチラベル学習をマルチクラス分類問題に変換します。異なるラベルの組み合わせはそれぞれ異なるクラスと見なされます。
複数のタグ間の相関関係を考慮すると、 高レベルの戦略 。
利点:
- 分類子を使用して複数のラベルの関連性を検討する
- トレーニングデータにすべてのラベルの組み合わせが含まれている場合、通常はそれが最適なソリューションです。
短所
- トレーニングデータには、すべてのラベルの組み合わせを含める必要があります
- ラベルスペースが大きいと、オーバーフィットしやすくなります。
インターフェイスの実装方法は、BinaryRelevanceと同じです。また、従来の複数分類の問題になる可能性もあります。
from skmultilearn.problem_transform import LabelPowerset
5.ランダムk-ラベルセット
基本的な考え方:マルチラベル学習を複数のマルチクラス分類問題の統合に変換し、一度にラベルセットから長さKのサブセットのみを取得することで、ラベルパワーセットの欠点を軽減します。
複数のタグ間の相関関係をランダムに考慮します。 高レベルの戦略 。
利点:
- Binary Relevanceと比較して、必要な分類子が少ない場合があります
- タグ間の相関関係を考慮する
- ラベルパワーセットと比較して、目に見えないラベルの組み合わせをアンダーフィットするのは簡単ではありません。
短所:
- ランダム戦略を使用すると、最適なサブセット分割が得られない場合があります。
インターフェイスの実装方法は次のとおりですが、少し異なります。公式ドキュメントを確認して理解してください。
from sklearn.ensemble import RandomForestClassifier from sklearn import metrics from skmultilearn.ensemble import RakelD classifier = RakelD( base_classifier=RandomForestClassifier(), base_classifier_require_dense=[True, True], labelset_size=4 ) classifier.fit(X_train, y_train) pred = classifier.predict(X_train, y_train)
これに基づいて、サブセット分割を決定するためのいくつかの方法が開発されており、対応するインターフェースはskmultilearnの公式Webサイトにあります。各分類子のリンクは次のとおりです。 http://scikit.ml/modelselection.html 。