【发布时间】:2016-09-22 07:15:22
【问题描述】:
我有这个分类/回归任务,但最有趣的是每条记录的特征数量不同。特征已经提取并准备好了,因此数据的上下文是未知的,特征的值在-10到10之间波动。有超过200个特征的记录,同样有低于20个特征的记录.
数据框df 有两列:ID 和 ATTRIBUTES,输出如下所示:
ID ATTRIBUTES
0 1 1.1 2.1 3.3 4.4 5.5 6.6 ... 99.9 100.0 101.1 102.2
1 2 1.1 2.1 3.3 4.4 5.5 6.6 ... 45.0 46.0 47.0 49.0
2 3 1.1 2.1 3.3 4.4 5.5 6.6 ... 9.0 10.0 11.0 12.0
3 4 1.1 2.1 3.3 4.4 5.5 6.6 ... 70.0 71.0 72.0 73.0
4 5 1.1 2.1 3.3 4.4 5.5 6.6 ... 131.0 132.0 134.0 135.0
我已将 ATTRIBUTES 列拆分为单独的列:
df['ATTRIBUTES'].str.split(' ', expand=True).astype(float)
现在df 看起来像这样:
0 1 2 3 4 5 6 7 8 9 ... 131 132 133 134 135
0 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... NaN NaN NaN NaN NaN
1 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... NaN NaN NaN NaN NaN
2 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... NaN NaN NaN NaN NaN
3 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... NaN NaN NaN NaN NaN
4 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... 131.0 132.0 133.0 134.0 135.0
假设 record1 有 102 个特征,rec2 - 49、rec3-12、rec4-73、rec5 - 135。在拆分操作后,记录 rec1, rec2, rec3, rec4 填充了 NaN 值以填充数据框。
经过一番谷歌搜索后,我想出了以下想法:
- 首先想到的是使用有意义的功能更改
NaN值 Imputer; - 丢弃少于 20 个(40、60 等)特征的记录。
对于分类,我选择了RandomForest。
在验证 10% 的训练集(使用 train_test_split)时,基线性能约为 0.4117。
尽管我已经尝试了一切:
- Feature scaling - standardisation
- 通过主成分分析 (PCA) 降维
- 使用ExtraTreesClassifier 进行基于树的特征选择
基准性能没有提高到高于 0.4... 所以我的问题是——如果缺少特定记录的功能,应该如何处理?
【问题讨论】:
标签: python pandas machine-learning scikit-learn