SemiSupervisedSelfTrainingModel
分類用の半教師あり自己学習モデル
説明
関数 fitsemiself を使用すると、半教師あり自己学習法でラベル付けされていないデータにラベルを付けられます。結果となる SemiSupervisedSelfTrainingModel オブジェクトには、ラベル付けされていない観測値に当てはめられたラベル (FittedLabels) とそのスコア (LabelScores) が含まれます。また、SemiSupervisedSelfTrainingModel オブジェクトを分類器として使用して、ラベル付けされたデータとラベル付けされていないデータの両方で学習させ、関数 predict を使って新しいデータを分類することもできます。
作成
SemiSupervisedSelfTrainingModel オブジェクトの作成には fitsemiself を使用します。
プロパティ
この プロパティ は読み取り専用です。
ラベル付けされていないデータに当てはめられるラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。FittedLabels のデータ型は、fitsemiself を呼び出すときの応答変数のクラス ラベルと同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
FittedLabels の各行は、UnlabeledX や UnlabeledTbl の対応する観測値の当てはめられたラベルを表します。
データ型: single | double | logical | char | cell | categorical
この プロパティ は読み取り専用です。
当てはめられたラベルのスコア。数値行列として指定します。LabelScores のサイズは u 行 K 列です。u はラベル付けされていないデータの観測値の数、K は ClassNames のクラスの数です。
score(u,k) はクラス k に属する観測値 u の尤度です。高いスコア値は尤度が高いことを示します。スコア値の範囲は、基となる分類器 Learner によって異なります。
データ型: single | double
この プロパティ は読み取り専用です。
基となる分類器。分類モデル オブジェクトとして指定します。fitsemiself はこの分類器をループ内で使用して、ラベル付けされていないデータにラベルを付けて、スコアを出します。ドット表記を使用して、基となる分類器のパラメーターおよびハイパーパラメーターの値を表示することができます。
たとえば、'Learner','svm' の呼び出しで fitsemiself を指定する場合、Mdl.Learner.KernelParameters を入力して、ラベル付けされたデータとされていないデータの両方で学習させた最終的なサポート ベクター マシン (SVM) モデルのカーネル パラメーターを表示することができます。
メモ
Mdl.Learner モデルにはいくつかの制限 (表形式データの非サポートなど) があるため、loss や predict などのオブジェクト関数と共に直接使用しないようにしてください。新しいデータを予測するには、SemiSupervisedSelfTrainingModel のオブジェクト関数 predict を使用します。
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数ベクトルとして指定します。予測子データの行に観測値が含まれていると仮定すると、CategoricalPredictors には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値が格納されます。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。
データ型: double
この プロパティ は読み取り専用です。
ラベル付けされていないデータにラベルを付けるために使用する一意のクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。ClassNames の要素の順序は、クラスの順序によって決まります。
データ型: single | double | logical | char | cell | categorical
この プロパティ は読み取り専用です。
予測子変数の名前。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は、予測子名が予測子データに現れる順序に対応します。
データ型: cell
この プロパティ は読み取り専用です。
応答変数名。文字ベクトルを指定します。
データ型: char
オブジェクト関数
predict | 半教師あり自己学習済み分類器を使用した新しいデータのラベル付け |
例
半教師あり自己学習法を使用して、ラベル付けされていないデータにラベルを当てはめます。
ラベル付けされたデータの観測値をランダムに 60 個生成し、その観測値が 20 個ずつ 3 つのクラスに属するようにします。
rng('default') % For reproducibility labeledX = [randn(20,2)*0.25 + ones(20,2); randn(20,2)*0.25 - ones(20,2); randn(20,2)*0.5]; Y = [ones(20,1); ones(20,1)*2; ones(20,1)*3];
散布図を使用して、ラベル付けされたデータを可視化します。同じクラスに属する観測値は同じ色で示します。データは 3 つのクラスターに分割されていますが、わずかにオーバーラップしていることに注意してください。
scatter(labeledX(:,1),labeledX(:,2),[],Y,'filled') title('Labeled Data')

