このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
loss
学習した特徴量の重みの精度をテスト データに対して評価
構文
説明
は、table err
= loss(mdl
,Tbl
,ResponseVarName
)Tbl
内の予測子と table Tbl
内の変数 ResponseVarName
に対するモデル mdl
の誤分類誤差を計算します。この構文は、mdl
が元々は table で学習させたものである場合に使用します。
例
分類用の NCA モデルの調整
標本データを読み込みます。
load("twodimclassdata.mat")
このデータ セットは、[1] で説明されている方法を使用してシミュレートしたものです。これは 2 次元の 2 クラス分類問題です。1 番目のクラス (クラス -1) のデータは、2 つの二変量正規分布 または から同じ確率で抽出されたものです。ここで、、 および です。同様に、2 番目のクラス (クラス 1) のデータは、2 つの二変量正規分布 または から同じ確率で抽出されたものです。ここで、、 および です。このデータ セットの作成に使用した正規分布のパラメーターにより、[1] で使用されているデータよりデータのクラスターが緊密になります。
クラス別にグループ化したデータの散布図を作成します。
gscatter(X(:,1),X(:,2),y) xlabel("x1") ylabel("x2")
100 個の無関係な特徴量を に追加します。はじめに、平均が 0、分散が 20 の正規分布からデータを生成します。
n = size(X,1);
rng("default")
XwithBadFeatures = [X,randn(n,100)*sqrt(20)];
すべての点が 0 と 1 の間になるようにデータを正規化します。
XwithBadFeatures = (XwithBadFeatures-min(XwithBadFeatures,[],1))./ ...
range(XwithBadFeatures,1);
X = XwithBadFeatures;
既定値の Lambda
(正則化パラメーター ) を使用して近傍成分分析 (NCA) モデルをデータに当てはめます。LBFGS ソルバーを使用し、収束情報を表示します。
ncaMdl = fscnca(X,y,FitMethod="exact",Verbose=1, ... Solver="lbfgs");
o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe |====================================================================================================| | ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT | |====================================================================================================| | 0 | 9.519258e-03 | 1.494e-02 | 0.000e+00 | | 4.015e+01 | 0.000e+00 | YES | | 1 | -3.093574e-01 | 7.186e-03 | 4.018e+00 | OK | 8.956e+01 | 1.000e+00 | YES | | 2 | -4.809455e-01 | 4.444e-03 | 7.123e+00 | OK | 9.943e+01 | 1.000e+00 | YES | | 3 | -4.938877e-01 | 3.544e-03 | 1.464e+00 | OK | 9.366e+01 | 1.000e+00 | YES | | 4 | -4.964759e-01 | 2.901e-03 | 6.084e-01 | OK | 1.554e+02 | 1.000e+00 | YES | | 5 | -4.972077e-01 | 1.323e-03 | 6.129e-01 | OK | 1.195e+02 | 5.000e-01 | YES | | 6 | -4.974743e-01 | 1.569e-04 | 2.155e-01 | OK | 1.003e+02 | 1.000e+00 | YES | | 7 | -4.974868e-01 | 3.844e-05 | 4.161e-02 | OK | 9.835e+01 | 1.000e+00 | YES | | 8 | -4.974874e-01 | 1.417e-05 | 1.073e-02 | OK | 1.043e+02 | 1.000e+00 | YES | | 9 | -4.974874e-01 | 4.893e-06 | 1.781e-03 | OK | 1.530e+02 | 1.000e+00 | YES | | 10 | -4.974874e-01 | 9.404e-08 | 8.947e-04 | OK | 1.670e+02 | 1.000e+00 | YES | Infinity norm of the final gradient = 9.404e-08 Two norm of the final step = 8.947e-04, TolX = 1.000e-06 Relative infinity norm of the final gradient = 9.404e-08, TolFun = 1.000e-06 EXIT: Local minimum found.
特徴量の重みをプロットします。無関係な特徴量の重みはゼロに非常に近いはずです。
semilogx(ncaMdl.FeatureWeights,"o") xlabel("Feature index") ylabel("Feature weight") grid on
NCA モデルを使用してクラスを予測し、混同行列を計算します。
ypred = predict(ncaMdl,X); confusionchart(y,ypred)
混同行列は、クラス –1 に属しているデータのうち 40 個がクラス –1 に属すという予測を示しています。クラス –1 のデータのうち 60 個は、クラス 1 に属すことが予測されています。同様に、クラス 1 のデータのうち 94 個はクラス 1 に、6 個はクラス –1 に属すことが予測されています。クラス -1 の予測精度が良くありません。
すべての重みがゼロに非常に近くなっています。これは、モデルに学習させるときに使用した の値が大きすぎることを示します。 では、すべての特徴量の重みがゼロに近づきます。したがって、関連がある特徴量を判別するには、ほとんどのケースで正則化パラメーターを調整することが重要です。
5 分割交差検証を使用して、fscnca
を使用する特徴選択用に を調整します。 の調整とは、分類損失が最小になる の値を求めることを意味します。交差検証を使用して を調整するため、以下を行います。
1.データを 5 つの分割に分割します。各分割について、cvpartition
はデータの 4/5 を学習セットとして、1/5 をテスト セットとして割り当てます。さらに各分割について、クラスの比率がほぼ等しい層化区分を cvpartition
で作成します。
cvp = cvpartition(y,"KFold",5);
numtestsets = cvp.NumTestSets;
lambdavalues = linspace(0,2,20)/length(y);
lossvalues = zeros(length(lambdavalues),numtestsets);
2.各分割の学習セットを使用して、 の各値について近傍成分分析 (NCA) モデルに学習させます。
3.NCA モデルを使用して、分割内の対応するテスト セットの分類損失を計算します。損失の値を記録します。
4.このプロセスをすべての分割およびすべての の値に対して繰り返します。
for i = 1:length(lambdavalues) for k = 1:numtestsets % Extract the training set from the partition object Xtrain = X(cvp.training(k),:); ytrain = y(cvp.training(k),:); % Extract the test set from the partition object Xtest = X(cvp.test(k),:); ytest = y(cvp.test(k),:); % Train an NCA model for classification using the training set ncaMdl = fscnca(Xtrain,ytrain,FitMethod="exact", ... Solver="lbfgs",Lambda=lambdavalues(i)); % Compute the classification loss for the test set using the NCA % model lossvalues(i,k) = loss(ncaMdl,Xtest,ytest, ... LossFunction="quadratic"); end end
分割の平均損失値を の値についてプロットします。最小の損失に対応する の値が のテスト済みの値の境界に位置する場合、 の値の範囲を再検討する必要があります。
plot(lambdavalues,mean(lossvalues,2),"o-") xlabel("Lambda values") ylabel("Loss values") grid on
最小の平均損失に対応する の値を求めます。
[~,idx] = min(mean(lossvalues,2)); % Find the index bestlambda = lambdavalues(idx) % Find the best lambda value
bestlambda = 0.0037
最適な の値を使用して、すべてのデータに NCA モデルを当てはめます。LBFGS ソルバーを使用し、収束情報を表示します。
ncaMdl = fscnca(X,y,FitMethod="exact",Verbose=1, ... Solver="lbfgs",Lambda=bestlambda);
o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe |====================================================================================================| | ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT | |====================================================================================================| | 0 | -1.246913e-01 | 1.231e-02 | 0.000e+00 | | 4.873e+01 | 0.000e+00 | YES | | 1 | -3.411330e-01 | 5.717e-03 | 3.618e+00 | OK | 1.068e+02 | 1.000e+00 | YES | | 2 | -5.226111e-01 | 3.763e-02 | 8.252e+00 | OK | 7.825e+01 | 1.000e+00 | YES | | 3 | -5.817731e-01 | 8.496e-03 | 2.340e+00 | OK | 5.591e+01 | 5.000e-01 | YES | | 4 | -6.132632e-01 | 6.863e-03 | 2.526e+00 | OK | 8.228e+01 | 1.000e+00 | YES | | 5 | -6.135264e-01 | 9.373e-03 | 7.341e-01 | OK | 3.244e+01 | 1.000e+00 | YES | | 6 | -6.147894e-01 | 1.182e-03 | 2.933e-01 | OK | 2.447e+01 | 1.000e+00 | YES | | 7 | -6.148714e-01 | 6.392e-04 | 6.688e-02 | OK | 3.195e+01 | 1.000e+00 | YES | | 8 | -6.149524e-01 | 6.521e-04 | 9.934e-02 | OK | 1.236e+02 | 1.000e+00 | YES | | 9 | -6.149972e-01 | 1.154e-04 | 1.191e-01 | OK | 1.171e+02 | 1.000e+00 | YES | | 10 | -6.149990e-01 | 2.922e-05 | 1.983e-02 | OK | 7.365e+01 | 1.000e+00 | YES | | 11 | -6.149993e-01 | 1.556e-05 | 8.354e-03 | OK | 1.288e+02 | 1.000e+00 | YES | | 12 | -6.149994e-01 | 1.147e-05 | 7.256e-03 | OK | 2.332e+02 | 1.000e+00 | YES | | 13 | -6.149995e-01 | 1.040e-05 | 6.781e-03 | OK | 2.287e+02 | 1.000e+00 | YES | | 14 | -6.149996e-01 | 9.015e-06 | 6.265e-03 | OK | 9.974e+01 | 1.000e+00 | YES | | 15 | -6.149996e-01 | 7.763e-06 | 5.206e-03 | OK | 2.919e+02 | 1.000e+00 | YES | | 16 | -6.149997e-01 | 8.374e-06 | 1.679e-02 | OK | 6.878e+02 | 1.000e+00 | YES | | 17 | -6.149997e-01 | 9.387e-06 | 9.542e-03 | OK | 1.284e+02 | 5.000e-01 | YES | | 18 | -6.149997e-01 | 3.250e-06 | 5.114e-03 | OK | 1.225e+02 | 1.000e+00 | YES | | 19 | -6.149997e-01 | 1.574e-06 | 1.275e-03 | OK | 1.808e+02 | 1.000e+00 | YES | |====================================================================================================| | ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT | |====================================================================================================| | 20 | -6.149997e-01 | 5.764e-07 | 6.765e-04 | OK | 2.905e+02 | 1.000e+00 | YES | Infinity norm of the final gradient = 5.764e-07 Two norm of the final step = 6.765e-04, TolX = 1.000e-06 Relative infinity norm of the final gradient = 5.764e-07, TolFun = 1.000e-06 EXIT: Local minimum found.
特徴量の重みをプロットします。
semilogx(ncaMdl.FeatureWeights,"o") xlabel("Feature index") ylabel("Feature weight") grid on
fscnca
は、初めの 2 つの特徴量に関連があり残りはそうではないことを正しく判別します。初めの 2 つの特徴量は単独では情報を与えませんが、一緒にすると正確な分類モデルが得られます。
新しいモデルを使用してクラスを予測し、精度を計算します。
ypred = predict(ncaMdl,X); confusionchart(y,ypred)
混同行列は、クラス -1 の予測精度が改善されたことを示しています。クラス –1 のデータのうち 88 個はクラス –1 に、12 個はクラス 1 に属すことが予測されています。また、クラス 1 のデータのうち 92 個はクラス 1 に、8 個はクラス –1 に属すことが予測されています。
参考文献
[1] Yang, W., K. Wang, W. Zuo."Neighborhood Component Feature Selection for High-Dimensional Data." Journal of Computers. Vol. 7, Number 1, January, 2012.
入力引数
mdl
— 分類用の近傍成分分析モデル
FeatureSelectionNCAClassification
オブジェクト
分類用の近傍成分分析モデル。FeatureSelectionNCAClassification
オブジェクトとして指定します。
Tbl
— 標本データ
テーブル
標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。
データ型: table
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。table 内の残りの変数は予測子です。
データ型: char
| string
X
— 予測子変数の値
n 行 p 列の行列
予測子変数の値。n 行 p 列の行列を指定します。n は観測値の個数、p は予測子変数の個数です。
データ型: single
| double
Y
— クラス ラベル
categorical 配列 | logical ベクトル | 数値ベクトル | string 配列 | 長さ n の文字ベクトルの cell 配列 | n 行の文字行列
クラス ラベル。categorical 配列、logical ベクトル、数値ベクトル、string 配列、長さ n の文字ベクトルの cell 配列、または n 行の文字行列として指定します。n は観測値の数です。Y
の要素 i または行 i は、X
の行 i (観測値 i) に対応するクラス ラベルです。
データ型: single
| double
| logical
| char
| string
| cell
| categorical
lossFunc
— 損失関数のタイプ
"classiferror"
(既定値) | "quadratic"
損失関数のタイプ。次の値のいずれかとして指定します。
"classiferror"
— 次のように定義される 10 進数の誤分類率。は予測されたクラス、 は観測値 i の真のクラスです。 は、 と が同じではないことを示すインジケーターです。
"quadratic"
— 次のように定義される二次損失関数。c はクラスの数、 は i 番目の観測値がクラス k に属する推定確率、 は i 番目の観測値がクラス k に属することを示すインジケーターです。
例: "quadratic"
出力引数
err
— 学習した特徴量の重みに対する、小さいほど優秀とする精度の尺度
スカラー値
学習した特徴量の重みに対する、小さいほど優秀とする精度の尺度。スカラー値として返されます。精度の尺度は、名前と値の引数 LossFunction
を使用して指定することができます。
バージョン履歴
R2016b で導入
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)