我很确定以前曾被问过,但我找不到答案
在python上使用sklearn运行Logistic回归,我能够进行转换 我使用Transform方法将数据集转换为最重要的特征
classf = linear_model.LogisticRegression()
func = classf.fit(Xtrain, ytrain)
reduced_train = func.transform(Xtrain)
如何判断哪些功能最重要? 更一般地说,我如何计算数据集中每个要素的p值?
答案 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成熟。