ラベル付けされていないデータの観測値を追加でランダムに 300 個生成し、各クラスに 100 個ずつ属するようにします。検証のため、ラベル付けされていないデータの真のラベルを追跡します。
unlabeledX = [randn(100,2)*0.25 + ones(100,2);
randn(100,2)*0.25 - ones(100,2);
randn(100,2)*0.5];
trueLabels = [ones(100,1); ones(100,1)*2; ones(100,1)*3];半教師あり自己学習法を使用して、ラベル付けされていないデータにラベルを当てはめます。関数 fitsemiself は SemiSupervisedSelfTrainingModel オブジェクトを返します。このオブジェクトの FittedLabels プロパティにはラベル付けされていないデータに当てはめられたラベルが、LabelScores プロパティには関連するラベル スコアが含まれます。
Mdl = fitsemiself(labeledX,Y,unlabeledX)
Mdl =
SemiSupervisedSelfTrainingModel with properties:
FittedLabels: [300×1 double]
LabelScores: [300×3 double]
ClassNames: [1 2 3]
ResponseName: 'Y'
CategoricalPredictors: []
Learner: [1×1 classreg.learning.classif.CompactClassificationECOC]
Properties, Methods
散布図を使用して、当てはめられたラベルの結果を可視化します。当てはめられたラベルを使用して観測値の色を設定し、最大のラベル スコアを使用して観測値の透明度を設定します。透明度が低い観測値には、高い信頼度のラベルを付けます。クラスターの境界付近に位置している観測値には、低い信頼度のラベルが付いていることに注意してください。
maxLabelScores = max(Mdl.LabelScores,[],2); rescaledScores = rescale(maxLabelScores,0.05,0.95); scatter(unlabeledX(:,1),unlabeledX(:,2),[],Mdl.FittedLabels,'filled', ... 'MarkerFaceAlpha','flat','AlphaData',rescaledScores); title('Fitted Labels for Unlabeled Data')

ラベル付けされていないデータの真のラベルを使用して、ラベル付けの精度を判断します。
numWrongLabels = sum(trueLabels ~= Mdl.FittedLabels)
numWrongLabels = 7
unlabeledX 内の 300 個の観測値のうち、誤ったラベルが付けられた観測値はわずか 8 個です。
ラベル付けされたデータとラベル付けされていないデータの両方を使用して、SemiSupervisedSelfTrainingModel オブジェクトに学習させます。学習済みのモデルを使用して新しいデータにラベルを付けます。
ラベル付けされたデータの観測値をランダムに 15 個生成し、その観測値が 5 個ずつ 3 つのクラスに属するようにします。
rng('default') % For reproducibility labeledX = [randn(5,2)*0.25 + ones(5,2); randn(5,2)*0.25 - ones(5,2); randn(5,2)*0.5]; Y = [ones(5,1); ones(5,1)*2; ones(5,1)*3];
ラベル付けされていないデータの観測値を追加でランダムに 300 個生成し、各クラスに 100 個ずつ属するようにします。
unlabeledX = [randn(100,2)*0.25 + ones(100,2);
randn(100,2)*0.25 - ones(100,2);
randn(100,2)*0.5];半教師あり自己学習法を使用して、ラベル付けされていないデータにラベルを当てはめます。関数 fitsemiself は SemiSupervisedSelfTrainingModel オブジェクトを返します。このオブジェクトの FittedLabels プロパティにはラベル付けされていないデータに当てはめられたラベルが、LabelScores プロパティには関連するラベル スコアが含まれます。
Mdl = fitsemiself(labeledX,Y,unlabeledX)
Mdl =
SemiSupervisedSelfTrainingModel with properties:
FittedLabels: [300×1 double]
LabelScores: [300×3 double]
ClassNames: [1 2 3]
ResponseName: 'Y'
CategoricalPredictors: []
Learner: [1×1 classreg.learning.classif.CompactClassificationECOC]
Properties, Methods
新しいデータの観測値をランダムに 150 個生成し、各クラスに 50 個ずつ属するようにします。検証のために、新しいデータの真のラベルを追跡します。
newX = [randn(50,2)*0.25 + ones(50,2);
randn(50,2)*0.25 - ones(50,2);
randn(50,2)*0.5];
trueLabels = [ones(50,1); ones(50,1)*2; ones(50,1)*3];SemiSupervisedSelfTrainingModel オブジェクトの関数 predict を使用して、新しいデータのラベルを予測します。混同行列を使用して、真のラベルを予測ラベルと比較します。
predictedLabels = predict(Mdl,newX); confusionchart(trueLabels,predictedLabels)

newX 内の 150 個の観測値のうち、誤りのラベルが付けられた観測値はわずか 8 個です。
ヒント
lime、shapley、partialDependence、plotPartialDependenceなどの解釈可能性機能を使用して、予測に対する予測子の寄与の程度を解釈できます。カスタム関数を定義し、解釈可能性関数に渡す必要があります。カスタム関数は、ラベル (limeの場合)、単一クラスのスコア (shapleyの場合)、および 1 つ以上のクラスのスコア (partialDependenceとplotPartialDependenceの場合) を返す必要があります。例については、関数ハンドルを使用したモデルの指定を参照してください。
バージョン履歴
R2020b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)