我想使用Python模块scikit-learn以svmlight格式回归(即连续值响应值)数据集应用单变量特征选择方法。回归数据的Scikit学习功能选择
我正在使用scikit-learn版本0.11。
我尝试了两种方法 - 第一种方法失败,第二种方法适用于我的玩具数据集,但我相信会给真实数据集带来无意义的结果。
我想咨询一下适用的单变量特征选择方法,我可以将其应用于选择回归数据集的前N个特征。我想或者(a)想出如何使f_regression函数起作用,或者(b)听取其他建议。
上面提到的两种方法:
- 我尝试使用sklearn.feature_selection.f_regression(X,Y)。
这失败,出现以下错误消息: “类型错误:复制()正好需要1个参数(2给出)”
- 我尝试使用χ2(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#毫安
1.8 1: 1.000000 2:1.000000#的mB
0.1 5:1.000000#三菱商事
1.8 1:1.000000 2:1.000000#毫达西
0.1 3:1.000000 4:1.000000#ME
0.1 3:1.000000#μF的
1.8 2:1.000000 4:1.000000 5:1.000000 6:1.000000#毫克
1.8 2:1.000000# mH
'chi2'仅用于分类。要使其在回归设置中工作,您必须存储Y值。 – 2013-03-19 13:05:20
谢谢larsmans。我认为是这种情况,但是在猜测chi2可能会在内部回归y值“幕后”。我意识到我目前的scikit-learn安装是旧的,所以我会在再次提出问题之前尝试使用最新版本的f_regression。 – user1735732 2013-03-20 09:20:44