ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fsrnca

回帰に近傍成分分析を使用する特徴選択

構文

mdl = fsrnca(X,Y)
mdl = fsrnca(X,Y,Name,Value)

説明

mdl = fsrnca(X,Y) は、X 内の予測子と Y 内の応答を使用して、回帰用の特徴選択を実行します。

fsrnca は、正則化がある近傍成分分析 (NCA) を対角的に適用することにより、特徴量の重みを学習します。

mdl = fsrnca(X,Y,Name,Value) は、前の構文のいずれかを使用し、1 つ以上の名前と値のペアの引数で指定されたオプションを追加して、回帰用の特徴選択を実行します。

すべて折りたたむ

応答変数が 3、9 および 15 番目の予測子に依存する遊びのデータを生成します。

rng(0,'twister'); % For reproducibility
N = 100;
X = rand(N,20);
y = 1 + X(:,3)*5 + sin(X(:,9)./X(:,15) + 0.25*randn(N,1));

回帰用の近傍成分分析モデルをあてはめます。

mdl = fsrnca(X,y,'Verbose',1,'Lambda',0.5/N);
 o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe

|====================================================================================================|
|   ITER   |   FUN VALUE   |  NORM GRAD  |  NORM STEP  |  CURV  |    GAMMA    |    ALPHA    | ACCEPT |
|====================================================================================================|
|        0 |  1.636932e+00 |   3.688e-01 |   0.000e+00 |        |   1.627e+00 |   0.000e+00 |   YES  |
|        1 |  8.304833e-01 |   1.083e-01 |   2.449e+00 |    OK  |   9.194e+00 |   4.000e+00 |   YES  |
|        2 |  7.548105e-01 |   1.341e-02 |   1.164e+00 |    OK  |   1.095e+01 |   1.000e+00 |   YES  |
|        3 |  7.346997e-01 |   9.752e-03 |   6.383e-01 |    OK  |   2.979e+01 |   1.000e+00 |   YES  |
|        4 |  7.053407e-01 |   1.605e-02 |   1.712e+00 |    OK  |   5.809e+01 |   1.000e+00 |   YES  |
|        5 |  6.970502e-01 |   9.106e-03 |   8.818e-01 |    OK  |   6.223e+01 |   1.000e+00 |   YES  |
|        6 |  6.952347e-01 |   5.522e-03 |   6.382e-01 |    OK  |   3.280e+01 |   1.000e+00 |   YES  |
|        7 |  6.946302e-01 |   9.102e-04 |   1.952e-01 |    OK  |   3.380e+01 |   1.000e+00 |   YES  |
|        8 |  6.945037e-01 |   6.557e-04 |   9.942e-02 |    OK  |   8.490e+01 |   1.000e+00 |   YES  |
|        9 |  6.943908e-01 |   1.997e-04 |   1.756e-01 |    OK  |   1.124e+02 |   1.000e+00 |   YES  |
|       10 |  6.943785e-01 |   3.478e-04 |   7.755e-02 |    OK  |   7.621e+01 |   1.000e+00 |   YES  |
|       11 |  6.943728e-01 |   1.428e-04 |   3.416e-02 |    OK  |   3.649e+01 |   1.000e+00 |   YES  |
|       12 |  6.943711e-01 |   1.128e-04 |   1.231e-02 |    OK  |   6.092e+01 |   1.000e+00 |   YES  |
|       13 |  6.943688e-01 |   1.066e-04 |   2.326e-02 |    OK  |   9.319e+01 |   1.000e+00 |   YES  |
|       14 |  6.943655e-01 |   9.324e-05 |   4.399e-02 |    OK  |   1.810e+02 |   1.000e+00 |   YES  |
|       15 |  6.943603e-01 |   1.206e-04 |   8.823e-02 |    OK  |   4.609e+02 |   1.000e+00 |   YES  |
|       16 |  6.943582e-01 |   1.701e-04 |   6.669e-02 |    OK  |   8.425e+01 |   5.000e-01 |   YES  |
|       17 |  6.943552e-01 |   5.160e-05 |   6.473e-02 |    OK  |   8.832e+01 |   1.000e+00 |   YES  |
|       18 |  6.943546e-01 |   2.477e-05 |   1.215e-02 |    OK  |   7.925e+01 |   1.000e+00 |   YES  |
|       19 |  6.943546e-01 |   1.077e-05 |   6.086e-03 |    OK  |   1.378e+02 |   1.000e+00 |   YES  |

