Main Content

sparsefilt

スパース フィルターの使用による特徴抽出

説明

Mdl = sparsefilt(X,q) は、p 個の変数が含まれている予測子データ X のテーブルまたは行列にスパース フィルターを適用した結果が含まれているスパース フィルター モデル オブジェクトを返します。qX から抽出する特徴量の個数なので、sparsefilt は p 行 q 列の変換の重み行列を学習します。特徴量の表現が劣完備または過完備である場合、q はそれぞれ、予測子変数の個数より少なかったり多かったりする可能性があります。

  • 学習済みの変換の重みにアクセスするには、Mdl.TransformWeights を使用します。

  • 学習済みの変換を使用して X を新しい一連の特徴量に変換するには、MdlXtransform に渡します。

Mdl = sparsefilt(X,q,Name,Value) は、1 つ以上の Name,Value 引数のペアによって指定された追加オプションを使用します。たとえば、予測子データを標準化したり、L2 正則化を適用することができます。

すべて折りたたむ

関数 sparsefilt を使用して SparseFiltering オブジェクトを作成します。

イメージ パッチ SampleImagePatches を読み込みます。

data = load('SampleImagePatches');
size(data.X)
ans = 1×2

        5000         363

5,000 個のイメージ パッチがあり、それぞれに 363 個の特徴量が含まれています。

100 個の特徴量をデータから抽出します。

rng default % For reproducibility
Q = 100;
obj = sparsefilt(data.X,Q,'IterationLimit',100)
Warning: Solver LBFGS was not able to converge to a solution.
obj = 
  SparseFiltering
            ModelParameters: [1x1 struct]
              NumPredictors: 363
         NumLearnedFeatures: 100
                         Mu: []
                      Sigma: []
                    FitInfo: [1x1 struct]
           TransformWeights: [363x100 double]
    InitialTransformWeights: []


ステップ サイズの制限または勾配サイズの制限に達したのではなく反復制限に達したために停止したので、sparsefilt は警告を発します。しかし、関数 transform を呼び出すことにより、返されたオブジェクトに含まれている学習済み特徴量を使用できます。

スパース フィルターの最適化を継続します。

イメージ パッチ SampleImagePatches を読み込みます。

data = load('SampleImagePatches');
size(data.X)
ans = 1×2

        5000         363

5,000 個のイメージ パッチがあり、それぞれに 363 個の特徴量が含まれています。

100 個の特徴量をデータから抽出し、反復制限として 20 を使用します。

rng default % For reproducibility
q = 100;
Mdl = sparsefilt(data.X,q,'IterationLimit',20);
Warning: Solver LBFGS was not able to converge to a solution.

生成された変換行列をイメージ パッチとして表示します。

wts = Mdl.TransformWeights;
W = reshape(wts,[11,11,3,q]);
[dx,dy,~,~] = size(W);
for f = 1:q
    Wvec = W(:,:,:,f);
    Wvec = Wvec(:);
    Wvec =(Wvec - min(Wvec))/(max(Wvec) - min(Wvec));
    W(:,:,:,f) = reshape(Wvec,dx,dy,3);
end
m   = ceil(sqrt(q));
n   = m;
img = zeros(m*dx,n*dy,3);
f   = 1;
for i = 1:m
    for j = 1:n
        if (f <= q)
            img((i-1)*dx+1:i*dx,(j-1)*dy+1:j*dy,:) = W(:,:,:,f);
            f = f+1;
        end
    end
end
imshow(img,'InitialMagnification',300);

Figure contains an axes object. The axes object contains an object of type image.

イメージ パッチにはノイズがあるように見えます。ノイズを除去するため、さらに反復を行います。停止した位置から最適化を再開し、さらに 40 回反復します。

Mdl = sparsefilt(data.X,q,'IterationLimit',40,'InitialTransformWeights',wts);
Warning: Solver LBFGS was not able to converge to a solution.

更新された変換行列をイメージ パッチとして表示します。

wts = Mdl.TransformWeights;
W = reshape(wts,[11,11,3,q]);
[dx,dy,~,~] = size(W);
for f = 1:q
    Wvec = W(:,:,:,f);
    Wvec = Wvec(:);
    Wvec =(Wvec - min(Wvec))/(max(Wvec) - min(Wvec));
    W(:,:,:,f) = reshape(Wvec,dx,dy,3);
end
m   = ceil(sqrt(q));
n   = m;
img = zeros(m*dx,n*dy,3);
f   = 1;
for i = 1:m
    for j = 1:n
        if (f <= q)
            img((i-1)*dx+1:i*dx,(j-1)*dy+1:j*dy,:) = W(:,:,:,f);
            f = f+1;
        end
    end
end
imshow(img,'InitialMagnification',300);

