Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

loss

学習した特徴量の重みの精度をテスト データに対して評価

説明

err = loss(mdl,Tbl,ResponseVarName) は、モデル mdl、table Tbl 内の予測子の値、および table Tbl 内の変数 ResponseVarName に対する精度の尺度として平均二乗誤差を err に返します。この構文は、mdl が元々は table で学習させたものである場合に使用します。

err = loss(mdl,Tbl,Y) は、モデル mdl、table Tbl 内の予測子の値、および Y 内の応答値に対する精度の尺度として平均二乗誤差を err に返します。この構文は、mdl が元々は table で学習させたものである場合に使用します。

err = loss(mdl,X,Y) は、モデル mdl、行列 X 内の予測子の値、および Y 内の応答値に対する精度の尺度として平均二乗誤差を err に返します。この構文は、mdl が元々は数値行列で学習させたものである場合に使用します。

err = loss(___,LossFunction=lossFunc) は、指定された損失関数のタイプに従って精度の尺度を返します。前述の構文の入力引数に加えて、損失関数の仕様を使用します。

入力引数

すべて展開する

回帰用の近傍成分分析モデル。FeatureSelectionNCARegression オブジェクトを指定します。

標本データ。テーブルとして指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。

データ型: table

応答変数の名前。Tbl 内の変数の名前で指定します。table 内の残りの変数は予測子です。

データ型: char | string

予測子変数の値。n 行 p 列の行列として指定します。ここで、n は観測値の数、p はモデルmdl の学習に使用した予測子変数の数です。

データ型: single | double

応答値。長さ n の実数数値ベクトルを指定します。n は観測値の個数です。Y が table Tbl に含まれている場合は省略できます。

データ型: single | double

損失関数のタイプ。次の値のいずれかとして指定します。

損失関数のタイプ説明
'mse'平均二乗誤差
'mad'平均絶対偏差

例: 'LossFunction','mse'

出力引数

すべて展開する

学習した特徴量の重みに対する、小さいほど優秀とする精度の尺度。スカラー値として返されます。精度の尺度は、名前と値のペアの引数 LossFunction を使用して指定できます。

すべて展開する

標本データを読み込みます。

住宅データ [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

バージョン履歴

R2016b で導入