|====================================================================================================|
|   ITER   |   FUN VALUE   |  NORM GRAD  |  NORM STEP  |  CURV  |    GAMMA    |    ALPHA    | ACCEPT |
|====================================================================================================|
|       20 |  6.943545e-01 |   2.260e-05 |   4.071e-03 |    OK  |   5.856e+01 |   1.000e+00 |   YES  |
|       21 |  6.943545e-01 |   4.250e-06 |   1.109e-03 |    OK  |   2.964e+01 |   1.000e+00 |   YES  |
|       22 |  6.943545e-01 |   1.916e-06 |   8.356e-04 |    OK  |   8.649e+01 |   1.000e+00 |   YES  |
|       23 |  6.943545e-01 |   1.083e-06 |   5.270e-04 |    OK  |   1.168e+02 |   1.000e+00 |   YES  |
|       24 |  6.943545e-01 |   1.791e-06 |   2.673e-04 |    OK  |   4.016e+01 |   1.000e+00 |   YES  |
|       25 |  6.943545e-01 |   2.596e-07 |   1.111e-04 |    OK  |   3.154e+01 |   1.000e+00 |   YES  |

         Infinity norm of the final gradient = 2.596e-07
              Two norm of the final step     = 1.111e-04, TolX   = 1.000e-06
Relative infinity norm of the final gradient = 2.596e-07, TolFun = 1.000e-06
EXIT: Local minimum found.

選択された特徴量をプロットします。無関連性な特徴量の重みはゼロに近いはずです。

figure()
plot(mdl.FeatureWeights,'ro')
grid on
xlabel('Feature index')
ylabel('Feature weight')

fsrnca は、この応答に対して、関連する予測子を正しく判別しています。

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

load robotarm.mat

robotarm データセット (pumadyn32nm) は、ロボット アーム シミュレータを使用して作成されており、7168 個の学習観測値、1024 個のテスト観測値、32 個の特徴量が含まれています [1][2]。これは、オリジナルのデータセットを前処理したものです。データの前処理では、線形回帰近似を除外してから、すべての特徴量を単位分散に対して正規化しています。

既定値の (正則化パラメーター) を使用して、回帰用の近傍成分分析 (NCA) 特徴選択を実行します。

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

性能の改善を試みます。5 分割交差検証を使用して、特徴選択の正則化パラメーター を調整します。 の調整とは、回帰損失が最小になる の値を求めることを意味します。交差検証を使用して を調整するため、以下を行います。

1.データを 5 つの分割に分割します。各分割について、cvpartition は各データの 4/5 を学習セットとして、1/5 をテスト セットとして割り当てます。

rng(1) % For reproducibility
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);

2.各分割の学習セットを使用して、 の各値について NCA モデルに学習をさせます。

3.NCA モデルを使用して、分割内の対応するテスト セットの回帰損失を計算します。損失の値を記録します。

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', ...
             '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)

bestlambda = lambdavals(idx)
bestloss = meanloss(idx)
idx =

    17


bestlambda =

    0.0059


bestloss =

    0.0590

最良の の値を使用して、回帰用の NCA 特徴選択モデルをあてはめます。

nca = fsrnca(Xtrain,ytrain,'FitMethod','exact', ...
    'Solver','lbfgs','Lambda',bestlambda);

選択された特徴量をプロットします。

