このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
fscnca
分類に近傍成分分析を使用する特徴選択
構文
説明
fscnca
は、分類用に近傍成分分析 (NCA) を使用して特徴選択を実行します。
回帰用に NCA に基づく特徴選択を実行するには、fsrnca
を参照してください。
は、table mdl
= fscnca(Tbl
,ResponseVarName
)Tbl
に格納されている標本データを使用して、分類用の NCA 特徴選択モデルを返します。ResponseVarName
は、クラス ラベルが格納されている Tbl
内の変数の名前です。
fscnca
は、正則化がある NCA を対角的に適用することにより、特徴量の重みを学習します。
では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、モデルの当てはめ方式、正則化パラメーター、特徴量の重みの初期値を指定できます。mdl
= fscnca(X
,Y
,Name,Value
)
例
分類に NCA を使用した、データ内の関連する特徴量の判別
応答変数が 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')
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
最小の平均損失に対応する最適な λ の値を求めます。
[~,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
特徴量の重みおよび相対的なしきい値を使用して、特徴量を選択します。
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
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。
データ型: table
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。table 内の残りの変数は予測子です。
データ型: char
| string
X
— 予測子変数の値
n 行 p 列の行列
予測子変数の値。n 行 p 列の行列を指定します。n は観測値の個数、p は予測子変数の個数です。
データ型: single
| double
formula
— 応答変数および予測子変数サブセットの説明モデル
string | 文字ベクトル
応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3"
という形式の string または文字ベクトルとして指定します。この形式では、Y
は応答変数を、x1
、x2
および x3
は予測子変数を表します。
モデルに学習をさせるための予測子として Tbl
内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula
に現れない Tbl
内の変数は使用されません。
式の変数名は Tbl
の変数名 (Tbl.Properties.VariableNames
) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname
を使用して Tbl
の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName
を使用してそれらを変換できます。
データ型: char
| string
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
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'Solver','sgd','Weights',W,'Lambda',0.0003
は、ソルバーとして確率的勾配降下を、観測値の重みとしてベクトル W
の値を指定し、正則化パラメーターとして 0.0003 を設定します。
FitMethod
— モデルの当てはめ方式
'exact'
(既定値) | 'none'
| 'average'
モデルの当てはめ方式。'FitMethod'
と次のいずれかから構成されるコンマ区切りのペアとして指定します。
'exact'
— すべてのデータを使用して当てはめを実行します。'none'
— 当てはめを行いません。fscnca を呼び出すときに指定した特徴量の重みの初期値を使用して NCA モデルの汎化誤差を評価する場合に、このオプションを使用します。'average'
— データをサブセットに分割し、exact
法を使用して各分割を当てはめ、特徴量の重みの平均を返します。名前と値のペアの引数NumPartitions
を使用して分割数を指定できます。
例: 'FitMethod','none'
NumPartitions
— 分割数
max(2,min(10,n))
(既定値) | 2 ~ n の整数
'FitMethod','average'
オプションで使用するデータの分割数。'NumPartitions'
と 2 ~ n の整数値から構成されるコンマ区切りのペアとして指定します。n は観測値の個数です。
例: 'NumPartitions',15
データ型: double
| single
Lambda
— 正則化パラメーター
1/n (既定値) | 非負のスカラー
過適合を防止するための正則化パラメーター。'Lambda'
と非負のスカラーから構成されるコンマ区切りのペアとして指定します。
観測値の個数 n が大きくなると、過適合の可能性が小さくなり、必要な正則化の量も少なくなります。正則化パラメーターを調整する方法の詳細については、分類用の関連する特徴量の特定および分類に NCA を使用して特徴量を判別するための正則化パラメーターの調整を参照してください。
例: 'Lambda',0.002
データ型: double
| single
LengthScale
— カーネルの幅
1
(既定値) | 正の実数のスカラー
カーネルの幅。'LengthScale'
と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。
すべての予測子が同じスケールである場合、長さスケールの値は 1 が妥当です。X
内の予測子の大きさが非常に異なる場合は、'Standardize',true
を使用して予測子の値を標準化し、'LengthScale',1
を設定することを検討してください。
例: 'LengthScale',1.5
データ型: double
| single
CategoricalPredictors
— カテゴリカル予測子のリスト
正の整数のベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | "all"
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、カテゴリカル変数が含まれている予測子データ (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
PredictorNames
— 予測子変数名
一意な名前の string 配列 | 一意な文字ベクトルの cell 配列
予測子変数名。一意な名前の 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
の予測子変数と応答変数のみを使用します。PredictorNames
はX.Properties.VariableNames
のサブセットでなければならず、応答変数の名前を含めることはできません。既定では、すべての予測子変数の名前が
PredictorNames
に格納されます。学習用の予測子は、
PredictorNames
とY
の式の string ('y ~ x1 + x2 + x3'
など) の両方ではなく、いずれか一方を使用して指定します。
例: "PredictorNames={"SepalLength","SepalWidth","PetalLength","PetalWidth"}
データ型: string
| cell
ResponseName
— 応答変数名
"Y"
(既定値) | 文字ベクトル | string スカラー
応答変数名。文字ベクトルまたは string スカラーとして指定します。
Y
を指定した場合、ResponseName
を使用して応答変数の名前を指定できます。ResponseVarName
またはformula
を指定した場合、ResponseName
を使用できません。
例: ResponseName="response"
データ型: char
| string
InitialFeatureWeights
— 特徴量の重みの初期値
ones(M,1)
(既定値) | M 行 1 列の正の数値のベクトル
特徴量の重みの初期値。M 行 1 列の正の数値のベクトルとして指定します。ここで、M はカテゴリカル変数用にダミー変数が作成された後の予測子変数の数です (詳細については、CategoricalPredictors
を参照)。
特徴量の重みを最適化する正則化された目的関数は、凸型ではありません。このため、特徴量の重みの初期値が異なると結果が異なることがあります。通常は特徴量の重みの初期値をすべて 1 に設定すると良好に機能しますが、状況によっては rand(M,1)
を使用するランダムな初期値の方が解の品質が向上する場合があります。
データ型: double
| single
Weights
— 観測値の重み
1 から成る n 行 1 列のベクトル (既定値) | 正の実数スカラーによる n 行 1 列のベクトル
観測値の重み。'Weights'
と正の実数スカラーによる n 行 1 列のベクトルから構成されるコンマ区切りのペアとして指定します。一部の観測値の重要度を他の観測値に比べて大きくするには、観測値の重みを使用します。既定の重みは、同じ重要度をすべての観測値に割り当てます。
データ型: double
| single
Prior
— 各クラスの事前確率
'empirical'
(既定値) | 'uniform'
| 構造体
各クラスの事前確率。'Prior'
と以下のいずれかで構成されるコンマ区切りのペアとして指定します。
'empirical'
—fscnca
は、クラスの事前確率をクラスの頻度から取得します。'uniform'
—fscnca
は、すべてのクラス確率を均等に設定します。次の 2 つのフィールドがある構造体。
ClassProbs
— クラス確率のベクトル。数値の合計が 1 を超える場合、fsnca
は合計が 1 になるようにこれらを正規化します。ClassNames
—ClassProbs
のクラス確率に対応するクラス名。
例: 'Prior','uniform'
Standardize
— 予測子データの標準化のインジケーター
false
(既定値) | true
予測子データの標準化のインジケーター。'Standardize'
と false
または true
から構成されるコンマ区切りのペアとして指定します。詳細は、標準化の影響を参照してください。
例: 'Standardize',true
データ型: logical
Verbose
— 詳細レベル インジケーター
0 (既定値) | 1 | >1
収束概要表示の詳細レベル インジケーター。'Verbose'
と次のいずれかから構成されるコンマ区切りのペアとして指定します。
0 — 収束概要なし
1 — 勾配のノルムと目的関数の値を収束概要に含める
1 より大きい値 — 当てはめアルゴリズムに応じた、より多くの収束情報
'minibatch-lbfgs'
ソルバーを使用する場合に詳細レベルを 1 より大きい値にすると、中間的なミニバッチ LBFGS の当てはめによる反復ログが収束情報に含まれます。
例: 'Verbose',1
データ型: double
| single
Solver
— ソルバーのタイプ
'lbfgs'
| 'sgd'
| 'minibatch-lbfgs'
特徴量の重みを推定するソルバーのタイプ。'Solver'
と次のいずれかから構成されるコンマ区切りのペアとして指定します。
'lbfgs'
— メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) アルゴリズム'sgd'
— 確率的勾配降下 (SGD) アルゴリズム'minibatch-lbfgs'
— LBFGS アルゴリズムをミニバッチに適用した確率的勾配降下
既定値は、n ≤ 1000 の場合は 'lbfgs'
、n > 1000 の場合は 'sgd'
です。
例: 'solver','minibatch-lbfgs'
LossFunction
— 損失関数
'classiferror'
(既定値) | 関数ハンドル
損失関数。'LossFunction'
と次のいずれかから構成されるコンマ区切りのペアとして指定します。
'classiferror'
— 誤分類誤差@
— カスタム損失関数のハンドル。損失関数の形式は次のとおりです。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) が次のように含まれます。
ここで、w は特徴量の重みのベクトル、n は観測値の個数、p は予測子変数の個数です。pij は xj が xi の基準点である確率です。詳細については、分類の場合の NCA 特徴選択を参照してください。
例: 'LossFunction',@lossfun
CacheSize
— メモリ サイズ
1000MB
(既定値) | 整数
目的関数と勾配の計算に使用するメモリのサイズ (MB)。'CacheSize'
と整数から構成されるコンマ区切りのペアとして指定します。
例: 'CacheSize',1500MB
データ型: double
| single
HessianHistorySize
— ヘッセ近似の履歴バッファーのサイズ
15
(既定値) | 正の整数
ソルバーが 'lbfgs'
である場合のヘッセ近似の履歴バッファー サイズ。'HessianHistorySize'
と正の整数から構成されるコンマ区切りのペアとして指定します。ヘッセ行列の逆行列に対する近似を構築するために、各反復で最大 HessianHistorySize
回の最新の反復が使用されます。
例: 'HessianHistorySize',20
データ型: double
| single
InitialStepSize
— 初期ステップ サイズ
'auto'
(既定値) | 正の実数のスカラー
'lbfgs'
ソルバーの初期ステップ サイズ。'InitialStepSize'
と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。既定では、初期ステップ サイズは自動的に決定されます。
データ型: double
| single
LineSearchMethod
— 直線探索法
'weakwolfe'
(既定値) | 'strongwolfe'
| 'backtracking'
直線探索法。'LineSearchMethod'
と次のいずれかから構成されるコンマ区切りのペアとして指定します。
'weakwolfe'
— 弱 Wolfe 直線探索'strongwolfe'
— 強 Wolfe 直線探索'backtracking'
— バックトラッキング直線探索
例: 'LineSearchMethod','backtracking'
MaxLineSearchIterations
— 直線探索の最大反復回数
20
(既定値) | 正の整数
直線探索の最大反復回数。'MaxLineSearchIterations'
と正の整数から構成されるコンマ区切りのペアとして指定します。
例: 'MaxLineSearchIterations',25
データ型: double
| single
GradientTolerance
— 収束の相対許容誤差
1e-6
(既定値) | 正の実数のスカラー
lbfgs
ソルバーの、勾配ノルムに対する収束の相対許容誤差。'GradientTolerance'
と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。
例: 'GradientTolerance',0.000002
データ型: double
| single
InitialLearningRate
— 'sgd'
ソルバーの初期学習率
'auto'
(既定値) | 正の実数のスカラー
'sgd'
ソルバーの初期学習率。'InitialLearningRate'
と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。
ソルバー タイプとして 'sgd'
を使用する場合、学習率は 'InitialLearningRate'
で指定された値から始まって反復ごとに減衰します。
既定の 'auto'
では、データの小規模なサブセットに対する実験を使用して初期学習率が決定されます。初期学習率を自動調整するための反復回数を指定するには、名前と値のペアの引数 NumTuningIterations
を使用します。初期学習率の自動調整で使用する観測値の個数を指定するには、名前と値のペアの引数 TuningSubsetSize
を使用します。
ソルバー タイプが 'minibatch-lbfgs'
である場合、'InitialLearningRate'
を非常に大きい値に設定できます。この場合、前回のミニバッチによる特徴量の重みの初期値を使用して、各ミニバッチに LBFGS が個別に適用されます。
選択した初期学習率によって目的値が各反復で減少していることを確認するには、mdl.FitInfo
プロパティに格納されている Objective
の値に対して Iteration
をプロットします。
mdl.FeatureWeights
に等しい 'InitialFeatureWeights'
で refit
法を使用すると、最新の解から始めて、さらに反復を実行することができます。
例: 'InitialLearningRate',0.9
データ型: double
| single
MiniBatchSize
— 'sgd'
ソルバーの場合に各バッチで使用する観測値の個数
min(10,n) (既定値) | 1 ~ n の正の整数値
'sgd'
ソルバーの場合に各バッチで使用する観測値の個数。'MiniBatchSize'
と 1 ~ n の正の整数から構成されるコンマ区切りのペアとして指定します。
例: 'MiniBatchSize',25
データ型: double
| single
PassLimit
— ソルバーが 'sgd'
である場合の最大通過回数
5
(既定値) | 正の整数
ソルバーが 'sgd'
である場合に n 個の観測値すべてを通過する最大回数。'PassLimit'
と正の整数から構成されるコンマ区切りのペアとして指定します。すべてのデータを 1 回通過することをエポックと呼びます。
例: 'PassLimit',10
データ型: double
| single
NumPrint
— 収束概要を表示するバッチの頻度
10 (既定値) | 正の整数値
'sgd'
ソルバーの場合の収束概要を表示するバッチの頻度。'NumPrint'
と正の整数から構成されるコンマ区切りのペアとして指定します。この引数は、'Verbose'
の値が 0 より大きい場合に適用されます。コマンド ラインに表示される収束概要の各行について NumPrint
個のミニバッチが処理されます。
例: 'NumPrint',5
データ型: double
| single
NumTuningIterations
— 調整反復回数
20 (既定値) | 正の整数
'sgd'
ソルバーの調整反復回数。'NumTuningIterations'
と正の整数から構成されるコンマ区切りのペアとして指定します。このオプションは、'InitialLearningRate','auto'
の場合のみ有効です。
例: 'NumTuningIterations',15
データ型: double
| single
TuningSubsetSize
— 初期学習率の調整に使用する観測値の個数
min(100,n) (既定値) | 1 ~ n の正の整数値
初期学習率の調整に使用する観測値の個数。'TuningSubsetSize'
と 1 ~ n の正の整数値から構成されるコンマ区切りのペアとして指定します。このオプションは、'InitialLearningRate','auto'
の場合のみ有効です。
例: 'TuningSubsetSize',25
データ型: double
| single
IterationLimit
— 最大反復回数
正の整数
最大反復回数。'IterationLimit'
と正の整数で構成されるコンマ区切りのペアとして指定します。既定値は、SGD の場合は 10000、LBFGS およびミニバッチ LBFGS の場合は 1000 です。
反復とは、バッチを 1 回通過することです。エポックとは、すべてのデータを 1 回通過することです。データが k 個のミニバッチに分割されている場合、どのエポックも k 回の反復に等しくなります。
例: 'IterationLimit',250
データ型: double
| single
StepTolerance
— ステップ サイズに対する収束の許容誤差
1e-6 (既定値) | 正の実数のスカラー
ステップ サイズに対する収束の許容誤差。'StepTolerance'
と正の実数スカラーから構成されるコンマ区切りのペアとして指定します。'lbfgs'
ソルバーは絶対ステップ許容誤差を、'sgd'
ソルバーは相対ステップ許容誤差を使用します。
例: 'StepTolerance',0.000005
データ型: double
| single
MiniBatchLBFGSIterations
— ミニバッチ LBFGS の各ステップにおける最大反復回数
10 (既定値) | 正の整数
ミニバッチ LBFGS の各ステップにおける最大反復回数。'MiniBatchLBFGSIterations'
と正の整数から構成されるコンマ区切りのペアとして指定します。
例: 'MiniBatchLBFGSIterations',15
データ型: double
| single
メモ
ミニバッチ LBFGS アルゴリズムは、SGD 法と LBFGS 法の組み合わせです。したがって、SGD ソルバーと LBFGS ソルバーに適用される名前と値のペアの引数は、すべてミニバッチ LBFGS アルゴリズムにも適用されます。
出力引数
mdl
— 分類用の近傍成分分析モデル
FeatureSelectionNCAClassification
オブジェクト
分類用の近傍成分分析モデル。FeatureSelectionNCAClassification
オブジェクトとして返されます。
バージョン履歴
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)