4

LASSO と Elastic Net の代替として、この方法を正規化された回帰として試しています。40,000 のデータ ポイントと 40 の機能があります。Lasso は 5 つの特徴を選択し、直交マッチング追跡は 1 つだけを選択します。

何が原因でしょうか? 私は間違った方法で omp を使用していますか? おそらく、回帰として使用することを意図したものではありません。私が間違っているかもしれない他のことについて何かできることがあれば教えてください。

4

1 に答える 1

2

scikit-learn で実装されているように、直交マッチングの追求は少し壊れているか、少なくとも入力データに非常に敏感です。

例:

import sklearn.linear_model 
import sklearn.datasets 
import numpy

X, y, w = sklearn.datasets.make_regression(n_samples=40000, n_features=40, n_informative=10, coef=True, random_state=0)

clf1 = sklearn.linear_model.LassoLarsCV(fit_intercept=True, normalize=False, max_n_alphas=1e6) 
clf1.fit(X, y)

clf2 = sklearn.linear_model.OrthogonalMatchingPursuitCV(fit_intercept=True, normalize=False)
clf2.fit(X, y)

# this is 1e-10, LassoLars is basically exact on this data 
print numpy.linalg.norm(y - clf1.predict(X))

# this is 7e+8, OMP is broken
print numpy.linalg.norm(y - clf2.predict(X))

楽しい実験:

  • には、既定のデータセットがたくさんありますsklearn.datasets。OMP はそれらすべてで失敗しますか? どうやら、糖尿病データセットでは問題なく動作します...

  • make_regressionOMP が機能するデータを生成するパラメータの組み合わせはありますか? まだそれを探しています... 100 x 100 と 100 x 10 も同じように失敗します。

于 2016-04-05T20:37:13.760 に答える