predict
線形インクリメンタル学習モデルからの新しい観測の応答予測
構文
説明
例
人の行動のデータ セットを読み込みます。
load humanactivity
データ セットの詳細については、コマンド ラインで Description
を入力してください。
応答は、次の 5 つのクラスのいずれかになります。座る、立つ、歩く、走る、または踊る。被験者が移動しているかどうか (actid
> 2) を基準に、応答を二分します。
Y = actid > 2;
線形分類モデルをデータ セット全体に当てはめます。
TTMdl = fitclinear(feat,Y)
TTMdl = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'none' Beta: [60×1 double] Bias: -0.2005 Lambda: 4.1537e-05 Learner: 'svm' Properties, Methods
TTMdl
は従来式の学習済み線形分類モデルを表す ClassificationLinear
モデル オブジェクトです。
従来式の学習済み線形分類モデルを、インクリメンタル学習用のバイナリ分類線形モデルに変換します。
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationLinear IsWarm: 1 Metrics: [1×2 table] ClassNames: [0 1] ScoreTransform: 'none' Beta: [60×1 double] Bias: -0.2005 Learner: 'svm' Properties, Methods
IncrementalMdl
は、SVM を使用するインクリメンタル学習用に準備された incrementalClassificationLinear
モデル オブジェクトです。
関数
incrementalLearner
は、学習した係数を、TTMdl
が学習データから学習した他の情報と共に渡して、インクリメンタル学習器を初期化します。IncrementalMdl
はウォーム (IsWarm
が1
) です。これは、インクリメンタル学習関数がパフォーマンス メトリクスの追跡を開始できることを意味します。fitclinear
が BFGS ソルバーを使用してTTMdl
に学習させるのに対し、incrementalLearner
は適応型スケール不変ソルバーを使用してモデルに学習させるように構成します。
従来式の学習済みモデルから変換して作成したインクリメンタル学習器は、追加の処理なしで予測を生成できます。
両方のモデルを使用して、すべての観測値のクラス ラベルを予測します。
ttlabels = predict(TTMdl,feat); illables = predict(IncrementalMdl,feat); sameLabels = sum(ttlabels ~= illables) == 0
sameLabels = logical
1
各観測値についての予測ラベルが両方のモデルで同じになります。
予測子データ行列の列に沿って観測値を配置すると、インクリメンタル学習時の効率が向上する可能性があります。
2015 年のニューヨーク市住宅データ セットを読み込み、シャッフルします。このデータの詳細については、NYC Open Data を参照してください。
load NYCHousing2015 rng(1) % For reproducibility n = size(NYCHousing2015,1); shuffidx = randsample(n,n); NYCHousing2015 = NYCHousing2015(shuffidx,:);
table から応答変数 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) = [];
table 内の他のすべての数値変数を売価の線形予測子として扱います。ダミー変数の行列を残りの予測子データに連結し、データを転置して計算を高速化します。
idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform'); X = [dumvarmat NYCHousing2015{:,idxnum}]';
インクリメンタル学習用の線形回帰モデルを推定期間なしで構成します。
Mdl = incrementalRegressionLinear('Learner','leastsquares','EstimationPeriod',0);
Mdl
は incrementalRegressionLinear
モデル オブジェクトです。
各反復で次の手順に従って、インクリメンタル学習と予測を実行します。
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));
Mdl
は incrementalClassificationLinear
モデルです。そのプロパティはすべて読み取り専用です。任意の値を指定する代わりに、次のいずれかのアクションを実行してモデルを準備できます。
データのサブセット (利用可能な場合) で
fitclinear
を使用して、バイナリ分類用のロジスティック回帰モデルに学習させます。次に、incrementalLearner
を使用して、モデルをインクリメンタル学習器に変換します。fit
を使用して、Mdl
をデータに漸増的に当てはめます。
データ ストリームをシミュレートし、50 個の観測値の入力チャンクごとに次のアクションを実行します。
predict
を呼び出して、データの入力チャンクの観測値における分類スコアを予測します。分類スコアは、ロジスティック回帰学習器の事後クラス確率です。rocmetrics
を呼び出して、データの入力チャンクを使って ROC 曲線 (AUC) 内の範囲を計算し、結果を保存します。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,:)); rocObj = rocmetrics(Y(idx),posteriorProb,Mdl.ClassNames); auc(j) = rocObj.AUC(1); Mdl = fit(Mdl,X(idx,:),Y(idx)); end
Mdl
は、ストリーム内のすべてのデータで学習させた incrementalClassificationLinear
モデル オブジェクトです。
データの入力チャンクに AUC をプロットします。
plot(auc) ylabel('AUC') xlabel('Iteration')
プロットは、分類器がインクリメンタル学習において移動している被験者を正しく予測していることを示しています。
入力引数
インクリメンタル学習モデル。incrementalClassificationLinear
または incrementalRegressionLinear
というモデル オブジェクトとして指定します。Mdl
は、直接作成することも、サポートされている従来式の学習済み機械学習モデルを関数 incrementalLearner
によって変換して作成することもできます。詳細については、対応するリファレンス ページを参照してください。
観測値のバッチでラベルを予測するように Mdl
を構成しなければなりません。
Mdl
が従来式の学習済みモデルから変換されたモデルの場合、いかなる修正も行うことなくラベルを予測できます。そうでない場合、
Mdl
が次の基準を満たすように、直接指定するか、fit
またはupdateMetricsAndFit
を使用してMdl
をデータに当てはめなければなりません。Mdl
がincrementalRegressionLinear
モデルである場合、そのモデル係数Mdl.Beta
およびバイアスMdl.Bias
は空でない配列でなければなりません。Mdl
がincrementalClassificationLinear
モデルである場合、そのモデル係数Mdl.Beta
およびバイアスMdl.Bias
は空でない配列でなければならず、Mdl.ClassNames
のクラス名に 2 つのクラスが含まれていなければなりません。オブジェクト タイプにかかわらず、関数が予測子データを標準化するようにモデルを構成する場合、予測子の平均
Mdl.Mu
および標準偏差Mdl.Sigma
は空でない配列でなければなりません。
ラベルを予測するための予測子データのバッチ。n 個の観測値および Mdl.NumPredictors
予測子変数の浮動小数点行列として指定します。dimension
の値は、変数と観測値の方向を決定します。
データ型: single
| double
予測子データにおける観測値の次元。'columns'
または 'rows'
として指定します。
例: 'ObservationsIn','columns'
データ型: char
| string
出力引数
予測応答 (ラベル)。n 行の categorical 配列または文字配列、浮動小数点ベクトル、logical ベクトルまたは string ベクトル、文字ベクトルの cell 配列として返されます。n は X
の観測値の数、label(
は観測値 j
)
の予測応答です。j
回帰問題の場合、
label
は浮動小数点ベクトルです。分類問題の場合、
label
はMdl.ClassNames
に格納されているクラス名と同じデータ型になります。(string 配列は文字ベクトルの cell 配列として扱われます)。関数
predict
は、スコアが最高になるクラスに観測値を分類します。観測値のスコアがNaN
の場合、関数はこの観測値を、学習ラベルの最大比率を占める多数クラスに分類します。
詳細
バイナリ分類の線形インクリメンタル学習モデルの場合、観測値 x (行ベクトル) を陽性クラスに分類する生の "分類スコア" は次のとおりです。
β0 はスカラー バイアス
Mdl.Bias
です。β は係数
Mdl.Beta
の列ベクトルです。
x を陰性クラスに分類する生の分類スコアは -f(x) です。このソフトウェアでは、スコアが正になるクラスに観測値が分類されます。
線形分類モデルがロジスティック回帰学習器で構成されている場合、このソフトウェアでは 'logit'
スコア変換が生の分類スコアに適用されます。
拡張機能
使用上の注意および制限:
saveLearnerForCoder
、loadLearnerForCoder
およびcodegen
(MATLAB Coder) を使用して、関数predict
のコードを生成します。saveLearnerForCoder
を使用して、学習済みモデルを保存します。loadLearnerForCoder
を使用して保存済みモデルを読み込んで関数predict
を呼び出す、エントリポイント関数を定義します。次に、codegen
を使用して、エントリポイント関数のコードを生成します。predict
の単精度の C/C++ コードを生成するには、loadLearnerForCoder
関数を呼び出すときにDataType="single"
を指定します。次の表は、
predict
の引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。引数 注意と制限 Mdl
モデル オブジェクトの使用上の注意および制限については、
incrementalClassificationLinear
またはincrementalRegressionLinear
を参照してください。X
バッチ間の観測値の数は可変サイズにすることができます。
予測子変数の数は
Mdl.NumPredictors
と等しくなければなりません。X
はsingle
またはdouble
でなければなりません。
次の制限が適用されます。
データをシャッフルするように
Mdl
を構成した場合 (Mdl.Shuffle
がtrue
であるか、Mdl.Solver
が'sgd'
または'asgd'
)、関数predict
は、モデルをバッチに当てはめる前に観測値の各入力バッチを無作為にシャッフルします。シャッフルされた観測値の順序は、MATLAB® で生成される順序と一致しないことがあります。したがって、予測を生成する前にMdl
を当てはめた場合、MATLAB で計算される予測と生成コードで計算される予測が等しくならない場合があります。浮動小数点の入力引数およびオブジェクト プロパティには、すべて同質なデータ型を使用します。具体的には、
single
またはdouble
のいずれかです。
詳細は、コード生成の紹介を参照してください。
バージョン履歴
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)