figure
plot(nca.FeatureWeights,'ro')
xlabel('Feature Index')
ylabel('Feature Weight')
grid on

特徴量の重みはほとんどがゼロになります。fsrnca は、最も関連性がある 4 つの特徴量を特定しています。

テスト セットの損失を計算します。

L = loss(nca,Xtest,ytest)
L =

    0.0571

正則化パラメーター の調整により、無関係な特徴量がさらに除外され、性能が向上しました。

この例では、UCI Machine Learning Repository[5]にあるアワビのデータ[3][4]を使用します。データをダウンロードして、'abalone.data' という名前で現在のフォルダに保存します。

データをテーブルに格納します。最初の 7 行を表示します。

tbl = readtable('abalone.data','Filetype','text','ReadVariableNames',false);
tbl.Properties.VariableNames = {'Sex','Length','Diameter','Height', ...
    'WWeight','SWeight','VWeight','ShWeight','NoShellRings'};
tbl(1:7,:)
ans =

  7×9 table

    Sex    Length    Diameter    Height    WWeight    SWeight    VWeight    ShWeight    NoShellRings
    ___    ______    ________    ______    _______    _______    _______    ________    ____________

    'M'    0.455     0.365       0.095      0.514     0.2245      0.101      0.15       15          
    'M'     0.35     0.265        0.09     0.2255     0.0995     0.0485      0.07        7          
    'F'     0.53      0.42       0.135      0.677     0.2565     0.1415      0.21        9          
    'M'     0.44     0.365       0.125      0.516     0.2155      0.114     0.155       10          
    'I'     0.33     0.255        0.08      0.205     0.0895     0.0395     0.055        7          
    'I'    0.425       0.3       0.095     0.3515      0.141     0.0775      0.12        8          
    'F'     0.53     0.415        0.15     0.7775      0.237     0.1415      0.33       20          

このデータセットには、4177 個の観測値が含まれています。目標は、8 つの物理的な測定値からアワビの年齢を予測することです。最後の変数は貝殻の輪の数で、アワビの年齢を示します。最初の予測子は、カテゴリカル変数です。テーブルの最後の変数は、応答変数です。

fsrnca 用に予測子変数と応答変数を準備します。tbl の最後の列には、応答変数である貝殻の輪の数が含まれています。1 番目の予測子変数 sex はカテゴリカルです。ダミー変数を作成しなければなりません。

y = table2array(tbl(:,end));
X(:,1:3) = dummyvar(categorical(tbl.Sex));
X = [X,table2array(tbl(:,2:end-1))];

4 分割の交差検証を使用して、NCA モデルの正則化パラメーターを調整します。はじめに、データを 4 つの分割に分割します。

rng('default') % For reproducibility
n = length(y);
cvp = cvpartition(n,'kfold',4);
numtestsets = cvp.NumTestSets;

cvpartition はデータを 4 つの分割に分割します。各分割で、データの約 3/4 が学習セットとして、1/4 がテスト セットとして割り当てられます。

最適な (正則化パラメーター) の値を決定するため、さまざまな値の を生成してモデルをあてはめます。各あてはめから損失を収集するためのベクトルを作成します。

lambdavals = linspace(0,25,20)*std(y)/n;
lossvals = zeros(length(lambdavals),numtestsets);

lossvals の行は の値に、列は分割に対応します。

の各値を使用した各分割のデータに、fsrnca を使用した回帰用の NCA モデルをあてはめます。各分割のテスト データを使用して、各モデルの損失を計算します。

for i = 1:length(lambdavals)
   for k = 1:numtestsets
       Xtrain = X(cvp.training(k),:);
       ytrain = y(cvp.training(k),:);
       Xtest = X(cvp.test(k),:);
       ytest = y(cvp.test(k),:);

       nca = fsrnca(Xtrain,ytrain,'FitMethod','exact', ...
				 'Solver','lbfgs','Lambda',lambdavals(i),'Standardize',true);

       lossvals(i,k) = loss(nca,Xtest,ytest,'LossFunction','mse');
    end
