处理具有不同特征数的数据

2024-09-28 21:36:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个分类/回归任务,但最有趣的是每个记录的特征数量是不同的。特征已经被提取和准备,因此数据的上下文是未知的,特征的值在-10到10之间波动。有超过200个特征的记录,同样也有特征数量低于20的记录。你知道吗

数据帧df有两列:IDATTRIBUTES,输出如下所示:

      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。在分割操作之后,用NaN值填充rec1, rec2, rec3, rec4记录以填充数据帧。你知道吗

在谷歌搜索之后,我想到了以下想法:

  1. 第一个想法是使用 Imputer
  2. 丢弃特征少于20(40、60等)的记录。你知道吗

对于分类,我选择了RandomForest。你知道吗

基线性能约为0.4117,同时验证10%的训练集(使用train_test_split)。你知道吗

尽管我试了这么多:

  1. Feature scaling - standardisation
  2. 主成分分析降维
  3. 使用ExtraTreesClassifier的基于树的特征选择

基线性能没有提高超过0.4… 所以我的问题是-一个人应该如何处理特定记录缺少特征的问题?你知道吗


Tags: 数据iddf数量记录分类特征nan
1条回答
网友
1楼 · 发布于 2024-09-28 21:36:51

数据插补可能

  • 缺少属性的数据点只占数据点的一小部分
  • 每个数据点缺少的属性数量并不大。你知道吗

你得到糟糕结果的原因——至少就数据完整性而言——是因为你确实用插补扭曲了数据中的数据方差,实际上你掩盖了隐藏在原始数据中的任何潜在问题特定的元信息。分类问题的结果在很大程度上取决于数据的质量和模型的“正确性”。你知道吗

我会开始尝试几种不同的方法来处理这种数据问题。无论如何,这些都不是前进的唯一方法,哪种方法最适合您取决于您的问题和数据的具体情况。你知道吗

  1. 查看是否可以聚合某些“missing”或“extra”属性。是不是每个数据点都有固定数量的特性,然后可以通过某种方式聚合“可选”特性?

  2. 看看你是否能以这样一种方式来分段你的数据——在每一段中——你拥有相同数量的特征的数据点。然后尝试在这些片段中匹配分类器。

  3. 检查特征量和数据点类之间是否存在某种模式。

  4. 从数据集中删除所有具有NaN值的功能。

我希望这有点帮助!你知道吗

相关问题 更多 >