Figure contains an axes object. The axes object contains an object of type image.

これらのイメージではノイズが少なくなっています。

入力引数

すべて折りたたむ

予測子データ。n 行 p 列の数値行列またはテーブルを指定します。行は各観測値に、列は各予測子変数に対応します。X がテーブルの場合、そのすべての変数が数値ベクトルでなければなりません。

データ型: single | double | table

予測子データから抽出する特徴量の個数。正の整数を指定します。

sparsefilt は、p 行 q 列の変換の重み行列を Mdl.TransformWeights に格納します。したがって、非常に大きい値を q に設定した場合、メモリ消費量が増加し、計算時間が長くなる可能性があります。

データ型: single | double

名前と値の引数

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

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

例: 'Standardize',true,'Lambda',1 は、予測子データを標準化し、1 というペナルティを変換の重み行列に適用します。

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

例: 'IterationLimit',1e6

データ型: single | double

アルゴリズムの収束を監視するための詳細レベル。'VerbosityLevel' と次の表の値から構成されるコンマ区切りのペアとして指定します。

説明
0sparsefilt は収束情報をコマンド ラインに表示しません。
正の整数sparsefilt は収束情報をコマンド ラインに表示します。

収束情報

見出し意味
FUN VALUE目的関数の値。
NORM GRAD目的関数の勾配のノルム。
NORM STEP反復ステップのノルム。前の点と現在の点の間の距離を意味します。
CURVOK は弱 Wolfe 条件が満たされていることを意味します。この条件は、目的関数の十分な減少と曲率条件の組み合わせです。
GAMMAステップの内積に勾配差分を乗算し、勾配差分と勾配差分自体との内積で除算した値。勾配差分は、現在の点における勾配から前の点における勾配を減算した値です。目的関数の曲率に関する診断情報を提供します。
ALPHAステップ方向乗数。直線探索が実行された場合、1 以外になります。
ACCEPTYES は取り得るステップがアルゴリズムで見つかったことを意味します。

例: 'VerbosityLevel',1

データ型: single | double

変換の重み行列に対する L2 正則化係数の値。'Lambda' と正の数値スカラーから構成されるコンマ区切りのペアとして指定します。既定値の 0 を指定した場合、目的関数に正則化項は含まれません。

例: 'Lambda',0.1

データ型: single | double

予測子データを標準化するためのフラグ。'Standardize'true (1) または false (0) から構成されるコンマ区切りのペアとして指定します。

Standardizetrue の場合、次のようになります。

  • sparsefilt は、予測子データ (X) の各列のセンタリングとスケーリングを、それぞれ列の平均値と標準偏差を使用して行います。

  • sparsefilt は、標準化された予測子行列を使用して新しい特徴量を抽出し、予測子変数の平均および標準偏差を MdlMu および Sigma プロパティに格納します。

例: 'Standardize',true

データ型: logical

最適化を初期化する変換の重み。'InitialTransformWeights' と p 行 q 列の数値行列から構成されるコンマ区切りのペアとして指定します。p は X の列数または変数の個数でなければならず、qq の値です。

ヒント

以前に返された変換の重み行列は、再度 sparsefilt を呼び出すときに初期値として渡すことにより、最適化を継続できます。出力されるモデル オブジェクト Mdl では、学習済みの変換の重み行列が TransformWeights プロパティに格納されます。

例: 'InitialTransformWeights',Mdl.TransformWeights

データ型: single | double

勾配ノルムに対する収束の相対許容誤差。'GradientTolerance' と正の数値スカラーから構成されるコンマ区切りのペアとして指定します。この勾配は目的関数の勾配です。

例: 'GradientTolerance',1e-4

データ型: single | double

ステップ サイズに対する収束の絶対許容誤差。'StepTolerance' と正の数値スカラーから構成されるコンマ区切りのペアとして指定します。

例: 'StepTolerance',1e-4

データ型: single | double

出力引数

すべて折りたたむ

学習済みのスパース フィルター モデル。SparseFiltering モデル オブジェクトとして返されます。

Mdl のプロパティにアクセスするには、ドット表記を使用します。以下に例を示します。

  • 学習済みの変換の重みにアクセスするには、Mdl.TransformWeights を使用します。

  • 当てはめ情報の構造体にアクセスするには、Mdl.FitInfo を使用します。

新しいデータについてスパース フィルターの係数を求めるには、関数 transform を使用します。

アルゴリズム

関数 sparsefilt は、入力特徴量から出力特徴量への非線形変換を作成します。この変換は、可能な限り少ない個数の出力特徴量で各例を表現すると同時に、出力特徴量が例全体で同程度の影響を与えるような目的関数の最適化をベースとしています。

詳細は、スパース フィルター アルゴリズムを参照してください。

バージョン履歴

R2017a で導入