我有这个分类/回归任务,但最有趣的是每条记录的功能数量不同。功能已经被提取并且已经准备好,因此数据的上下文是未知的,并且特征的值从-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
值以填充数据帧。< / p>
经过一些谷歌搜索后,我想出了以下想法:
NaN
值
Imputer; 对于分类,我选择了RandomForest。
基线表现约为0.4117,同时验证了10%的训练集(使用train_test_split)。
尽管我尝试了一切:
基线表现并未高于0.4 ...... 所以我的问题是 - 如何继续缺少特定记录的功能?
答案 0 :(得分:0)
时,数据插补可能有效
您得到的结果不佳 - 至少就数据完整性而言 - 是因为您实际上是通过插补来扭曲数据中的数据差异,实际上您是伪装任何潜在的特定于问题的元信息隐藏在原始数据中。您在分类问题上的工作结果非常依赖于数据的质量和模型的“正确性”。
我会开始尝试几种不同的方法来处理这类数据问题。无论如何,这些并不是唯一可行的方法,哪种方式最适合您,取决于您的问题和数据的具体情况。
查看是否可以聚合某些“缺失”或“额外”属性。可能是每个数据点都有固定数量的功能,然后是“可选”功能,可以通过某种方式进行聚合吗?
看看您是否可以按照以下方式细分数据 - 在每个细分中 - 您拥有的数据点数量相同。然后尝试将分类器放在这些段中。
检查要素数量和数据点类别之间是否存在某种模式。
删除数据集中包含NaN
值的所有功能。
我希望这有点帮助!