end

分割の平均損失を計算します。つまり、lossvals の 2 番目の次元で平均を計算します。

meanloss = mean(lossvals,2);

4 分割による平均損失に対して をプロットします。

figure
plot(lambdavals,meanloss,'ro-')
xlabel('Lambda')
ylabel('Loss (MSE)')
grid on

平均損失が最小になる の値を求めます。

[~,idx] = min(meanloss);
bestlambda = lambdavals(idx)
bestlambda =

    0.0071

最良の損失値を計算します。

bestloss = meanloss(idx)
bestloss =

    4.7799

最適な の値を使用して、すべてのデータに NCA モデルをあてはめます。

nca = fsrnca(X,y,'FitMethod','exact','Solver','lbfgs', ...
    'Verbose',1,'Lambda',bestlambda,'Standardize',true);
 o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe

|====================================================================================================|
|   ITER   |   FUN VALUE   |  NORM GRAD  |  NORM STEP  |  CURV  |    GAMMA    |    ALPHA    | ACCEPT |
|====================================================================================================|
|        0 |  2.469168e+00 |   1.266e-01 |   0.000e+00 |        |   4.741e+00 |   0.000e+00 |   YES  |
|        1 |  2.375166e+00 |   8.265e-02 |   7.268e-01 |    OK  |   1.054e+01 |   1.000e+00 |   YES  |
|        2 |  2.293528e+00 |   2.067e-02 |   2.034e+00 |    OK  |   1.569e+01 |   1.000e+00 |   YES  |
|        3 |  2.286703e+00 |   1.031e-02 |   3.158e-01 |    OK  |   2.213e+01 |   1.000e+00 |   YES  |
|        4 |  2.279928e+00 |   2.023e-02 |   9.374e-01 |    OK  |   1.953e+01 |   1.000e+00 |   YES  |
|        5 |  2.276258e+00 |   6.884e-03 |   2.497e-01 |    OK  |   1.439e+01 |   1.000e+00 |   YES  |
|        6 |  2.274358e+00 |   1.792e-03 |   4.010e-01 |    OK  |   3.109e+01 |   1.000e+00 |   YES  |
|        7 |  2.274105e+00 |   2.412e-03 |   2.399e-01 |    OK  |   3.557e+01 |   1.000e+00 |   YES  |
|        8 |  2.274073e+00 |   1.459e-03 |   7.684e-02 |    OK  |   1.356e+01 |   1.000e+00 |   YES  |
|        9 |  2.274050e+00 |   3.733e-04 |   3.797e-02 |    OK  |   1.725e+01 |   1.000e+00 |   YES  |
|       10 |  2.274043e+00 |   2.750e-04 |   1.379e-02 |    OK  |   2.445e+01 |   1.000e+00 |   YES  |
|       11 |  2.274027e+00 |   2.682e-04 |   5.701e-02 |    OK  |   7.386e+01 |   1.000e+00 |   YES  |
|       12 |  2.274020e+00 |   1.712e-04 |   4.107e-02 |    OK  |   9.461e+01 |   1.000e+00 |   YES  |
|       13 |  2.274014e+00 |   2.633e-04 |   6.720e-02 |    OK  |   7.469e+01 |   1.000e+00 |   YES  |
|       14 |  2.274012e+00 |   9.818e-05 |   2.263e-02 |    OK  |   3.275e+01 |   1.000e+00 |   YES  |
|       15 |  2.274012e+00 |   4.220e-05 |   6.188e-03 |    OK  |   2.799e+01 |   1.000e+00 |   YES  |
|       16 |  2.274012e+00 |   2.859e-05 |   4.979e-03 |    OK  |   6.628e+01 |   1.000e+00 |   YES  |
|       17 |  2.274011e+00 |   1.582e-05 |   6.767e-03 |    OK  |   1.439e+02 |   1.000e+00 |   YES  |
|       18 |  2.274011e+00 |   7.623e-06 |   4.311e-03 |    OK  |   1.211e+02 |   1.000e+00 |   YES  |
|       19 |  2.274011e+00 |   3.038e-06 |   2.528e-04 |    OK  |   1.798e+01 |   5.000e-01 |   YES  |

