Main Content

predict

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

R2022a 以降

    説明

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

    [label,score] = predict(Mdl,X) は、Mdl が分類用のインクリメンタル学習モデルである場合、すべてのクラスの分類スコアも返します。

    すべて折りたたむ

    従来式の学習済みカーネル モデルを変換してインクリメンタル学習モデルを作成し、両方のモデルを使用して応答を予測します。

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

    load NYCHousing2015

    テーブルから応答変数 SALEPRICE を抽出します。数値安定性を得るために、SALEPRICE1e6 の尺度でスケールします。

    Y = NYCHousing2015.SALEPRICE/1e6;
    NYCHousing2015.SALEPRICE = [];

    この例の計算コストを削減するために、254 個のカテゴリをもつカテゴリカル変数が含まれている NEIGHBORHOOD 列を削除します。

    NYCHousing2015.NEIGHBORHOOD = [];

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

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

    テーブル内の他のすべての数値変数を売価の予測子として扱います。ダミー変数の行列を予測子データの残りに連結します。

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

    カーネル回帰モデルをデータ セット全体に当てはめます。

    Mdl = fitrkernel(X,Y)
    Mdl = 
      RegressionKernel
                  ResponseName: 'Y'
                       Learner: 'svm'
        NumExpansionDimensions: 2048
                   KernelScale: 1
                        Lambda: 1.0935e-05
                 BoxConstraint: 1
                       Epsilon: 0.0549
    
    
    

    Mdl は従来式の学習済みカーネル回帰モデルを表す RegressionKernel モデル オブジェクトです。

    従来式の学習済みカーネル回帰モデルをインクリメンタル学習用のモデルに変換します。

    IncrementalMdl = incrementalLearner(Mdl)
    IncrementalMdl = 
      incrementalRegressionKernel
    
                        IsWarm: 1
                       Metrics: [1x2 table]
             ResponseTransform: 'none'
        NumExpansionDimensions: 2048
                   KernelScale: 1
    
    
    

    IncrementalMdl は、インクリメンタル学習用に準備された incrementalRegressionKernel モデル オブジェクトです。

    関数 incrementalLearner は、モデル パラメーターを、Mdl が学習データから抽出した他の情報と共に渡して、インクリメンタル学習器を初期化します。IncrementalMdl はウォーム (IsWarm1) です。これは、インクリメンタル学習関数がパフォーマンス メトリクスの追跡を開始できることを意味します。

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

    両方のモデルを使用して、すべての観測値の売価を予測します。

    ttyfit = predict(Mdl,X);
    ilyfit = predict(IncrementalMdl,X);
    compareyfit = norm(ttyfit - ilyfit)
    compareyfit = 0
    

    モデルによって生成された近似値の差は 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;

    バイナリ分類用のインクリメンタル ロジスティック回帰モデルを作成します。モデルを最初の 10 個の観測値に当てはめて predict 用に準備します。

    Mdl = incrementalClassificationKernel(Learner="logistic");
    initobs = 10;
    Mdl = fit(Mdl,X(1:initobs,:),Y(1:initobs));

    MdlincrementalClassificationKernel モデルです。そのプロパティはすべて読み取り専用です。

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

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

    2. rocmetricsを呼び出して、分類スコアを使って ROC 曲線の下の領域 (AUC) を計算し、結果を保存します。

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

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

    Mdl は、ストリーム内のすべてのデータで学習させた incrementalClassificationKernel モデル オブジェクトです。

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

    plot(auc)
    xlim([0 nchunk])
    ylabel("AUC")
    xlabel("Iteration")

    Figure contains an axes object. The axes object with xlabel Iteration, ylabel AUC contains an object of type line.

    プロットは、分類器がインクリメンタル学習において移動している被験者を正しく予測していることを示しています。

    入力引数

    すべて折りたたむ

    インクリメンタル学習モデル。incrementalClassificationKernel または incrementalRegressionKernel というモデル オブジェクトとして指定します。Mdl は、直接作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner によって変換して作成することもできます。詳細については、対応するリファレンス ページを参照してください。

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

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

    • それ以外の場合、fit または updateMetricsAndFit を使用して Mdl をデータに当てはめる必要があります。

    予測子データのバッチ。n 個の観測値と Mdl.NumPredictors 個の予測子変数で構成される浮動小数点行列として指定します。

    メモ

    predict は、浮動小数点の入力予測子データのみをサポートしています。入力データに categorical データが含まれている場合は、エンコード バージョンの categorical データを準備する必要があります。dummyvar を使用して、各カテゴリカル変数をダミー変数で構成される数値行列に変換します。その後、すべてのダミー変数行列とその他の数値予測子を連結します。詳細については、ダミー変数を参照してください。

    データ型: single | double

    出力引数

    すべて折りたたむ

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

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

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

      関数 predict は、スコアが最高になるクラスに観測値を分類します。観測値のスコアが NaN の場合、関数はこの観測値を、学習ラベルの最大比率を占める多数クラスに分類します。

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

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

    詳細

    すべて折りたたむ

    分類スコア

    バイナリ分類用のカーネル インクリメンタル学習モデルの場合、観測値 x (行ベクトル) を陽性クラス (Mdl.ClassNames の 2 番目のクラス) に分類する生の "分類スコア" は次のとおりです。

    f(x)=β0+T(x)β,

    • T(·) は特徴量を拡張するための観測値の変換です。

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

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

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

    カーネル分類モデルがロジスティック回帰学習器から構成されている場合、"logit" スコア変換が生の分類スコアに適用されます。

    バージョン履歴

    R2022a で導入