python - 回归数据的 Scikit-learn 特征选择

标签 python scikit-learn

我正在尝试使用 Python 模块 scikit-learn 将单变量特征选择方法应用于 svmlight 格式的回归(即连续值响应值)数据集。

我正在使用 scikit-learn 0.11 版。

我尝试了两种方法 - 第一种失败了,第二种对我的玩具数据集有效,但我认为对于真实数据集会产生毫无意义的结果。

我希望获得有关可用于为回归数据集选择前 N 个特征的适当单变量特征选择方法的建议。我要么 (a) 弄清楚如何使 f_regression 函数工作,要么 (b) 听取其他建议。

上述两种方式:

  1. 我尝试使用 sklearn.feature_selection.f_regression(X,Y)。

失败并显示以下错误消息: “TypeError:copy() 恰好接受 1 个参数(给定 2 个)”

  1. 我尝试使用 chi2(X,Y)。这“有效”,但我怀疑这是因为我的玩具数据集中的两个响应值 0.1 和 1.8 被视为类标签?据推测,这不会为真实数据集产生有意义的卡方统计量,因为真实数据集会有大量可能的响应值,并且每个单元格中的数字 [具有特定的响应值和被测试属性的值] 将是低的?

请找到粘贴到此消息末尾的我的玩具数据集。

下面的代码片段应该给出我上面描述的结果。

from sklearn.datasets import load_svmlight_file

X_train_data, Y_train_data = load_svmlight_file(svmlight_format_train_file) #i.e. change this to the name of my toy dataset file

from sklearn.feature_selection import SelectKBest
featureSelector = SelectKBest(score_func="one of the two functions I refer to above",k=2) #sorry, I hope this message is clear
featureSelector.fit(X_train_data,Y_train_data)
print [1+zero_based_index for zero_based_index in list(featureSelector.get_support(indices=True))] #This should print the indices of the top 2 features

提前致谢。

理查德

我设计的 svmlight 文件的内容——为清楚起见插入了额外的空行:

1.8 1:1.000000 2:1.000000 4:1.000000 6:1.000000#mA

1.8 1:1.000000 2:1.000000#mB

0.1 5:1.000000#mC

1.8 1:1.000000 2:1.000000#mD

0.1 3:1.000000 4:1.000000#mE

0.1 3:1.000000#mF

1.8 2:1.000000 4:1.000000 5:1.000000 6:1.000000#mG

1.8 2:1.000000#mH

最佳答案

正如 larsmans 指出的,chi2 不能用于回归数据的特征选择。

更新到 scikit-learn 版本 0.13 后,以下代码为上述玩具数据集选择了前两个特征(根据 f_regression 测试)。

def f_regression(X,Y):
   import sklearn
   return sklearn.feature_selection.f_regression(X,Y,center=False) #center=True (the default) would not work ("ValueError: center=True only allowed for dense data") but should presumably work in general

from sklearn.datasets import load_svmlight_file

X_train_data, Y_train_data = load_svmlight_file(svmlight_format_train_file) #i.e. change this to  the name of my toy dataset file

from sklearn.feature_selection import SelectKBest
featureSelector = SelectKBest(score_func=f_regression,k=2)
featureSelector.fit(X_train_data,Y_train_data)
print [1+zero_based_index for zero_based_index in list(featureSelector.get_support(indices=True))]

关于python - 回归数据的 Scikit-learn 特征选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484011/

相关文章:

python - 从 softpedia.com 获取 Scrapy 下载安装程序

python - 如何使用 Python Pulp 将主题限制为四舍五入整数

python - RDD 沿袭/Spark 操作图的良好输出

python - 振幅和相位谱。改变相位,保持振幅不变

python - 如何获得使用 GridSearchCV 尝试的每个模型的 F1 分数和准确度?

machine-learning - 支持稀疏矩阵和多标签输出的逻辑回归?

python - 如何获取 channel 中所有消息的列表,然后从该列表中随机选择一条消息作为消息发送?

machine-learning - 保存/重用基于 doc2vec 的模型进行进一步预测

python - 如何在内存中加载 scikit-learn 机器学习模块?

python - 报告 scikit-learn 中 DecisionTreeClassifier 的学习树的深度和叶子数量