|====================================================================================================|
|   ITER   |   FUN VALUE   |  NORM GRAD  |  NORM STEP  |  CURV  |    GAMMA    |    ALPHA    | ACCEPT |
|====================================================================================================|
|       20 |  2.274011e+00 |   6.710e-07 |   2.325e-04 |    OK  |   2.721e+01 |   1.000e+00 |   YES  |

         Infinity norm of the final gradient = 6.710e-07
              Two norm of the final step     = 2.325e-04, TolX   = 1.000e-06
Relative infinity norm of the final gradient = 6.710e-07, TolFun = 1.000e-06
EXIT: Local minimum found.

選択された特徴量をプロットします。

figure
plot(nca.FeatureWeights,'ro')
xlabel('Feature Index')
ylabel('Feature Weight')
grid on

無関係な特徴量の重みはゼロになります。この図に従うと、特徴量 1、3 および 9 は選択されません。

パラメーター推定に回帰変数サブセット法を、予測に完全独立条件法を使用して、ガウス過程回帰 (GPR) モデルをあてはめます。ARD 二乗指数カーネル関数を使用します。これにより、個々の重みが各予測子に割り当てられます。予測子を標準化します。

gprMdl = fitrgp(tbl,'NoShellRings','KernelFunction','ardsquaredexponential', ...
      'FitMethod','sr','PredictMethod','fic','Standardize',true)
gprMdl = 

  RegressionGP
           PredictorNames: {1×8 cell}
             ResponseName: 'NoShellRings'
    CategoricalPredictors: 1
        ResponseTransform: 'none'
          NumObservations: 4177
           KernelFunction: 'ARDSquaredExponential'
        KernelInformation: [1×1 struct]
            BasisFunction: 'Constant'
                     Beta: 11.4959
                    Sigma: 2.0282
        PredictorLocation: [10×1 double]
           PredictorScale: [10×1 double]
                    Alpha: [1000×1 double]
         ActiveSetVectors: [1000×10 double]
            PredictMethod: 'FIC'
            ActiveSetSize: 1000
                FitMethod: 'SR'
          ActiveSetMethod: 'Random'
        IsActiveSetVector: [4177×1 logical]
            LogLikelihood: -9.0019e+03
         ActiveSetHistory: [1×1 struct]
           BCDInformation: []


学習済みのモデルについて学習データの回帰損失 (再代入損失) を計算します。

L = resubLoss(gprMdl)
L =

    4.0306

fsrnca を使用した最小の交差検証済み損失は、GPR モデルと ARD カーネルを使用して得られた損失と同程度です。

入力引数

すべて折りたたむ

予測子変数の値。n 行 p 列の行列を指定します。n は観測値の個数、p は予測子変数の個数です。

データ型: single | double

応答値。長さ n の実数数値ベクトルを指定します。n は観測値の個数です。

データ型: single | double

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で閉じなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: 'Solver','sgd','Weights',W,'Lambda',0.0003 は、ソルバーとして確率的勾配降下を、観測値の重みとしてベクトル W の値を指定し、正則化パラメーターとして 0.0003 を設定します。

近似オプション

すべて折りたたむ

モデルのあてはめ方式。'FitMethod' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

  • 'exact' — すべてのデータを使用してあてはめを実行します。

  • 'none' — あてはめを行いません。fsrnca を呼び出すときに指定した特徴量の重みの初期値を使用して NCA モデルの汎化誤差を評価する場合に、このオプションを使用します。

  • 'average' — データをサブセットに分割し、exact 法を使用して各分割をあてはめ、特徴量の重みの平均を返します。名前と値のペアの引数 NumPartitions を使用して分割数を指定できます。

