sklearn逻辑回归 - 重要特征

时间:2014-06-17 04:28:21

标签: python scikit-learn feature-selection

我很确定以前曾被问过,但我找不到答案

在python上使用sklearn运行Logistic回归,我能够进行转换 我使用Transform方法将数据集转换为最重要的特征

classf = linear_model.LogisticRegression()
func  = classf.fit(Xtrain, ytrain)
reduced_train = func.transform(Xtrain)

如何判断哪些功能最重要? 更一般地说,我如何计算数据集中每个要素的p值?

3 个答案:

答案 0 :(得分:4)

LogisticRegression.transform使用threshold值来确定要保留的要素。直接来自文档字符串:

阈值:字符串,浮点数或无,可选(默认=无)         用于特征选择的阈值。特点是谁的         保持重要性大于或等于其他人         丢弃。如果“中位数”(分别为“均值”),则阈值为         特征重要性的中位数(或平均值)。缩放         也可以使用因子(例如,“1.25 * mean”)。如果是,如果         可用,使用对象属性threshold。除此以外,         默认情况下使用“mean”。

LR估算器上没有对象属性threshold,因此默认情况下只保留那些绝对值高于均值的要素(在对类进行求和之后)。

答案 1 :(得分:4)

正如上面的评论所示,您可以(并且应该)在您的拟合之前扩展您的数据,从而使系数具有可比性。下面是一个小代码,以显示这将如何工作。我按照this格式进行比较。

import numpy as np    
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
import pandas as pd
import matplotlib.pyplot as plt

x1 = np.random.randn(100)
x2 = np.random.randn(100)
x3 = np.random.randn(100)

#Make difference in feature dependance
y = (3 + x1 + 2*x2 + 5*x3 + 0.2*np.random.randn()) > 0

X = pd.DataFrame({'x1':x1,'x2':x2,'x3':x3})

#Scale your data
scaler = StandardScaler()
scaler.fit(X) 
X_scaled = pd.DataFrame(scaler.transform(X),columns = X.columns)

clf = LogisticRegression(random_state = 0)
clf.fit(X_scaled, y)

feature_importance = abs(clf.coef_[0])
feature_importance = 100.0 * (feature_importance / feature_importance.max())
sorted_idx = np.argsort(feature_importance)
pos = np.arange(sorted_idx.shape[0]) + .5

featfig = plt.figure()
featax = featfig.add_subplot(1, 1, 1)
featax.barh(pos, feature_importance[sorted_idx], align='center')
featax.set_yticks(pos)
featax.set_yticklabels(np.array(X.columns)[sorted_idx], fontsize=8)
featax.set_xlabel('Relative Feature Importance')

plt.tight_layout()   
plt.show()

答案 2 :(得分:3)

您可以查看拟合模型的coef_属性中的系数,以查看哪些要素最重要。 (对于LogisticRegression,所有transform正在查看哪些系数的绝对值最高。)

大多数scikit-learn模型都没有提供计算p值的方法。从广义上讲,这些模型旨在用于实际预测输出,而不是检查以收集有关预测如何完成的理解。如果您对p值感兴趣,可以查看statsmodels,尽管它不如sklearn成熟。