このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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
を呼び出して、データの入力チャンクに含まれる各観測値のクラス事後確率を計算します。被験者が踊っている (Y が 5) かどうかに関するモデルによる予測の精度をインクリメンタルに測定することを検討します。これを行うには、チャンクの各観測値についてのクラス 5 の事後確率とそれ以外のクラスのうちの最大の事後確率の差を
perfcurve
に渡して作成された ROC 曲線の AUC を計算します。fit
を呼び出して、モデルを入力チャンクにあてはめます。前のインクリメンタル モデルを、入力観測値にあてはめた新しいモデルで上書きします。
numObsPerChunk = 100; nchunk = floor((n - initobs)/numObsPerChunk) - 1; Posterior = zeros(nchunk,numel(Mdl.ClassNames)); 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(idx,:)] = predict(Mdl,X(idx,:)); diffscore = Posterior(idx,classauc) - max(Posterior(idx,setdiff(Mdl.ClassNames,classauc)),[],2); [~,~,~,auc(j)] = perfcurve(Y(idx),diffscore,Mdl.ClassNames(classauc)); Mdl = fit(Mdl,X(idx,:),Y(idx)); end
Mdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationNaiveBayes
モデル オブジェクトです。
データの入力チャンクに AUC をプロットします。
plot(auc) ylabel('AUC') xlabel('Iteration')
AUC は、分類器がインクリメンタル学習において踊っている被験者を正しく予測していることを示しています。
入力引数
Mdl
— インクリメンタル学習用の単純ベイズ分類モデル
incrementalClassificationNaiveBayes
モデル オブジェクト
インクリメンタル学習用の単純ベイズ分類モデル。incrementalClassificationNaiveBayes
モデル オブジェクトとして指定します。Mdl
は、直接作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner
によって変換して作成することもできます。詳細については、対応するリファレンス ページを参照してください。
観測値のバッチでラベルを予測するように Mdl
を構成しなければなりません。
Mdl
が従来式の学習済みモデルから変換されたモデルの場合、いかなる修正も行うことなくラベルを予測できます。それ以外の場合、
Mdl.DistributionParameters
は、列数がMdl.NumPredictors
> 0 で行数が 1 以上の cell 行列でなければなりません。各行はMdl.ClassNames
の各クラス名に対応します。
X
— 予測子データのバッチ
浮動小数点行列
ラベルを予測するための予測子データのバッチ。n 行 Mdl.NumPredictors
列の浮動小数点行列として指定します。
観測値のラベル Y
の長さと X
の観測値の数は同じでなければなりません。Y(
は j
)X
内の観測値 j (行または列) のラベルです。
データ型: single
| double
名前と値の引数
例: Cost=[0 2;1 0]
は、真のクラス Mdl.ClassNames(2)
をもつ観測値を誤分類する場合に比べて、真のクラス Mdl.ClassNames(1)
をもつ観測値を誤分類する場合に 2 倍のペナルティを与えます。
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
Cost
— 観測値を誤分類するコスト
Mdl.Cost
(既定値) | 正方行列 | 構造体配列
観測値を誤分類するコスト。次の表の値として指定します。ここで、c は Mdl.ClassNames
内のクラスの数です。指定された値は Mdl.Cost
の値をオーバーライドします。
値 | 説明 |
---|---|
c 行 c 列の数値行列 |
|
構造体配列 | 次の 2 つのフィールドをもつ構造体配列です。
|
例: Cost=struct('ClassNames',Mdl.ClassNames,'ClassificationCosts',[0 2; 1 0])
データ型: single
| double
| struct
Prior
— 前のクラスの確率
Mdl.Prior
(既定値) | 数値ベクトル
クラスの事前確率。この数値ベクトルの値を指定します。Prior
は Mdl.ClassNames
のクラス数と同じ長さであり、要素の順序は Mdl.ClassNames
内のクラスの順序に対応します。predict
は結果の合計が 1 となるようにベクトルを正規化します。
指定された値は Mdl.Prior
の値をオーバーライドします。
データ型: single
| double
ScoreTransform
— スコア変換関数
Mdl.ScoreTransform
(既定値) | string スカラー | 文字ベクトル
インクリメンタル学習関数が生の応答値を変換する方法を記述するスコア変換関数。文字ベクトル、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
出力引数
label
— 予測応答
categorical 配列 | 文字配列 | string ベクトル | logical ベクトル | 文字ベクトルの cell 配列 | 浮動小数点ベクトル
予測応答 (またはラベル)。n 行の categorical 配列または文字配列、浮動小数点ベクトル、logical ベクトルまたは string ベクトル、文字ベクトルの cell 配列として返されます。n は X
の観測値の数、label(
は観測値 j
)
の予測応答です。 j
label
は Mdl.ClassNames
に格納されているクラス名と同じデータ型になります。(string 配列は文字ベクトルの cell 配列として扱われます)。
Posterior
— クラスの事後確率
浮動小数点行列
クラスの事後確率。n 行 2 列の浮動小数点行列として返されます。Posterior(
は観測値 j
,k
)
がクラス j
になる事後確率です。k
Mdl.ClassNames
はクラスの順序を指定します。
Cost
— 予測誤分類コスト
浮動小数点行列
予測誤分類コスト。n 行 numel(Mdl.ClassNames)
列の浮動小数点行列として返されます。
Cost(
は j
,k
)X
の行
の観測値がクラス j
(k
Mdl.ClassNames(
) になると予測される予測誤分類コストです。k
)
詳細
誤分類コスト
"誤分類コスト" は、観測を誤ったクラスにラベル付けする分類器の相対的な重大度です。
誤分類コストには、真の誤分類コストと予測誤分類コストの 2 種類があります。K をクラスの数と仮定します。
"真の誤分類コスト" — K 行 K 列の行列で、真のクラスが i の場合、要素 (i,j) は観測値をクラス 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
は事前分布を保存します。は予測子の同時密度です。各クラスは離散的なので、次のようになります。
バージョン履歴
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)