Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

predict

インクリメンタル学習モデルからの新しい観測の応答予測

説明

label = predict(Mdl,X) は、インクリメンタル学習モデル Mdl からの予測子データ X について、予測応答または観測値のラベル label を返します。

label = predict(Mdl,X,'ObservationsIn','columns') は、予測子データの観測値が X の列に沿うように指定します。既定値は 'rows' です。

[label,score] = predict(___) はさらに、Mdl が分類用のインクリメンタル学習モデルである場合、前の構文におけるいずれかの入力引数の組み合わせを使用して、両方のクラスの分類スコアを返します。

すべて折りたたむ

人の行動のデータ セットを読み込みます。

load humanactivity

データ セットの詳細については、Description を表示してください。

応答は、5 つのクラスのいずれかになります。被験者が移動しているかどうか (actid > 2) を基準に、応答を二分します。

Y = actid > 2;

線形分類モデルをデータ セット全体にあてはめます。

TTMdl = fitclinear(feat,Y)
TTMdl = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [60x1 double]
              Bias: -0.2005
            Lambda: 4.1537e-05
           Learner: 'svm'


  Properties, Methods

TTMdl は従来式の学習済み線形分類モデルを表す ClassificationLinear モデル オブジェクトです。

従来式の学習済み線形分類モデルを、インクリメンタル学習用のバイナリ分類線形モデルに変換します。

IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = 
  incrementalClassificationLinear

            IsWarm: 1
           Metrics: [1x2 table]
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [60x1 double]
              Bias: -0.2005
           Learner: 'svm'


  Properties, Methods

IncrementalMdl は、SVM を使用するインクリメンタル学習用に準備された incrementalClassificationLinear モデル オブジェクトです。incrementalLearner は次のようになります。

  • 学習した係数と、TTMdl が学習データから学習した他の情報を渡して、インクリメンタル学習器を初期化

  • ウォーム (IsWarm1) となり、インクリメンタル学習関数がパフォーマンス メトリクスの追跡を開始できる

  • fitclinear が BFGS ソルバーを使用して TTMdl に学習させるのに対し、適応型スケール不変ソルバーを使用してモデルに学習させる

従来式の学習済みモデルから変換して作成したインクリメンタル学習器は、追加の処理なしで予測を生成できます。

両方のモデルを使用して、すべての観測値の分類スコアを予測します。

[~,ttscores] = predict(TTMdl,feat);
[~,ilscores] = predict(IncrementalMdl,feat);
compareScores = norm(ttscores(:,1) - ilscores(:,1))
compareScores = 0

モデルによって生成されたスコアの差は 0 です。

予測子データ行列の列に沿って観測値を配置すると、インクリメンタル学習時の効率が向上する可能性があります。

2015 年のニューヨーク市住宅データ セットを読み込み、シャッフルします。このデータの詳細については、NYC Open Data を参照してください。

load NYCHousing2015

rng(1) % For reproducibility
n = size(NYCHousing2015,1);
shuffidx = randsample(n,n);
NYCHousing2015 = NYCHousing2015(shuffidx,:);

テーブルから応答変数 SALEPRICE を抽出します。対数変換を SALEPRICE に適用します。

Y = log(NYCHousing2015.SALEPRICE + 1); % Add 1 to avoid log of 0
NYCHousing2015.SALEPRICE = [];

カテゴリカル予測子からダミー変数メトリクスを作成します。

catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"];
dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,...
    'InputVariables',catvars);
dumvarmat = table2array(dumvarstbl);
NYCHousing2015(:,catvars) = [];

テーブル内の他のすべての数値変数を売価の線形予測子として扱います。ダミー変数の行列を残りの予測子データに連結し、データを転置して計算を高速化します。

idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform');
X = [dumvarmat NYCHousing2015{:,idxnum}]';

推定期間がないように、インクリメンタル学習用の線形回帰モデルを構成します。構成したモデルを最初の 100 個の観測値にあてはめることにより、予測用のモデルを準備します。観測値がデータの列に沿うように指定します。

