Main Content

fscnca

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

説明

fscnca は、分類用に近傍成分分析 (NCA) を使用して特徴選択を実行します。

回帰用に NCA に基づく特徴選択を実行するには、fsrnca を参照してください。

mdl = fscnca(Tbl,ResponseVarName) は、table Tbl に格納されている標本データを使用して、分類用の NCA 特徴選択モデルを返します。ResponseVarName は、クラス ラベルが格納されている Tbl 内の変数の名前です。

fscnca は、正則化がある NCA を対角的に適用することにより、特徴量の重みを学習します。

mdl = fscnca(Tbl,formula) は、table Tbl に格納されている標本データを使用して、分類用の NCA 特徴選択モデルを返します。formula は、mdl の当てはめに使用する応答および table Tbl 内の予測子変数サブセットの説明モデルです。

mdl = fscnca(Tbl,Y) は、table Tbl の予測子と Y の応答を使用して、分類用の NCA 特徴選択モデルを返します。

mdl = fscnca(X,Y) は、行列 X の予測子と Y の応答を使用して、分類用の NCA 特徴選択モデルを返します。

mdl = fscnca(X,Y,Name,Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、モデルの当てはめ方式、正則化パラメーター、特徴量の重みの初期値を指定できます。

すべて折りたたむ

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

rng(0,'twister'); % For reproducibility
N = 100;
X = rand(N,20);
y = -ones(N,1);
y(X(:,3).*X(:,9)./X(:,15) < 0.4) = 1;

分類用の近傍成分分析モデルを当てはめます。

mdl = fscnca(X,y,'Solver','sgd','Verbose',1);
 o Tuning initial learning rate: NumTuningIterations = 20, TuningSubsetSize = 100

|===============================================|
|    TUNING    | TUNING SUBSET |    LEARNING    |
|     ITER     |   FUN VALUE   |      RATE      |
|===============================================|
|            1 | -3.755936e-01 |   2.000000e-01 |
|            2 | -3.950971e-01 |   4.000000e-01 |
|            3 | -4.311848e-01 |   8.000000e-01 |
|            4 | -4.903195e-01 |   1.600000e+00 |
|            5 | -5.630190e-01 |   3.200000e+00 |
|            6 | -6.166993e-01 |   6.400000e+00 |
|            7 | -6.255669e-01 |   1.280000e+01 |
|            8 | -6.255669e-01 |   1.280000e+01 |
|            9 | -6.255669e-01 |   1.280000e+01 |
|           10 | -6.255669e-01 |   1.280000e+01 |
|           11 | -6.255669e-01 |   1.280000e+01 |
|           12 | -6.255669e-01 |   1.280000e+01 |
|           13 | -6.255669e-01 |   1.280000e+01 |
|           14 | -6.279210e-01 |   2.560000e+01 |
|           15 | -6.279210e-01 |   2.560000e+01 |
|           16 | -6.279210e-01 |   2.560000e+01 |
|           17 | -6.279210e-01 |   2.560000e+01 |
|           18 | -6.279210e-01 |   2.560000e+01 |
|           19 | -6.279210e-01 |   2.560000e+01 |
|           20 | -6.279210e-01 |   2.560000e+01 |

 o Solver = SGD, MiniBatchSize = 10, PassLimit = 5

|==========================================================================================|
|   PASS   |     ITER     | AVG MINIBATCH | AVG MINIBATCH |   NORM STEP   |    LEARNING    |
|          |              |   FUN VALUE   |   NORM GRAD   |               |      RATE      |
|==========================================================================================|
|        0 |            9 | -5.658450e-01 |  4.492407e-02 |  9.290605e-01 |   2.560000e+01 |
|        1 |           19 | -6.131382e-01 |  4.923625e-02 |  7.421541e-01 |   1.280000e+01 |
|        2 |           29 | -6.225056e-01 |  3.738784e-02 |  3.277588e-01 |   8.533333e+00 |
|        3 |           39 | -6.233366e-01 |  4.947901e-02 |  5.431133e-01 |   6.400000e+00 |
|        4 |           49 | -6.238576e-01 |  3.445763e-02 |  2.946188e-01 |   5.120000e+00 |

         Two norm of the final step = 2.946e-01
Relative two norm of the final step = 6.588e-02, TolX = 1.000e-06
EXIT: Iteration or pass limit reached.

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

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

Figure contains an axes object. The axes object with xlabel Feature index, ylabel Feature weight contains a line object which displays its values using only markers.

fscnca は、関連する特徴量を正しく判別しています。

標本データの読み込み

load ovariancancer; 
whos
  Name        Size                Bytes  Class     Attributes

  grp       216x1                 25056  cell                
  obs       216x4000            3456000  single              

この例では、WCX2 タンパク質配列を使用して生成された高解像度の卵巣癌データ セットを使用します。いくつかの前処理手順の後で、データ セットには obs および grp という 2 つの変数が含まれています。変数 obs は、4000 個の特徴量と 216 個の観測値で構成されています。grp の各要素によって、obs の対応する行が属するグループが定義されます。

学習セットとテスト セットへのデータの分割

cvpartition を使用して、サイズが 160 の学習セットとサイズが 56 のテスト セットにデータを分割します。学習セットとテスト セットのグループ比率は、どちらも grp の場合とほとんど同じです。

rng(1); % For reproducibility
cvp = cvpartition(grp,'holdout',56)
cvp = 
Hold-out cross validation partition
   NumObservations: 216
       NumTestSets: 1
         TrainSize: 160
          TestSize: 56
          IsCustom: 0
Xtrain = obs(cvp.training,:);
ytrain = grp(cvp.training,:);
Xtest  = obs(cvp.test,:);
ytest  = grp(cvp.test,:);

特徴選択が必要であるかどうかの判別

当てはめを行わずに汎化誤差を計算します。

nca = fscnca(Xtrain,ytrain,'FitMethod','none');
L = loss(nca,Xtest,ytest)
L = 0.0893

このオプションでは、fscnca で指定される特徴量の重みの初期値 (この場合は既定の特徴量の重み) を使用して、近傍成分分析 (NCA) 特徴選択モデルの汎化誤差を計算します。

正則化パラメーターなし (Lambda = 0) で NCA を当てはめます。

nca = fscnca(Xtrain,ytrain,'FitMethod','exact','Lambda',0,...
      'Solver','sgd','Standardize',true);
L = loss(nca,Xtest,ytest)
L = 0.0714

損失値が改善されたので、特徴選択が有効であることがわかります。通常は、λ の値を調整すると結果が改善されます。

5 分割交差検証を使用して NCA の正則化パラメーターを調整します。

λ の調整とは、分類損失が最小になる λ の値を求めることを意味します。交差検証を使用して λ を調整するため、以下を行います。

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

cvp = cvpartition(ytrain,'kfold',5);
numvalidsets = cvp.NumTestSets;

λ の値を割り当て、損失関数の値を格納する配列を作成します。

n = length(ytrain);
lambdavals = linspace(0,20,20)/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 = fscnca(X,y,'FitMethod','exact', ...
             'Solver','sgd','Lambda',lambdavals(i), ...
             'IterationLimit',30,'GradientTolerance',1e-4, ...
             'Standardize',true);
                  
        lossvals(i,k) = loss(nca,Xvalid,yvalid,'LossFunction','classiferror');
    end
end

λ の各値について、分割から得られる平均損失を計算します。

meanloss = mean(lossvals,2);

平均損失値と λ の値をプロットします。

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

Figure contains an axes object. The axes object with xlabel Lambda, ylabel Loss (MSE) contains an object of type line.

最小の平均損失に対応する最適な λ の値を求めます。

[~,idx] = min(meanloss) % Find the index
idx = 2
bestlambda = lambdavals(idx) % Find the best lambda value
bestlambda = 0.0066
bestloss = meanloss(idx)
bestloss = 0.0312

最適な λ の使用によるすべてのデータへの NCA モデルの当てはめと特徴量の重みのプロット

ソルバー lbfgs を使用し、予測子の値を標準化します。

nca = fscnca(Xtrain,ytrain,'FitMethod','exact','Solver','sgd',...
    'Lambda',bestlambda,'Standardize',true,'Verbose',1);
 o Tuning initial learning rate: NumTuningIterations = 20, TuningSubsetSize = 100

|===============================================|
|    TUNING    | TUNING SUBSET |    LEARNING    |
|     ITER     |   FUN VALUE   |      RATE      |
|===============================================|
|            1 |  2.403497e+01 |   2.000000e-01 |
|            2 |  2.275050e+01 |   4.000000e-01 |
|            3 |  2.036845e+01 |   8.000000e-01 |
|            4 |  1.627647e+01 |   1.600000e+00 |
|            5 |  1.023512e+01 |   3.200000e+00 |
|            6 |  3.864283e+00 |   6.400000e+00 |
|            7 |  4.743816e-01 |   1.280000e+01 |
|            8 | -7.260138e-01 |   2.560000e+01 |
|            9 | -7.260138e-01 |   2.560000e+01 |
|           10 | -7.260138e-01 |   2.560000e+01 |
|           11 | -7.260138e-01 |   2.560000e+01 |
|           12 | -7.260138e-01 |   2.560000e+01 |
|           13 | -7.260138e-01 |   2.560000e+01 |
|           14 | -7.260138e-01 |   2.560000e+01 |
|           15 | -7.260138e-01 |   2.560000e+01 |
|           16 | -7.260138e-01 |   2.560000e+01 |
|           17 | -7.260138e-01 |   2.560000e+01 |
|           18 | -7.260138e-01 |   2.560000e+01 |
|           19 | -7.260138e-01 |   2.560000e+01 |
|           20 | -7.260138e-01 |   2.560000e+01 |

 o Solver = SGD, MiniBatchSize = 10, PassLimit = 5

|==========================================================================================|
|   PASS   |     ITER     | AVG MINIBATCH | AVG MINIBATCH |   NORM STEP   |    LEARNING    |
|          |              |   FUN VALUE   |   NORM GRAD   |               |      RATE      |
|==========================================================================================|
|        0 |            9 |  4.016078e+00 |  2.835465e-02 |  5.395984e+00 |   2.560000e+01 |
|        1 |           19 | -6.726156e-01 |  6.111354e-02 |  5.021138e-01 |   1.280000e+01 |
|        1 |           29 | -8.316555e-01 |  4.024186e-02 |  1.196031e+00 |   1.280000e+01 |
|        2 |           39 | -8.838656e-01 |  2.333416e-02 |  1.225834e-01 |   8.533333e+00 |
|        3 |           49 | -8.669034e-01 |  3.413162e-02 |  3.421902e-01 |   6.400000e+00 |
|        3 |           59 | -8.906936e-01 |  1.946295e-02 |  2.232511e-01 |   6.400000e+00 |
|        4 |           69 | -8.778630e-01 |  3.561290e-02 |  3.290645e-01 |   5.120000e+00 |
|        4 |           79 | -8.857135e-01 |  2.516638e-02 |  3.902979e-01 |   5.120000e+00 |

         Two norm of the final step = 3.903e-01
Relative two norm of the final step = 6.171e-03, TolX = 1.000e-06
EXIT: Iteration or pass limit reached.

特徴量の重みをプロットします。

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

Figure contains an axes object. The axes object with xlabel Feature index, ylabel Feature weight contains a line object which displays its values using only markers.

特徴量の重みおよび相対的なしきい値を使用して、特徴量を選択します。

tol    = 0.02;
selidx = find(nca.FeatureWeights > tol*max(1,max(nca.FeatureWeights)))
selidx = 72×1

   565
   611
   654
   681
   737
   743
   744
   750
   754
   839
      ⋮

テスト セットを使用して分類損失を計算します。

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

選択した特徴量の使用による観測値の分類

重みが 0 より大きい特徴量を学習データから抽出します。

features = Xtrain(:,selidx);

選択した特徴量を使用するサポート ベクター マシン分類器を、縮小した学習セットに適用します。

svmMdl = fitcsvm(features,ytrain);

特徴量の選択には使用されなかったテスト データに対する学習済み分類器の精度を評価します。

L = loss(svmMdl,Xtest(:,selidx),ytest)
L = single
    0

入力引数

すべて折りたたむ

モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。

データ型: table

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

データ型: char | string

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

データ型: single | double

応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3" という形式の string または文字ベクトルとして指定します。この形式では、Y は応答変数を、x1x2 および x3 は予測子変数を表します。

モデルに学習をさせるための予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。

式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。

データ型: char | string

クラス ラベル。categorical 配列、logical ベクトル、数値ベクトル、string 配列、長さ n の文字ベクトルの cell 配列、または n 行の文字行列として指定します。n は観測値の数です。Y の要素 i または行 i は、X の行 i (観測値 i) に対応するクラス ラベルです。

データ型: single | double | logical | char | string | cell | categorical

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

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

当てはめオプション

すべて折りたたむ

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

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

  • 'none' — 当てはめを行いません。fscnca を呼び出すときに指定した特徴量の重みの初期値を使用して 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

カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。

説明
正の整数のベクトルベクトルの各エントリは、カテゴリカル変数が含まれている予測子データ (X) の列に対応するインデックス値です。
logical ベクトルtrue というエントリは、予測子データ (X) の対応する列がカテゴリカル変数であることを意味します。
文字行列行列の各行は table X 内の予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
文字ベクトルの cell 配列または string 配列配列の各要素は table X 内の予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。
"all"すべての予測子がカテゴリカルです。

既定では、予測子データがテーブル内にある場合、fscnca は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列のいずれか、あるいは文字ベクトルの cell 配列である場合に、変数を categorical であると見なします。予測子データが行列である場合、fscnca はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。

特定されたカテゴリカル予測子に対して、fscnca はカテゴリカル変数に順序が設定されていないか順序が設定されているかに応じて、2 つの異なる方式を使用してダミー変数を作成します。

  • 順序付けのないカテゴリカル変数の場合、fscnca は、そのカテゴリカル変数の各レベルについて 1 つずつダミー変数を作成します。

  • 順序付けされたカテゴリカル変数の場合、fscnca は、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。

X が table の場合、カテゴリカル予測子を順序付きにすることも順序なしにすることもできます。X が行列の場合、fscnca はカテゴリカル予測子を順序なしとして扱います。

例: CategoricalPredictors="all"

データ型: double | logical | char | string

予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames の機能は、学習データの提供方法によって決まります。

  • X を行列として指定する場合、PredictorNames を使用して X 内の予測子変数に名前を割り当てることができます。

    • PredictorNames 内の名前の順序は、X の予測子の順序に一致しなければなりません。つまり、PredictorNames{1}X(:,1) の名前、PredictorNames{2}X(:,2) の名前であり、他も同様です。また、size(X,2)numel(PredictorNames) は等しくなければなりません。

    • 既定では PredictorNames{'X1','X2',...} です。

  • X を table として指定する場合、PredictorNames を使用して学習に使用する予測子変数を指定できます。つまり、fscnca は、学習中に PredictorNames の予測子変数と応答変数のみを使用します。

    • PredictorNamesX.Properties.VariableNames のサブセットでなければならず、応答変数の名前を含めることはできません。

    • 既定では、すべての予測子変数の名前が PredictorNames に格納されます。

    • 学習用の予測子は、PredictorNamesY の式の string ('y ~ x1 + x2 + x3' など) の両方ではなく、いずれか一方を使用して指定します。

例: "PredictorNames={"SepalLength","SepalWidth","PetalLength","PetalWidth"}

データ型: string | cell

応答変数名。文字ベクトルまたは string スカラーとして指定します。

  • Y を指定した場合、ResponseName を使用して応答変数の名前を指定できます。

  • ResponseVarName または formula を指定した場合、ResponseName を使用できません。

例: ResponseName="response"

データ型: char | string

特徴量の重みの初期値。M 行 1 列の正の数値のベクトルとして指定します。ここで、M はカテゴリカル変数用にダミー変数が作成された後の予測子変数の数です (詳細については、CategoricalPredictors を参照)。

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

データ型: double | single

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

データ型: double | single

各クラスの事前確率。'Prior' と以下のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'empirical'fscnca は、クラスの事前確率をクラスの頻度から取得します。

  • 'uniform'fscnca は、すべてのクラス確率を均等に設定します。

  • 次の 2 つのフィールドがある構造体。

    • ClassProbs — クラス確率のベクトル。数値の合計が 1 を超える場合、fsnca は合計が 1 になるようにこれらを正規化します。

    • ClassNamesClassProbs のクラス確率に対応するクラス名。

例: 'Prior','uniform'

予測子データの標準化のインジケーター。'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' と次のいずれかから構成されるコンマ区切りのペアとして指定します。

  • 'classiferror' — 誤分類誤差

    l(yi,yj)={1ifyiyj,0otherwise.

  • @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

目的関数と勾配の計算に使用するメモリのサイズ (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

データ型: double | single

メモ

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

出力引数

すべて折りたたむ

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

バージョン履歴

R2016b で導入