Sklearn单变量选择类型错误

时间:2017-12-17 05:57:05

标签: machine-learning scikit-learn

我遇到了以下代码的类型错误,其中因子A和B用于预测C

df = df[['A','B','C']]
print (df.head())
print (df.tail())


from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

names = ['A','B']
for n in range(0, len(names)):
    test = SelectKBest(score_func=chi2, k=all)
    fit = test.fit(X_train, y_train)

    print(" %s : %.2f") % (names[n], fit.scores_[n])

数据框如下

           A         B              C
1  -0.000078  0.115441              0
2  -0.002767  0.089734              1
3  -0.000848  0.069986              1
4   0.001235  0.079025              1
5   0.004776  0.087153              0
              A        B               C
2831  -0.001210  0.109015              1
2832  -0.003597  0.109474              1
2833   0.000190  0.115139              1
2834   0.003153  0.134228              1
2835   0.005453  0.133333              0

它产生以下错误

TypeError: '<=' not supported between instances of 'int' and 'builtin_function_or_method'

我不明白如何解决这个错误,有人可以提出建议吗?

1 个答案:

答案 0 :(得分:0)

SelectKBest(score_func=chi2, k=all)

all是一个内置的Python函数。你需要的是

SelectKBest(score_func=chi2, k="all")

拥有字符串

此外,对于此方法,X值必须为非负值,因此如果您使用df[['A', 'B']]作为X_train也会出现问题。

最后,将fit方法放在该循环中是没有意义的。您可能想要打印循环。

这是一个有效的例子;我取了abs个X值使它们成为非负值;在你的背景下这是否有意义我无法分辨。

test = SelectKBest(score_func=chi2, k="all")
fit = test.fit(np.abs(df[['A', 'B']]), df['C'])
for n in range(len(names)):
  print("{} : {:.2g}".format(names[n], fit.scores_[n]))