【问题标题】:Processing data with different number of features处理具有不同数量特征的数据
【发布时间】:2016-09-22 07:15:22
【问题描述】:

我有这个分类/回归任务,但最有趣的是每条记录的特征数量不同。特征已经提取并准备好了,因此数据的上下文是未知的,特征的值在-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。在拆分操作后,记录 rec1, rec2, rec3, rec4 填充了 NaN 值以填充数据框。

经过一番谷歌搜索后,我想出了以下想法:

  1. 首先想到的是使用有意义的功能更改 NaNImputer;
  2. 丢弃少于 20 个(40、60 等)特征的记录。

对于分类,我选择了RandomForest

在验证 10% 的训练集(使用 train_test_split)时,基线性能约为 0.4117。

尽管我已经尝试了一切:

  1. Feature scaling - standardisation
  2. 通过主成分分析 (PCA) 降维
  3. 使用ExtraTreesClassifier 进行基于树的特征选择

基准性能没有提高到高于 0.4... 所以我的问题是——如果缺少特定记录的功能,应该如何处理?

【问题讨论】:

    标签: python pandas machine-learning scikit-learn


    【解决方案1】:

    数据插补可能

    时起作用
    • 缺少属性的数据点仅占您数据点的一小部分
    • 每个数据点的缺失属性数量并不多。

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

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

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

    2. 查看您是否可以通过以下方式对数据进行分段:在每个分段中,您的数据点拥有相同数量的特征。然后尝试将您的分类器适合这些细分。

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

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

    我希望这会有所帮助!

    【讨论】:

    • 1.记录之间缺少特征(在某些情况下超过 200 个特征)之间存在巨大差距,因此我不确定额外的特征聚合是否会有所帮助。 2. 我做了类似的事情——通过“切断”额外的特征列来减少特征的数量,因此所有的记录都可以有相同数量的特征,即使一些重要的特征可能被消除了。 3.假设有这样的模式,我应该如何处理这些信息?
    • 如果检测到这样的模式,那么向所有数据点添加一个封装此信息的新功能可能会有所帮助,您可以使用比例然后“切断”“额外”特征并尝试适应所有数据点的特征加上新特征。该特征将作为您在特征量和类别标签之间发现的相关性的“指标”。
    猜你喜欢
    • 2021-04-28
    • 2023-01-13
    • 2017-04-05
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多