正则化 l1 逻辑回归特征选择在重新运行时返回不同的 coef_

Posted

技术标签:

【中文标题】正则化 l1 逻辑回归特征选择在重新运行时返回不同的 coef_【英文标题】:Regularized l1 Logistic regression Feature Selection returns different coef_ when rerun 【发布时间】:2021-04-06 01:11:26 【问题描述】:

这里已经提到了一个奇怪的问题:LinearSVC Feature Selection returns different coef_ in Python

但我无法真正理解这一点。

我有一个正则化 L1 逻辑回归,用于特征选择。 当我只是重新运行代码时,所选功能的数量会发生变化。 目标变量为二进制 1, 0。特征数为 709。训练观察数为 435,因此特征多于观察数。罚分 C 是通过 TimeSeriesSplit CV 获得的,并且在我重新运行时永远不会改变,我验证了这一点。

下面是特征选择部分的代码..

X=df_training_features 
y=df_training_targets
lr_l1 = LogisticRegression(C = LR_penalty.C, max_iter=10000,class_weight=None, dual=False, 
                           fit_intercept=True, intercept_scaling=1, l1_ratio=None, n_jobs=None, 
                           penalty='l1', random_state=None, solver='liblinear', tol=0.0001, verbose=0, 
                           warm_start=False).fit(X,y)
model = SelectFromModel(lr_l1, threshold=1e-5, prefit=True)

feature_idx = model.get_support() 
feature_name = X.columns[feature_idx]
X_new = model.transform(X)

# Plot
importance = lr_l1.coef_[0]
for i,v in enumerate(importance):
    if np.abs(v)>=1e-5:
        print('Feature: %0d, Score: %.5f' % (i,v))
sel = importance[np.abs(importance)>=1e-5]
# plot feature importance
plt.figure(figsize=(12, 10))
pyplot.bar([x for x in feature_name], sel)
pyplot.xticks(fontsize=10, rotation=70)
pyplot.ylabel('Feature Importance', fontsize = 14)
pyplot.show()

如上所示,结果有时会选择 22 个特征(第一个图),有时会选择 24 个(第二个图)或 23 个。不确定发生了什么。我认为问题出在 SelectFromModel 中,所以我决定明确声明阈值 1e-5(这是 l1 正则化的默认值),但没有任何变化。

总是相同的特征有时进有时出,所以我检查了它们的系数,因为我认为它们可能接近该阈值而不是它们(高 1 或 2 个数量级)。

可以请任何人帮忙吗?我已经为此苦苦挣扎了一天多

【问题讨论】:

尝试修复random_state=42 【参考方案1】:

你使用了solver=liblinear。来自documentation:

random_state : int,RandomState 实例,默认=None

在solver == ‘sag’、‘saga’或‘liblinear’时使用来打乱数据。有关详细信息,请参阅词汇表。

所以尝试为random_state 设置一个固定值,您应该会收敛到相同的结果。

经过非常快速的搜索,我发现liblinear 使用坐标下降来最小化成本函数(source)。这意味着它将选择一组随机系数并一次一步最小化成本函数。我想你的结果会略有不同,因为它们都从不同的点开始。

【讨论】:

感谢您的帮助。你知道为什么 liblinear 需要这种 shuffle 吗?背后的原因是什么?非常感谢 没问题(;我在答案中添加了一段。希望对您有所帮助!

以上是关于正则化 l1 逻辑回归特征选择在重新运行时返回不同的 coef_的主要内容,如果未能解决你的问题,请参考以下文章

7逻辑回归实践

机器学习中正则化项L1和L2的直观理解

7.逻辑回归实践

L1/L2正则化方法

l1/l2 正则化导致 vowpal wabbit 中所有特征权重为零是不是合理?

机器学习之路: python线性回归 过拟合 L1与L2正则化