Mdl = incrementalRegressionLinear('Learner','leastsquares','EstimationPeriod',0);

MdlincrementalRegressionLinear モデル オブジェクトです。

各反復で次の手順に従って、インクリメンタル学習と予測を実行します。

  • 100 個の観測値のチャンクを一度に処理することで、データ ストリームをシミュレートします。

  • モデルをデータの入力チャンクにあてはめます。観測値がデータの列に沿うように指定します。前のインクリメンタル モデルを新しいモデルで上書きします。

  • あてはめたモデルとデータの入力チャンクを使用して、応答を予測します。観測値がデータの列に沿うように指定します。

% Preallocation
numObsPerChunk = 100;
n = numel(Y);
nchunk = floor(n/numObsPerChunk);
r = nan(n,1);

figure
h = plot(r);
h.YDataSource = 'r'; 
ylabel('Residuals')
xlabel('Iteration')

% Incremental fitting
for j = 2:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;
    Mdl = fit(Mdl,X(:,idx),Y(idx),'ObservationsIn','columns');
    yhat = predict(Mdl,X(:,idx),'ObservationsIn','columns');
    r(idx) = Y(idx) - yhat;
    refreshdata
    drawnow
end

Mdl は、ストリーム内のすべてのデータを適用させた incrementalRegressionLinear モデル オブジェクトです。

残差は、インクリメンタル学習の全体で 0 を中心に対称的に広がっています。

ロジスティック回帰インクリメンタル学習器を指定し、事後クラス確率を計算します。

人の行動のデータ セットを読み込みます。データをランダムにシャッフルします。

load humanactivity
n = numel(actid);
rng(10); % For reproducibility
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);

データ セットの詳細については、Description を表示してください。

応答は、5 つのクラスのいずれかになります。被験者が移動しているかどうか (actid > 2) を基準に、応答を二分します。

Y = Y > 2;

バイナリ分類用のインクリメンタル ロジスティック回帰モデルを作成します。クラス名、任意の係数、およびバイアス値を指定して predict の準備をします。

p = size(X,2);
Beta = randn(p,1);
Bias = randn(1);
Mdl = incrementalClassificationLinear('Learner','logistic','Beta',Beta,...
    'Bias',Bias,'ClassNames',unique(Y));

MdlincrementalClassificationLinear モデルです。そのプロパティはすべて読み取り専用です。値を指定するための代替手段として、次のいずれかのアクションを実行してモデルを準備できます。

  • データのサブセットで (そのようなデータが利用可能な場合) fitclinear を使用して、バイナリ分類用のロジスティック回帰モデルに学習させます。次に、incrementalLearner を使用して、モデルをインクリメンタル学習器に変換します。

  • fit を使用して、Mdl をデータに漸増的にあてはめます。

データ ストリームをシミュレートし、50 個の観測値の入力チャンクごとに次のアクションを実行します。

  1. predict を呼び出して、分類スコアを予測します。ここで分類スコアは、データの入力チャンクの観測値におけるロジスティック回帰学習器の事後クラス確率です。

  2. perfcurve を呼び出して、データの入力チャンクを使って ROC 曲線 (AUC) 内の範囲を計算し、結果を保存します。

  3. fit を呼び出して、モデルを入力チャンクにあてはめます。前のインクリメンタル モデルを、入力観測値にあてはめた新しいモデルで上書きします。

numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
auc = zeros(nchunk,1);

% Incremental learning
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;    
    [~,posteriorProb] = predict(Mdl,X(idx,:));  
    [~,~,~,auc(j)] = perfcurve(Y(idx),posteriorProb(:,2),Mdl.ClassNames(2));
    Mdl = fit(Mdl,X(idx,:),Y(idx));
end

Mdl は、ストリーム内のすべてのデータを適用させた incrementalClassificationLinear モデル オブジェクトです。

