predict
説明
では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、label
= predict(Mdl
,X
,Name,Value
)Cost
引数を指定することで、予測の計算にカスタムの誤分類コスト行列 (つまり、値 Mdl.Cost
をオーバーライドする) を指定できます。
例
人の行動のデータ セットを読み込みます。
load humanactivity
データ セットの詳細については、コマンド ラインで Description
を入力してください。
単純ベイズ分類モデルをデータ セット全体に当てはめます。
TTMdl = fitcnb(feat,actid)
TTMdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' NumObservations: 24075 DistributionNames: {1×60 cell} DistributionParameters: {5×60 cell} Properties, Methods
TTMdl
は、従来式の学習済みモデルを表す ClassificationNaiveBayes
モデル オブジェクトです。
従来式の学習済み分類モデルをインクリメンタル学習用の単純ベイズ分類モデルに変換します。
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationNaiveBayes IsWarm: 1 Metrics: [1×2 table] ClassNames: [1 2 3 4 5] ScoreTransform: 'none' DistributionNames: {1×60 cell} DistributionParameters: {5×60 cell} Properties, Methods
IncrementalMdl
は、インクリメンタル学習用に準備された incrementalClassificationNaiveBayes
モデル オブジェクトです。
関数 incrementalLearner
は、学習した条件付き予測子分布パラメーターを、TTMdl
が学習データから学習した他の情報と共に渡して、インクリメンタル学習器を初期化します。IncrementalMdl
はウォーム (IsWarm
が 1
) です。これは、インクリメンタル学習関数がパフォーマンス メトリクスの追跡を開始できることを意味します。
従来式の学習済みモデルから変換して作成したインクリメンタル学習器は、追加の処理なしで予測を生成できます。
両方のモデルを使用して、すべての観測値のクラス ラベルを予測します。
ttlabels = predict(TTMdl,feat); illables = predict(IncrementalMdl,feat); sameLabels = sum(ttlabels ~= illables) == 0
sameLabels = logical
1
各観測値についての予測ラベルが両方のモデルで同じになります。
この例では、学習の誤分類コストを平衡に維持しながら、データの入力チャンクのラベル予測に誤分類コストを適用する方法を示します。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(10); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
インクリメンタル学習用の単純ベイズ分類モデルを作成します。クラス名を指定します。モデルを最初の 10 個の観測値に当てはめて predict
用にモデルを準備します。
Mdl = incrementalClassificationNaiveBayes(ClassNames=unique(Y)); initobs = 10; Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs)); canPredict = size(Mdl.DistributionParameters,1) == numel(Mdl.ClassNames)
canPredict = logical
1
"実行中" (クラス 4) を誤分類するモデルに重いペナルティを課すことを考えます。他のクラスの誤分類と比較して、実行中を誤分類することには 100 倍のペナルティを適用するコスト行列を作成します。行は真のクラスに、列は予測クラスに対応します。
k = numel(Mdl.ClassNames);
Cost = ones(k) - eye(k);
Cost(4,:) = Cost(4,:)*100; % Penalty for misclassifying "running"
Cost
Cost = 5×5
0 1 1 1 1
1 0 1 1 1
1 1 0 1 1
100 100 100 0 100
1 1 1 1 0
データ ストリームをシミュレートし、100 個の観測値の入力チャンクごとに次のアクションを実行します。
predict
を呼び出して、データの入力チャンクに含まれる各観測値のラベルを予測します。predict
を再び呼び出しますが、引数Cost
を使用して誤分類コストを指定します。fit
を呼び出して、モデルを入力チャンクに当てはめます。前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。
numObsPerChunk = 100; nchunk = ceil((n - initobs)/numObsPerChunk); labels = zeros(n,1); cslabels = zeros(n,1); cst = zeros(n,5); cscst = zeros(n,5); % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; [labels(idx),~,cst(idx,:)] = predict(Mdl,X(idx,:)); [cslabels(idx),~,cscst(idx,:)] = predict(Mdl,X(idx,:),Cost=Cost); Mdl = fit(Mdl,X(idx,:),Y(idx)); end labels = labels((initobs + 1):end); cslabels = cslabels((initobs + 1):end);
ヒストグラムをプロットして、予測されるクラス分布を予測方法の間で比較します。
figure; histogram(labels); hold on histogram(cslabels); legend(["Default-cost prediction" "Cost-sensitive prediction"])
コストを考慮した予測方法は、クラス 4 の誤分類に重いペナルティを与えるため、既定の平衡なコストを使用した予測方法と比較して、クラス 4 への予測が多い結果となります。
人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。
load humanactivity n = numel(actid); rng(10) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
データ セットの詳細については、コマンド ラインで Description
を入力してください。
インクリメンタル学習用の単純ベイズ分類モデルを作成します。クラス名を指定します。モデルを最初の 10 個の観測値に当てはめて predict
用にモデルを準備します。
Mdl = incrementalClassificationNaiveBayes('ClassNames',unique(Y));
initobs = 10;
Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));
canPredict = size(Mdl.DistributionParameters,1) == numel(Mdl.ClassNames)
canPredict = logical
1
Mdl
は incrementalClassificationNaiveBayes
モデルです。そのプロパティはすべて読み取り専用です。モデルは予測を生成するように構成されています。
データ ストリームをシミュレートし、100 個の観測値の入力チャンクごとに次のアクションを実行します。
predict
を呼び出して、データの入力チャンクに含まれる各観測値のクラス事後確率を計算します。rocmetrics
を呼び出し、クラス事後確率を使用して ROC 曲線の下の領域 (AUC) を計算し、すべてのクラスの平均の AUC 値を格納します。この AUC は、インクリメンタル モデルが平均でどの程度正しく行動を予測するかの尺度になります。fit
を呼び出して、モデルを入力チャンクに当てはめます。前のインクリメンタル モデルを、入力観測値に当てはめた新しいモデルで上書きします。
numObsPerChunk = 100; nchunk = floor((n - initobs)/numObsPerChunk); auc = zeros(nchunk,1); classauc = 5; % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1 + initobs); iend = min(n,numObsPerChunk*j + initobs); idx = ibegin:iend; [~,posterior] = predict(Mdl,X(idx,:)); mdlROC = rocmetrics(Y(idx),posterior,Mdl.ClassNames); [~,~,~,auc(j)] = average(mdlROC,'micro'); Mdl = fit(Mdl,X(idx,:),Y(idx)); end
Mdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationNaiveBayes
モデル オブジェクトになります。
入力データの各チャンクの AUC 値をプロットします。
plot(auc) xlim([0 nchunk]) ylabel('AUC') xlabel('Iteration')
プロットは、分類器がインクリメンタル学習において行動を正しく予測していることを示しています。
入力引数
インクリメンタル学習用の単純ベイズ分類モデル。incrementalClassificationNaiveBayes
モデル オブジェクトとして指定します。Mdl
は、直接作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner
によって変換して作成することもできます。詳細については、対応するリファレンス ページを参照してください。
観測値のバッチでラベルを予測するように Mdl
を構成しなければなりません。
Mdl
が従来式の学習済みモデルから変換されたモデルの場合、いかなる修正も行うことなくラベルを予測できます。それ以外の場合、
Mdl.DistributionParameters
は、列数がMdl.NumPredictors
> 0 で行数が 1 以上の cell 行列でなければなりません。各行はMdl.ClassNames
の各クラス名に対応します。
ラベルを予測するための予測子データのバッチ。n 行 Mdl.NumPredictors
列の浮動小数点行列として指定します。
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: Cost=[0 2;1 0]
は、真のクラス Mdl.ClassNames(2)
をもつ観測値を誤分類する場合に比べて、真のクラス Mdl.ClassNames(1)
をもつ観測値を誤分類する場合に 2 倍のペナルティを与えます。
観測値を誤分類するコスト。次の表の値として指定します。ここで、c は Mdl.ClassNames
内のクラスの数です。指定された値は Mdl.Cost
の値をオーバーライドします。
値 | 説明 |
---|---|
c 行 c 列の数値行列 |
|
構造体配列 | 次の 2 つのフィールドをもつ構造体配列です。
|
例: Cost=struct('ClassNames',Mdl.ClassNames,'ClassificationCosts',[0 2; 1 0])
データ型: single
| double
| struct
事前クラス確率。この数値ベクトルの値を指定します。Prior
は Mdl.ClassNames
のクラス数と同じ長さであり、要素の順序は Mdl.ClassNames
内のクラスの順序に対応します。predict
は結果の合計が 1 となるようにベクトルを正規化します。
指定された値は Mdl.Prior
の値をオーバーライドします。
データ型: single
| double
インクリメンタル学習関数が生の応答値を変換する方法を記述するスコア変換関数。文字ベクトル、string スカラー、または関数ハンドルとして指定します。指定された値は Mdl.ScoreTransform
の値をオーバーライドします。
次の表は、スコア変換で使用可能な組み込み関数の一覧です。
値 | 説明 |
---|---|
"doublelogit" | 1/(1 + e–2x) |
"invlogit" | log(x / (1 – x)) |
"ismax" | 最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する |
"logit" | 1/(1 + e–x) |
"none" または "identity" | x (変換なし) |
"sign" | x < 0 のとき –1 x = 0 のとき 0 x > 0 のとき 1 |
"symmetric" | 2x – 1 |
"symmetricismax" | 最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する |
"symmetriclogit" | 2/(1 + e–x) – 1 |
データ型: char
| string
出力引数
予測応答 (ラベル)。n 行の categorical 配列または文字配列、浮動小数点ベクトル、logical ベクトルまたは string ベクトル、文字ベクトルの cell 配列として返されます。n は X
の観測値の数、label(
は観測値 j
)
の予測応答です。 j
label
は Mdl.ClassNames
に格納されているクラス名と同じデータ型になります。(string 配列は文字ベクトルの cell 配列として扱われます)。
クラスの事後確率。n 行 numel(Mdl.ClassNames)
列の浮動小数点行列として返されます。Posterior(
は観測値 j
,k
)
がクラス j
になる事後確率です。k
Mdl.ClassNames
はクラスの順序を指定します。
予測誤分類コスト。n 行 numel(Mdl.ClassNames)
列の浮動小数点行列として返されます。
Cost(
は j
,k
)X
の行
の観測値がクラス j
(k
Mdl.ClassNames(
) に分類される予測コストです。k
)
詳細
"誤分類コスト" は、観測を誤ったクラスにラベル付けする分類器の相対的な重大度です。
誤分類コストには、真と予測の 2 種類があります。K をクラスの数と仮定します。
"真の誤分類コスト" — K 行 K 列の行列で、要素 (i,j) は、真のクラスが i である場合に観測値をクラス j に分類するコストを示します。誤分類コストはプロパティ
Mdl.Cost
に格納され、計算に使用されます。既定の設定では、i
≠j
の場合にMdl.Cost(i,j)
= 1 で、i
=j
の場合Mdl.Cost(i,j)
= 0 です。つまり、正しい分類のコストは0
で、誤った分類では1
です。"予測誤分類コスト" — K 次元のベクトルで、要素 k は、観測値をクラス k に分類するクラス事後確率で重み付けされた加重平均コストです。
つまり、観測値は予測誤分類コストが最も低いクラスに分類されます。
"事後確率" はデータが与えられる場合に、観測値が特定のクラスに属している確率です。
単純ベイズの場合、与えられた観測値 (x1,...,xP) の分類が k になる事後確率は次のようになります。
ここで
は、予測子がクラス k に含まれる場合の条件付き同時密度です。予測子の分布名は
Mdl.DistributionNames
に格納します。π(Y = k) はクラスの事前確率の分布です。
Mdl.Prior
は事前分布を保存します。は予測子の同時密度です。各クラスは離散的なので、次のようになります。
バージョン履歴
R2021a で導入
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)