predict
R2026b近傍成分分析 (NCA) 回帰モデルの使用による応答の予測
説明
例
標本データを読み込みます。
load robotarm.matrobotarm データ セットには、ロボット アーム シミュレーターの 7168 個の学習観測値、1024 個のテスト観測値、32 個の特徴量が含まれています[1][2]。この例のデータ セットは、元のデータ セットを前処理したものです。この例で使用するデータ セットは、元のデータ セットを前処理したものです。データの前処理では、線形回帰近似で与えられた値を元のデータから除外した後、すべての特徴量を単位分散に対して正規化しています。
既定値の (正則化パラメーター) を使用して、回帰用の近傍成分分析 (NCA) 特徴選択を実行します。
rng(1,"twister") % For reproducibility nca = fsrnca(Xtrain,ytrain,FitMethod="exact",Solver="lbfgs");
選択された値をプロットします。
figure plot(nca.FeatureWeights,"ro") xlabel("Feature Index") ylabel("Feature Weight") grid on

特徴量の重みは半分以上が非ゼロです。テスト セットを性能の尺度として使用し、選択された特徴量を使用して損失を計算します。
L = loss(nca,Xtest,ytest)
L = 0.0837
テスト セットについて予測される応答値を計算し、実際の応答に対してプロットします。
ypred = predict(nca,Xtest); figure plot(ypred,ytest,"bo") axis square grid on xlim([-4 4]) ylim([-4 4]) xlabel("Predicted Response") ylabel("Actual Response")

実際の値に完全に一致すると、45°の直線になります。このプロットでは、予測された応答値と実際の応答値がこの直線の周辺に分布しているように見えます。
性能の改善を試みます。5 分割交差検証を使用して、特徴選択の正則化パラメーター を調整します。 の調整とは、回帰損失が最小になる の値を求めることを意味します。
はじめに、データを 5 つの分割に分割します。各分割について、cvpartition は各データの 4/5 を学習セットとして、1/5 をテスト セットとして割り当てます。
n = length(ytrain); cvp = cvpartition(length(ytrain),KFold=5); numvalidsets = cvp.NumTestSets;
探索用の の値を割り当てます。応答値に定数を乗算すると、損失関数項はその定数倍になります。したがって、係数 std(ytrain) を の値に含めると、目的関数で既定の損失関数 ("mad"、平均絶対偏差) 項と正則化項のバランスがとれます。この例では、読み込んだ標本データは元のデータ セットを前処理したバージョンなので、係数 std(ytrain) は 1 です。
lambdavals = linspace(0,50,20)*std(ytrain)/n;
損失値を格納する配列を作成します。
lossvals = zeros(length(lambdavals),numvalidsets);
各分割の学習セットを使用して、 の各値について NCA モデルに学習させます。NCA モデルを使用して分割内の対応するテスト セットの回帰損失を計算し、損失の値を記録します。このプロセスを の各値および各分割に対して繰り返します。
for i = 1:length(lambdavals) for k = 1:numvalidsets X = Xtrain(cvp.training(k),:); y = ytrain(cvp.training(k),:); Xvalid = Xtrain(cvp.test(k),:); yvalid = ytrain(cvp.test(k),:); nca = fsrnca(X,y,FitMethod="exact", ... Solver="minibatch-lbfgs",Lambda=lambdavals(i), ... GradientTolerance=1e-4,IterationLimit=30); lossvals(i,k) = loss(nca,Xvalid,yvalid,LossFunction="mse"); end end
の各値について、分割から得られる平均損失を計算します。
meanloss = mean(lossvals,2);
平均損失と の値をプロットします。
figure plot(lambdavals,meanloss,"ro-") xlabel("Lambda") ylabel("Loss (MSE)") grid on

損失の値が最小になる の値を求めます。
[~,idx] = min(meanloss)
idx = 17
bestlambda = lambdavals(idx)
bestlambda = 0.0059
bestloss = meanloss(idx)
bestloss = 0.0590
最適な の値を使用して、回帰用の NCA 特徴選択モデルを当てはめます。
nca2 = fsrnca(Xtrain,ytrain,FitMethod="exact", ... Solver="lbfgs",Lambda=bestlambda);
選択された特徴量をプロットします。
figure plot(nca2.FeatureWeights,"ro") xlabel("Feature Index") ylabel("Feature Weight") grid on

特徴量の重みはほとんどがゼロになります。fsrnca は、最も関連性がある 4 つの特徴量を特定しています。
テスト セットの損失を計算します。
L = loss(nca2,Xtest,ytest)
L = 0.0571
正則化パラメーター の調整により、無関係な特徴量がさらに除外され、性能が向上します。
予測された応答値とテスト セット内の実際の応答値をプロットします。
ypred = predict(nca2,Xtest); figure plot(ypred,ytest,"bo") axis square grid on xlim([-4 4]) ylim([-4 4]) xlabel("Predicted Response") ylabel("Actual Response")

予測された応答値は、実際の値に近いように見えます。
入力引数
回帰用の近傍成分分析モデル。FeatureSelectionNCARegression オブジェクトとして指定します。
予測子変数の値。table または n 行 p 列の行列として指定します。ここで、n は観測値の数、p は mdl の学習に使用した予測子変数の数です。既定では、X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
数値行列の場合
Xの列に含まれている変数の順序は、mdlに学習させた予測子変数の順序と同じでなければなりません。table (たとえば
Tbl) を使用してmdlに学習させる場合、Tblに含まれている予測子変数が数値のみであれば、Xを数値行列にすることができます。学習時にTbl内の数値予測子をカテゴリカルとして扱うには、fsrncaの名前と値の引数CategoricalPredictorsを使用してカテゴリカル予測子を指定します。Tblに種類の異なる予測子変数 (数値と categorical データ型など) が混在し、Xが数値行列である場合、predictでエラーがスローされます。
table の場合
Xには、モデルの学習に使用したすべての予測子が含まれていなければなりません。predictは、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。table (たとえば
Tbl) を使用してmdlに学習させる場合、X内のすべての予測子変数の変数名およびデータ型がmdlに学習させた (mdl.PredictorNamesに格納されている) 変数と同じでなければなりません。ただし、Xの列の順序がTblの列の順序に対応する必要はありません。また、TblとXに追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predictはこれらを無視します。数値行列を使用して
mdlに学習させる場合、mdl.PredictorNames内の予測子名とX内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定するには、fsrncaの名前と値の引数CategoricalPredictorsを使用します。X内の予測子変数はすべて数値ベクトルでなければなりません。Xに追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predictはこれらを無視します。
データ型: table | single | double
出力引数
予測した応答の値。n 行 1 列のベクトルとして返されます。ここで、n は観測値の数です。
バージョン履歴
R2016b で導入
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)