例: 'FitMethod','none'

'FitMethod','average' オプションで使用するデータの分割数。'NumPartitions' と 2 ~ n の整数値から構成されるコンマ区切りのペアとして指定します。n は観測値の個数です。

例: 'NumPartitions',15

データ型: double | single

過適合を防止するための正則化パラメーター。'Lambda' と非負のスカラーから構成されるコンマ区切りのペアとして指定します。

観測値の個数 n が大きくなると、過適合の可能性が小さくなり、必要な正則化の量も少なくなります。正則化パラメーターを調整する方法の詳細については、回帰用の NCA の正則化パラメーターの調整を参照してください。

例: 'Lambda',0.002

データ型: double | single

カーネルの幅。'LengthScale' と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。

すべての予測子が同じスケールである場合、特性長スケールの値は 1 が妥当です。X 内の予測子の大きさが非常に異なる場合は、'Standardize',true を使用して予測子の値を標準化し、'LengthScale',1 を設定することを検討してください。

例: 'LengthScale',1.5

データ型: double | single

特徴量の重みの初期値。'InitialFeatureWeights' と正の実数スカラーによる p 行 1 列のベクトルから構成されるコンマ区切りのペアとして指定します。p は学習データ内の予測子の個数です。

特徴量の重みを最適化する正則化された目的関数は、凸型ではありません。このため、特徴量の重みの初期値が異なると結果が異なる可能性があります。通常は特徴量の重みの初期値をすべて 1 に設定すると良好に機能しますが、状況によっては rand(p,1) を使用するランダムな初期値の方が解の品質が向上する可能性があります。

データ型: double | single

観測値の重み。'ObservationWeights' と正の実数スカラーによる n 行 1 列のベクトルから構成されるコンマ区切りのペアとして指定します。一部の観測値の重要度を他の観測値に比べて大きくするには、観測値の重みを使用します。既定の重みは、同じ重要度をすべての観測値に割り当てます。

データ型: double | single

予測子データの標準化のインジケーター。'Standardize'false または true から構成されるコンマ区切りのペアとして指定します。詳細は、標準化の影響 を参照してください。

例: 'Standardize',true

データ型: logical

収束概要表示の詳細レベル インジケーター。'Verbose' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

  • 0 — 収束概要なし

  • 1 — 勾配のノルムと目的関数の値を収束概要に含める

  • 1 より大きい値 — あてはめアルゴリズムに応じた、より多くの収束情報

    'minibatch-lbfgs' ソルバーを使用する場合に詳細レベルを 1 より大きい値にすると、中間的なミニバッチ LBFGS のあてはめによる反復ログが収束情報に含まれます。

例: 'Verbose',1

データ型: double | single

特徴量の重みを推定するソルバーのタイプ。'Solver' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

  • 'lbfgs' — メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) アルゴリズム

  • 'sgd' — 確率的勾配降下 (SGD) アルゴリズム

  • 'minibatch-lbfgs' — LBFGS アルゴリズムをミニバッチに適用した確率的勾配降下

既定値は、n ≤ 1000 の場合は 'lbfgs'、n > 1000 の場合は 'sgd' です。

例: 'solver','minibatch-lbfgs'

損失関数。'LossFunction' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

  • 'mad' — 平均絶対偏差

    l(yi,yj)=|yiyj|.

  • 'mse' — 平均二乗誤差

    l(yi,yj)=(yiyj)2.

  • 'epsiloninsensitive' — ε 許容損失関数。

    l(yi,yj)=max(0,|yiyj|ϵ).

    この損失関数は、平均二乗誤差または平均絶対偏差よりも外れ値に対してロバストです。

  • @lossfun — カスタム損失関数のハンドル。損失関数の形式は次のとおりです。

    function L = lossfun(Yu,Yv)
    % calculation of loss
    ...
    Yu は u 行 1 列のベクトル、Yv は v 行 1 列のベクトルです。L は、L(i,j)Yu(i) および Yv(j) の損失値となる u 行 v 列の行列です。

