loss
クラス: FeatureSelectionNCARegression
学習した特徴量の重みの精度を検定データに対して評価
構文
err = loss(mdl,X,Y)
err = loss(mdl,X,Y,Name,Value)
説明
は、モデル err
= loss(mdl
,X
,Y
)mdl
、X
内の予測子の値、および Y
内の応答値に対する精度の尺度として平均二乗誤差を err
に返します。
は、err
= loss(mdl
,X
,Y
,Name,Value
)Name,Value
ペア引数で指定された追加オプションを使用して、精度の尺度 err
を返します。
入力引数
mdl
— 回帰用の近傍成分分析モデル
FeatureSelectionNCARegression
オブジェクト
回帰用の近傍成分分析モデル。FeatureSelectionNCARegression
オブジェクトを指定します。
X
— 予測子変数の値
n 行 p 列の行列
予測子変数の値。n 行 p 列の行列を指定します。n は観測値の個数、p は予測子変数の個数です。
データ型: single
| double
Y
— 応答値
長さ n の実数数値ベクトル
応答値。長さ n の実数数値ベクトルを指定します。n は観測値の個数です。
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
LossFunction
— 損失関数のタイプ
'mse'
(既定値) | 'mad'
損失関数のタイプ。'Loss Function'
と次のいずれかから構成されるコンマ区切りのペアとして指定します。
損失関数のタイプ | 説明 |
---|---|
'mse' | 平均二乗誤差 |
'mad' | 平均絶対偏差 |
例: 'LossFunction','mse'
出力引数
err
— 学習した特徴量の重みに対する、小さいほど優秀とする精度の尺度
スカラー値
学習した特徴量の重みに対する、小さいほど優秀とする精度の尺度。スカラー値として返されます。精度の尺度は、名前と値のペアの引数 LossFunction
を使用して指定できます。
例
loss
と predict
の使用による回帰用の NCA モデルの調整
標本データを読み込みます。
住宅データ [1] を UCI Machine Learning Repository [2] からダウンロードします。このデータセットには、506 個の観測値が含まれています。最初の 13 列には予測子の値が、最後の列には応答値が含まれています。目標は、ボストン郊外にある持ち家の数の中央値を 13 個の予測子の関数として予測することです。
データを読み込み、応答ベクトルと予測子行列を定義します。
load('housing.data');
X = housing(:,1:13);
y = housing(:,end);
層化区分のグループ化変数として 4 番目の予測子を使用して、データを学習セットと検定セットに分割します。これにより、各グループから同じ量の観測値が各分割に含まれることが保証されます。
rng(1) % For reproducibility cvp = cvpartition(X(:,4),'Holdout',56); Xtrain = X(cvp.training,:); ytrain = y(cvp.training,:); Xtest = X(cvp.test,:); ytest = y(cvp.test,:);
cvpartition
は、56 個の観測値を検定セットに、残りのデータを学習セットに無作為に割り当てます。
既定設定の使用による特徴選択の実行
回帰用の NCA モデルを使用して特徴選択を実行します。予測子の値を標準化します。
nca = fsrnca(Xtrain,ytrain,'Standardize',1);
特徴量の重みをプロットします。
figure()
plot(nca.FeatureWeights,'ro')
無関係な特徴量の重みはゼロに近くなると考えられます。fsrnca
は、2 つの特徴量が無関係であると特定しています。
回帰損失を計算します。
L = loss(nca,Xtest,ytest,'LossFunction','mad')
L = 2.5394
検定セットについて予測される応答値を計算し、実際の応答に対してプロットします。
ypred = predict(nca,Xtest); figure() plot(ypred,ytest,'bo') xlabel('Predicted response') ylabel('Actual response')
実際の値に完全に一致すると、45°の直線になります。このプロットでは、予測された応答値と実際の応答値がこの直線の周辺に分布しているように見えます。通常は、 (正則化パラメーター) の値を調整すると、性能の改善に役立ちます。
10 分割交差検証の使用による正則化パラメーターの調整
の調整とは、回帰損失が最小になる の値を求めることを意味します。10 分割の交差検証を使用して を調整する手順は次のようになります。
1.はじめに、データを 10 個の分割に分割します。各分割について、cvpartition
はデータの 1/10 を学習セットとして、9/10 を検定セットとして割り当てます。
n = length(ytrain);
cvp = cvpartition(Xtrain(:,4),'kfold',10);
numvalidsets = cvp.NumTestSets;
探索用の の値を割り当てます。損失値を格納する配列を作成します。
lambdavals = linspace(0,2,30)*std(ytrain)/n; lossvals = zeros(length(lambdavals),numvalidsets);
2.各分割の学習セットを使用して、 の各値について近傍成分分析 (NCA) モデルに学習をさせます。
3.選択された特徴量を使用して、ガウス過程回帰 (GPR) モデルを当てはめます。次に、この GPR モデルを使用して、分割内の対応する検定セットの回帰損失を計算します。損失の値を記録します。
4.これを の各値および各分割に対して繰り返します。
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',... 'Lambda',lambdavals(i),... 'Standardize',1,'LossFunction','mad'); % Select features using the feature weights and a relative % threshold. tol = 1e-3; selidx = nca.FeatureWeights > tol*max(1,max(nca.FeatureWeights)); % Fit a non-ARD GPR model using selected features. gpr = fitrgp(X(:,selidx),y,'Standardize',1,... 'KernelFunction','squaredexponential','Verbose',0); lossvals(i,k) = loss(gpr,Xvalid(:,selidx),yvalid); end end
の各値について、分割から得られる平均損失を計算します。平均損失と の値をプロットします。
meanloss = mean(lossvals,2); figure; plot(lambdavals,meanloss,'ro-'); xlabel('Lambda'); ylabel('Loss (MSE)'); grid on;
損失値が最小になる の値を求めます。
[~,idx] = min(meanloss); bestlambda = lambdavals(idx)
bestlambda = 0.0251
最良の 値を使用して回帰用の特徴選択を実行します。予測子の値を標準化します。
nca2 = fsrnca(Xtrain,ytrain,'Standardize',1,'Lambda',bestlambda,... 'LossFunction','mad');
特徴量の重みをプロットします。
figure()
plot(nca.FeatureWeights,'ro')
特徴量の選択には使用されなかった検定データに対して新しい NCA モデルを使用して、損失を計算します。
L2 = loss(nca2,Xtest,ytest,'LossFunction','mad')
L2 = 2.0560
正則化パラメーターの調整は、関連がある特徴量を識別して損失を減らすために役立ちます。
予測された応答値と検定セット内の実際の応答値をプロットします。
ypred = predict(nca2,Xtest);
figure;
plot(ypred,ytest,'bo');
予測された応答値は、実際の値に十分近いように見えます。
参考文献
[1] Harrison, D. and D.L., Rubinfeld. "Hedonic prices and the demand for clean air." J. Environ. Economics & Management. Vol.5, 1978, pp. 81-102.
[2] Lichman, M. UCI Machine Learning Repository, Irvine, CA:University of California, School of Information and Computer Science, 2013. https://archive.ics.uci.edu/ml
バージョン履歴
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)