正交匹配追踪回归 - 我用错了吗?

Posted

技术标签:

【中文标题】正交匹配追踪回归 - 我用错了吗?【英文标题】:Orthogonal matching pursuit regression - am I using it wrong? 【发布时间】:2016-07-17 04:05:37 【问题描述】:

我正在尝试将此方法作为正则化回归,作为套索和弹性网络的替代方法。我有 40k 数据点和 40 个特征。 Lasso 选择了 5 个特征,正交匹配追踪只选择了 1 个。

这可能是什么原因造成的?我是否以错误的方式使用 omp?也许它不打算用作回归。如果您能解决我可能做错的任何事情,请告诉我。

【问题讨论】:

我无法帮助,因为我对 scikit-learn 一无所知,但您需要向我们提供更多详细信息。您正在运行的代码是什么?您能否提供一个小数据集来重现您的问题? 你的问题是stats.stackexchange.com 的一个更好的猜测 - 祝你好运! 请发布完整的、可运行的代码和数据集。否则这个问题无法回答。 创建 omp 对象时,您将什么设置为目标稀疏度?第一次运行代码时是否收到错误/警告? 【参考方案1】:

正如在 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_regression 是否有任何参数组合可以生成 OMP 适用的数据?仍在寻找那个... 100 x 100 和 100 x 10 以同样的方式失败。

【讨论】:

也许这应该作为一个问题发布在scikit-learn github @JoãoAlmeida:是的,可能。我想确定这是一个错误,而不是 OMP 应该如何工作。我会先尝试一些更简单的合成数据。 @BaronYugovich:您对此还有其他问题吗?如果我回答了您的问题,请记得接受并奖励赏金。

以上是关于正交匹配追踪回归 - 我用错了吗?的主要内容,如果未能解决你的问题,请参考以下文章

[转]压缩感知重构算法之分段正交匹配追踪(StOMP)

在我的查询中使用 Point() 会产生奇怪的结果,是我用错了还是意料之中?

正交匹配追踪

以下回归模型中属于线性回归模型的都有哪些

缓存,原来我们一直都用错了!

Statsmodel 跳过逻辑回归中的值?