我正在尝试将此方法作为正则化回归,作为套索和弹性网的替代方法。我有40k个数据点和40个功能。拉索选择5个特征,而正交匹配追踪只选择1个。
是什么原因造成的?我用错omp了吗?也许它并不是用来作为回归的。如果你能纠正我可能做错的其他事情,请告诉我。
正交匹配追求似乎有点崩溃,或者至少对输入数据非常敏感,正如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))
有趣的实验:
CCD_ 1中有一堆固定的数据集。OMP是否全部失败?显然,它在糖尿病数据集上运行良好。。。
make_regression
是否有任何参数组合可以生成OMP适用的数据?还在找那个。。。100 x 100和100 x 10以相同的方式失效。