sparsefilt
スパース フィルターの使用による特徴抽出
説明
は、p 個の変数が含まれている予測子データ Mdl
= sparsefilt(X
,q
)X
のテーブルまたは行列にスパース フィルターを適用した結果が含まれているスパース フィルター モデル オブジェクトを返します。q
は X
から抽出する特徴量の個数なので、sparsefilt
は p 行 q
列の変換の重み行列を学習します。特徴量の表現が劣完備または過完備である場合、q
はそれぞれ、予測子変数の個数より少なかったり多かったりする可能性があります。
学習済みの変換の重みにアクセスするには、
Mdl.TransformWeights
を使用します。学習済みの変換を使用して
X
を新しい一連の特徴量に変換するには、Mdl
とX
をtransform
に渡します。
は、1 つ以上の Mdl
= sparsefilt(X
,q
,Name,Value
)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: [1×1 struct] NumPredictors: 363 NumLearnedFeatures: 100 Mu: [] Sigma: [] FitInfo: [1×1 struct] TransformWeights: [363×100 double] InitialTransformWeights: [] Properties, Methods
ステップ サイズの制限または勾配サイズの制限に達したのではなく反復制限に達したために停止したので、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);
イメージ パッチにはノイズがあるように見えます。ノイズを除去するため、さらに反復を行います。停止した位置から最適化を再開し、さらに 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);
これらのイメージではノイズが少なくなっています。
入力引数
予測子データ。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'
と次の表の値から構成されるコンマ区切りのペアとして指定します。
値 | 説明 |
---|---|
0 | sparsefilt は収束情報をコマンド ラインに表示しません。 |
正の整数 | sparsefilt は収束情報をコマンド ラインに表示します。 |
収束情報
見出し | 意味 |
---|---|
FUN VALUE | 目的関数の値。 |
NORM GRAD | 目的関数の勾配のノルム。 |
NORM STEP | 反復ステップのノルム。前の点と現在の点の間の距離を意味します。 |
CURV | OK は弱 Wolfe 条件が満たされていることを意味します。この条件は、目的関数の十分な減少と曲率条件の組み合わせです。 |
GAMMA | ステップの内積に勾配差分を乗算し、勾配差分と勾配差分自体との内積で除算した値。勾配差分は、現在の点における勾配から前の点における勾配を減算した値です。目的関数の曲率に関する診断情報を提供します。 |
ALPHA | ステップ方向乗数。直線探索が実行された場合、1 以外になります。 |
ACCEPT | YES は取り得るステップがアルゴリズムで見つかったことを意味します。 |
例: 'VerbosityLevel',1
データ型: single
| double
変換の重み行列に対する L2 正則化係数の値。'Lambda'
と正の数値スカラーから構成されるコンマ区切りのペアとして指定します。既定値の 0
を指定した場合、目的関数に正則化項は含まれません。
例: 'Lambda',0.1
データ型: single
| double
予測子データを標準化するためのフラグ。'Standardize'
と true
(1
) または false
(0
) から構成されるコンマ区切りのペアとして指定します。
Standardize
が true
の場合、次のようになります。
例: 'Standardize',true
データ型: logical
最適化を初期化する変換の重み。'InitialTransformWeights'
と p 行 q
列の数値行列から構成されるコンマ区切りのペアとして指定します。p は X
の列数または変数の個数でなければならず、q
は q
の値です。
ヒント
以前に返された変換の重み行列は、再度 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 で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)