最小化対象の目的関数には、損失関数 l(yi,yj) が次のように含まれます。

f(w)=1ni=1nj=1,jinpijl(yi,yj)+λr=1pwr2,

ここで、w は特徴量の重みのベクトル、n は観測値の個数、p は予測子変数の個数です。pijxjxi の基準点である確率です。詳細については、回帰の場合の NCA 特徴選択を参照してください。

例: 'LossFunction',@lossfun

'LossFunction','epsiloninsensitive' オプションにおけるイプシロンの値。'LossFunction' と非負の実数スカラーから構成されるコンマ区切りのペアとして指定します。既定値は、応答変数の四分位数間範囲を使用した標本標準偏差の推定値です。

例: 'Epsilon',0.1

データ型: double | single

目的関数と勾配の計算に使用するメモリのサイズ (MB)。'CacheSize' と整数から構成されるコンマ区切りのペアとして指定します。

例: 'CacheSize',1500MB

データ型: double | single

LBFGS のオプション

すべて折りたたむ

ソルバーが 'lbfgs' である場合のヘッセ近似の履歴バッファー サイズ。'HessianHistorySize' と正の整数から構成されるコンマ区切りのペアとして指定します。ヘッセ行列の逆行列に対する近似を構築するために、各反復で最大 HessianHistorySize 回の最新の反復が使用されます。

例: 'HessianHistorySize',20

データ型: double | single

'lbfgs' ソルバーの初期ステップ サイズ。'InitialStepSize' と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。既定では、初期ステップ サイズは自動的に決定されます。

データ型: double | single

直線探索法。'LineSearchMethod' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

  • 'weakwolfe' — 弱 Wolfe 直線探索

  • 'strongwolfe' — 強 Wolfe 直線探索

  • 'backtracking' — バックトラッキング直線探索

例: 'LineSearchMethod','backtracking'

直線探索の最大反復回数。'MaxLineSearchIterations' と正の整数から構成されるコンマ区切りのペアとして指定します。

例: 'MaxLineSearchIterations',25

データ型: double | single

lbfgs ソルバーの、勾配ノルムに対する収束の相対許容誤差。'GradientTolerance' と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。

例: 'GradientTolerance',0.000002

データ型: double | single

SGD のオプション

すべて折りたたむ

'sgd' ソルバーの初期学習率。'InitialLearningRate' と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。

ソルバー タイプとして 'sgd' を使用する場合、学習率は 'InitialLearningRate' で指定された値から始まって反復ごとに減衰します。

既定の 'auto' では、データの小規模なサブセットに対する実験を使用して初期学習率が決定されます。初期学習率を自動調整するための反復回数を指定するには、名前と値のペアの引数 NumTuningIterations を使用します。初期学習率の自動調整で使用する観測値の個数を指定するには、名前と値のペアの引数 TuningSubsetSize を使用します。

ソルバー タイプが 'minibatch-lbfgs' である場合、'InitialLearningRate' を非常に大きい値に設定できます。この場合、前回のミニバッチによる特徴量の重みの初期値を使用して、各ミニバッチに LBFGS が個別に適用されます。

選択した初期学習率によって目的値が各反復で減少していることを確認するには、mdl.FitInfo プロパティに格納されている Objective の値に対して Iteration をプロットします。

mdl.FeatureWeights に等しい 'InitialFeatureWeights'refit 法を使用すると、最新の解から始めて、さらに反復を実行することができます。

例: 'InitialLearningRate',0.9

データ型: double | single

'sgd' ソルバーの場合に各バッチで使用する観測値の個数。'MiniBatchSize' と 1 ~ n の正の整数から構成されるコンマ区切りのペアとして指定します。

例: 'MiniBatchSize',25