データの入力チャンクに AUC をプロットします。

plot(auc)
ylabel('AUC')
xlabel('Iteration')

AUC は、変化する対象を分類器が正しく予測していることを示しています。

入力引数

すべて折りたたむ

インクリメンタル学習モデル。incrementalClassificationLinear または incrementalRegressionLinear モデル オブジェクトとして指定するか、直接作成するか、または関数 incrementalLearner を使用して、サポートされている従来式の学習済み機械学習モデルを変換して作成します。詳細については、学習問題に対応するリファレンス ページを参照してください。

観測値のバッチでラベルを予測するように Mdl を準備しなければなりません。

  • Mdl が従来式の学習済みモデルに変換される場合、いかなる修正も行うことなくラベルを予測できます。

  • そうでない場合、Mdl が次の基準を満たすように、直接指定するか、fit または updateMetricsAndFit を使用してデータにあてはめなければなりません。

    • MdlincrementalRegressionLinear モデルである場合、そのモデル係数 Mdl.Beta およびバイアス Mdl.Bias は空でない配列でなければなりません。

    • MdlincrementalClassificationLinear モデルである場合、そのモデル係数 Mdl.Beta およびバイアス Mdl.Bias は空でない配列でなければならず、クラス名のセット Mdl.ClassNames は 2 つのクラスを含んでいなければなりません。

    • オブジェクト タイプにかかわらず、関数が予測子データを標準化するようにモデルを構成した場合、予測子の平均 Mdl.Mu および標準偏差 Mdl.Sigma は空でない配列でなければなりません。

ラベルを予測するための予測子データのバッチ。n 個の観測値および Mdl.NumPredictors 予測子変数の浮動小数点行列として指定します。名前と値のペアの引数 'ObservationsIn' の値は、変数と観測値の方向を決定します。

観測値のラベル Y の長さと X の観測値の数は同じでなければなりません。Y(j)X 内の観測値 j (行または列) のラベルです。

メモ

predict は、浮動小数点の入力予測子データのみをサポートしています。入力モデル Mdl がカテゴリカル データにあてはめられた、変換された従来型の学習済みモデルを表す場合、dummyvar を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換し、すべてのダミー変数行列とその他の数値予測子を連結します。詳細は、ダミー変数を参照してください。

データ型: single | double

出力引数

すべて折りたたむ

予測応答またはラベル。n 行 D 列の categorical 配列または文字配列、浮動小数点ベクトル、logical ベクトルまたは string ベクトル、文字ベクトルの cell 配列として返されます。n は X の観測値の数、label(j) は観測値 j の予測応答です。

  • 分類問題の場合、labelMdl.ClassNames に格納されているクラス名と同じデータ型になります。(string 配列は文字ベクトルの cell 配列として扱われます)。

  • 回帰問題の場合、label は浮動小数点ベクトルです。

分類スコアMdlincrementalClassificationLinear モデルの場合、n 行 2 列の浮動小数点行列として返されます。n は X の観測値の数です。score(j,k) は観測値 j をクラス k に分類するスコアです。Mdl.ClassNames はクラスの順序を指定します。

Mdl.Learner'svm' の場合、predict は生の分類スコアを返します。Mdl.Learner'logistic' の場合、分類スコアは事後確率です。

詳細

すべて折りたたむ

分類スコア

バイナリ分類の線形インクリメンタル学習モデルの場合、観測値 x (行ベクトル) を陽性クラスに分類する生の "分類スコア" は次のとおりです。

f(x)=β0+xβ,

  • β0 はスカラー バイアス Mdl.Bias です。

  • β は係数 Mdl.Beta の列ベクトルです。

x を陰性クラスに分類する生の分類スコアは -f(x) です。このソフトウェアでは、スコアが正になるクラスに観測値が分類されます。

線形分類モデルがロジスティック回帰学習器で構成されている場合、このソフトウェアでは 'logit' スコア変換が生の分類スコアに適用されます。

R2020b で導入