Python套索非零系数的最大数目
我有一个相当大的数据集,其中包括100多个系数和数千个条目。因此,我想使用套索方法进行模型训练 我目前正在查阅sci工具包文档,内容包括:Python套索非零系数的最大数目,python,matlab,scipy,scikit-learn,lasso-regression,Python,Matlab,Scipy,Scikit Learn,Lasso Regression,我有一个相当大的数据集,其中包括100多个系数和数千个条目。因此,我想使用套索方法进行模型训练 我目前正在查阅sci工具包文档,内容包括: 虽然实现看起来很简单,但我无法找到允许限制非零系数最大数量的输入参数,例如限制为10 更清楚地说,参数“DFMax”允许进行上述操作 在任何Python实现中都有这样的选项吗?直接限制非零系数的数量是一个NP难问题,这是LASSO渐近解决这个NP难问题的优点之一 我不知道DFMax在Matlab中的实现,但我的建议是执行以下操作: 使用LassoCV
在任何Python实现中都有这样的选项吗?直接限制非零系数的数量是一个NP难问题,这是LASSO渐近解决这个NP难问题的优点之一 我不知道DFMax在Matlab中的实现,但我的建议是执行以下操作:
我认为公认的答案不是最好的。这里是一个寻找一定数量套索系数的示例
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from scipy.optimize import differential_evolution
X, y = make_classification(n_samples=2000, n_features=50, n_informative=10, random_state=10)
logit = LogisticRegression(penalty='l1', C=1.0)
target = 10
def func(C):
logit = LogisticRegression(penalty='l1', C=C[0], solver='liblinear')
logit.fit(X, y)
n_nonzero = np.sum(logit.coef_ != 0)
return (target-n_nonzero)**2
differential_evolution(func, bounds=[(0, 2)], tol=0.1, maxiter=20)
我们已经找到了最佳正则化参数,以便正好有10个非零系数。+1,因为它似乎也没有DFMax参数。Hmm。只是理论上的一句话:对非零系数数量的硬约束将这个简单的问题(在复杂性类别P中)转化为一个通常不可行的硬问题(NP难)。不确定matlab是如何处理这个问题的(除了分支和边界之外,可能性不大)。我不会感到惊讶,看到一个巨大的性能下降,然后。例如,您可以在cvxpy中将该问题定义为混合整数规划问题。
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from scipy.optimize import differential_evolution
X, y = make_classification(n_samples=2000, n_features=50, n_informative=10, random_state=10)
logit = LogisticRegression(penalty='l1', C=1.0)
target = 10
def func(C):
logit = LogisticRegression(penalty='l1', C=C[0], solver='liblinear')
logit.fit(X, y)
n_nonzero = np.sum(logit.coef_ != 0)
return (target-n_nonzero)**2
differential_evolution(func, bounds=[(0, 2)], tol=0.1, maxiter=20)
logit = LogisticRegression(penalty='l1', C=0.03048243, solver='liblinear')
logit.fit(X, y)
np.sum(logit.coef_ != 0)