データ型: double | single

ソルバーが 'sgd' である場合に n 個の観測値すべてを通過する最大回数。'PassLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。すべてのデータを 1 回通過することをエポックと呼びます。

例: 'PassLimit',10

データ型: double | single

'sgd' ソルバーの場合の収束概要を表示するバッチの頻度。'NumPrint' と正の整数から構成されるコンマ区切りのペアとして指定します。この引数は、'Verbose' の値が 0 より大きい場合に適用されます。コマンド ラインに表示される収束概要の各行について NumPrint 個のミニバッチが処理されます。

例: 'NumPrint',5

データ型: double | single

'sgd' ソルバーの調整反復回数。'NumTuningIterations' と正の整数から構成されるコンマ区切りのペアとして指定します。このオプションは、'InitialLearningRate','auto' の場合のみ有効です。

例: 'NumTuningIterations',15

データ型: double | single

初期学習率の調整に使用する観測値の個数。'TuningSubsetSize' と 1 ~ n の正の整数値から構成されるコンマ区切りのペアとして指定します。このオプションは、'InitialLearningRate','auto' の場合のみ有効です。

例: 'TuningSubsetSize',25

データ型: double | single

SGD または LBFGS のオプション

すべて折りたたむ

最大反復回数。'IterationLimit' と正の整数で構成されるコンマ区切りのペアとして指定します。既定値は、SGD の場合は 10000、LBFGS およびミニバッチ LBFGS の場合は 1000 です。

反復とは、バッチを 1 回通過することです。エポックとは、すべてのデータを 1 回通過することです。データが k 個のミニバッチに分割されている場合、どのエポックも k 回の反復に等しくなります。

例: 'IterationLimit',250

データ型: double | single

ステップ サイズに対する収束の許容誤差。'StepTolerance' と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。'lbfgs' ソルバーは絶対ステップ許容誤差を、'sgd' ソルバーは相対ステップ許容誤差を使用します。

例: 'StepTolerance',0.000005

データ型: double | single

ミニバッチ LBFGS のオプション

すべて折りたたむ

ミニバッチ LBFGS の各ステップにおける最大反復回数。'MiniBatchLBFGSIterations' と正の整数から構成されるコンマ区切りのペアとして指定します。

例: 'MiniBatchLBFGSIterations',15

ミニバッチ LBFGS アルゴリズムは、SGD 法と LBFGS 法の組み合わせです。したがって、SGD ソルバーと LBFGS ソルバーに適用される名前と値のペアの引数は、すべてミニバッチ LBFGS アルゴリズムにも適用されます。

データ型: double | single

出力引数

すべて折りたたむ

回帰用の近傍成分分析モデル。FeatureSelectionNCARegression オブジェクトとして返されます。

参照

[1] Rasmussen, C. E., R. M. Neal, G. E. Hinton, D. van Campand, M. Revow, Z. Ghahramani, R. Kustra, R. Tibshirani. The DELVE Manual, 1996, http://mlg.eng.cam.ac.uk/pub/pdf/RasNeaHinetal96.pdf.

[2] University of Toronto, Computer Science Department. Delve Datasets. http://www.cs.toronto.edu/~delve/data/datasets.html.

[3] Warwick J. N., T. L. Sellers, S. R. Talbot, A. J. Cawthorn, and W. B. Ford. "The Population Biology of Abalone (Haliotis species) in Tasmania. I. Blacklip Abalone (H. rubra) from the North Coast and Islands of Bass Strait." Sea Fisheries Division, Technical Report No. 48 (ISSN 1034-3288), 1994.

[4] S. Waugh. "Extending and Benchmarking Cascade-Correlation", PhD Thesis. Computer Science Department, University of Tasmania, 1995.

[5] Lichman, M. UCI Machine Learning Repository. Irvine, CA: University of California, School of Information and Computer Science, 2013. http://archive.ics.uci.edu/ml.

R2016b で導入