ドキュメンテーション

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

refit

クラス: FeatureSelectionNCAClassification

分類用の近傍成分分析 (NCA) モデルの再あてはめ

構文

mdlrefit = refit(mdl,Name,Value)

説明

mdlrefit = refit(mdl,Name,Value) は、1 つ以上の Name,Value ペア引数で指定された修正パラメーターを使用して、モデル mdl を再度あてはめます。

入力引数

すべて展開する

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

名前と値のペアの引数

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

近似オプション

すべて展開する

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

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

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

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

例: 'FitMethod','none'

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

n 個の観測値がある場合、NCA モデルの汎化誤差を最小化する最良の Lambda の値は 1/n の整数倍であると考えられます。

例: 'Lambda',0.01

データ型: double | single

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

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

  • 'sgd' — 確率的勾配降下法

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

例: 'solver','minibatch-lbfgs'

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

データ型: double | single

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

  • 0 — 収束概要なし

  • 1 — 反復回数、勾配のノルム、目的関数の値を含む収束概要。

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

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

例: 'Verbose',2

データ型: double | single

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

すべて展開する

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

例: 'GradientTolerance',0.00001

データ型: double | single

SGD またはミニバッチ LBFGS のオプション

すべて展開する

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

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

例: 'InitialLearningRate',0.8

データ型: double | single

ソルバーが 'sgd' (確率的勾配降下) である場合の通過の最大回数。'PassLimit' と正の整数から構成されるコンマ区切りのペアとして指定します。1 回通過するごとに、size(mdl.X,1) 個の観測値が処理されます。

例: 'PassLimit',10

データ型: double | single

SGD、LBFGS またはミニバッチ LBFGS のオプション

すべて展開する

最大反復回数。'IterationLimit' と正の整数で構成されるコンマ区切りのペアとして指定します。

例: 'IterationLimit',250

データ型: double | single

出力引数

すべて展開する

分類用の近傍成分分析モデル。FeatureSelectionNCAClassification オブジェクトとして返されます。結果を新しいモデルとして保存するか、mdl = refit(mdl,Name,Value) として既存のモデルを更新することができます。

すべて展開する

関数 generateCheckerBoardData.m を使用してチェッカーボード データを生成します。

rng(2016,'twister'); % For reproducibility
pps = 1375;
[X,y] = generateCheckerBoardData(pps);
X = X + 2;

データをプロットする。

figure
plot(X(y==1,1),X(y==1,2),'rx')
hold on
plot(X(y==-1,1),X(y==-1,2),'bx')

[n,p] = size(X)
n =

       22000


p =

     2

無関係な予測子をデータに追加します。

Q = 98;
Xrnd = unifrnd(0,4,n,Q);
Xobs = [X,Xrnd];

このコードにより、すべてが 0 と 4 の間で均等に分散している 98 個の追加予測子が作成されます。

データを学習セットとテスト セットに分割します。階層化された分割を作成し、各分割が似たクラス比率を持つようにするため、分割基準として length(y) ではなく y を使用します。

cvp = cvpartition(y,'holdout',2000);

cvpartition は、テスト セットに追加する 2000 個の観測値を無作為に選択します。残りのデータは学習セットに追加されます。cvpartition オブジェクト cvp に格納されている割り当てを使用して、学習セットと検定セットを作成します。

Xtrain = Xobs(cvp.training(1),:);
ytrain = y(cvp.training(1),:);

Xval = Xobs(cvp.test(1),:);
yval = y(cvp.test(1),:);

特徴選択を行わない場合の誤分類誤差を計算します。

nca = fscnca(Xtrain,ytrain,'FitMethod','none','Standardize',true, ...
    'Solver','lbfgs');
loss_nofs = loss(nca,Xval,yval)
loss_nofs =

    0.5165

'FitMethod','none' オプションでは、既定の重み (すべてが 1) が使用されます。つまり、すべての特徴量が同じ重要度になります。

次に、分類用の近傍成分分析を使用して、 で特徴選択を実行します。

w0 = rand(100,1);
n = length(ytrain)
lambda = 1/n;
nca = refit(nca,'InitialFeatureWeights',w0,'FitMethod','exact', ...
       'Lambda',lambda,'solver','sgd');
n =

       20000

目的関数の値と反復回数をプロットします。

figure()
plot(nca.FitInfo.Iteration,nca.FitInfo.Objective,'ro')
hold on
plot(nca.FitInfo.Iteration,movmean(nca.FitInfo.Objective,10),'k.-')
xlabel('Iteration number')
ylabel('Objective value')

特徴選択を行った場合の誤分類誤差を計算します。

loss_withfs = loss(nca,Xval,yval)
loss_withfs =

    0.0115

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

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

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

tol = 0.15;
selidx = find(nca.FeatureWeights > tol*max(1,max(nca.FeatureWeights)))
selidx =

     1
     2

特徴選択により結果が改善され、fscnca は 2 つの正しい特徴量が関連することを判別します。

R2016b で導入