如何使用权重在逻辑回归中获得特征重要性?

Posted

技术标签:

【中文标题】如何使用权重在逻辑回归中获得特征重要性?【英文标题】:How to get feature importance in logistic regression using weights? 【发布时间】:2018-12-29 23:20:01 【问题描述】:

我有一个评论数据集,其类别标签为正面/负面。我正在对该评论数据集应用逻辑回归。首先,我正在转换成词袋。这里 sorted_data['Text']reviewsfinal_counts稀疏矩阵

count_vect = CountVectorizer() 
final_counts = count_vect.fit_transform(sorted_data['Text'].values)
standardized_data = StandardScaler(with_mean=False).fit_transform(final_counts)

将数据集拆分为训练和测试

X_1, X_test, y_1, y_test = cross_validation.train_test_split(final_counts, labels, test_size=0.3, random_state=0)
X_tr, X_cv, y_tr, y_cv = cross_validation.train_test_split(X_1, y_1, test_size=0.3)

我正在应用逻辑回归算法如下

optimal_lambda = 0.001000
log_reg_optimal = LogisticRegression(C=optimal_lambda)

# fitting the model
log_reg_optimal.fit(X_tr, y_tr)

# predict the response
pred = log_reg_optimal.predict(X_test)

# evaluate accuracy
acc = accuracy_score(y_test, pred) * 100
print('\nThe accuracy of the Logistic Regression for C = %f is %f%%' % (optimal_lambda, acc))

我的体重是

weights = log_reg_optimal.coef_ .   #<class 'numpy.ndarray'>

array([[-0.23729528, -0.16050616, -0.1382504 , ...,  0.27291847,
         0.35857267,  0.41756443]])
(1, 38178) #shape of weights

我想获得特征重要性,即;前 100 个具有高权重的特征。谁能告诉我如何获得它们?

【问题讨论】:

为什么不取weights的绝对值,然后保持前100名?? 是的。我还需要前 100 个具有高权重的单词。 【参考方案1】:

调查线性分类模型中给定特征/参数的“影响”或“重要性”的一种方法是考虑幅度 系数

这是最基本的方法。用于查找特征重要性或参数影响的其他技术可以提供更多洞察力,例如使用 p 值bootstrap 分数、各种“判别指数”、等等


在这里,您已经标准化了数据,所以直接使用这个

weights = log_reg_optimal.coef_
abs_weights = np.abs(weights)

print(abs_weights)

如果您查看原始weights,则负系数意味着相应特征的较高值将分类更推向负类。


编辑 1

获取特征名称的示例:

import numpy as np

#features names
names_of_variables =np.array(['a','b','c','d'])

#create random weights and get the magnitude
weights = np.random.rand(4)
abs_weights = np.abs(weights)

#get the sorting indices
sorted_index = np.argsort(abs_weights)[::-1]

#check if the sorting indices are correct
print(abs_weights[sorted_index])

#get the index of the top-2 features
top_2 = sorted_index[:2]

#get the names of the top 2 most important features
print(names_of_variables[top_2])

【讨论】:

【参考方案2】:

如果您使用逻辑回归模型,则可以使用递归特征消除 (RFE) 方法来选择重要特征并从预测变量列表中过滤掉冗余特征。此功能在 scikit-learn 库中可用。您可以参考以下链接获取详细信息:https://machinelearningmastery.com/feature-selection-machine-learning-python/

此方法根据重要性对特征进行排名,您可以选择前 n 个特征进行进一步分析。

【讨论】:

以上是关于如何使用权重在逻辑回归中获得特征重要性?的主要内容,如果未能解决你的问题,请参考以下文章

使用逻辑回归进行特征选择

如何使用 SVM 的权重向量和逻辑回归进行特征重要性?

pyspark,逻辑回归,如何获得各个特征的系数

使用逻辑回归时如何打印特征重要性的简单列表?

如何获得逻辑回归中的权重向量?

如何将从逻辑回归模型获得的系数映射到pyspark中的特征名称