【发布时间】:2015-05-20 12:48:16
【问题描述】:
这与我在here 发布的一个问题有关,但这个问题更具体、更简单。
我有一个 pandas DataFrame,它的索引是唯一的用户标识符,列对应于唯一的事件,值 1(已参加)、0(未参加)或 NaN(未受邀/不相关)。对于 NaN,矩阵非常稀疏:有数百个事件,大多数用户最多只被邀请到几十个。
我创建了一些额外的列来衡量“成功”,我将其定义为相对于邀请的出席率:
my_data['invited'] = my_data.count(axis=1)
my_data['attended'] = my_data.sum(axis=1)-my_data['invited']
my_data['success'] = my_data['attended']/my_data['invited']
我现在的目标是对事件/列进行特征选择,从最基本的基于方差的方法开始:删除那些低方差的。然后我会查看事件的线性回归,并只保留那些具有大系数和小 p 值的事件。
但我的问题是我有这么多 NaN,我不确定处理它们的正确方法是什么,因为大多数 scikit-learn 方法会因为它们而给我错误。一个想法是将“没有参加”替换为 -1,将“未受邀”替换为 0,但我担心这会改变活动的意义。
谁能建议在不改变每个特征/事件的统计显着性的情况下处理所有这些 NaN 的正确方法?
编辑:我想补充一点,如果有一个合理的指标可以让我继续进行特征选择,我很乐意从上面更改我的“成功”指标.我只是想确定哪些事件在捕捉用户兴趣方面是有效的。它非常开放,这主要是练习特征选择的练习。
谢谢!
【问题讨论】:
-
恐怕没有通用的答案,删除它们可能会使您的模型表现不佳,因为它没有足够的样本数据,而将它们全部设置为 0 或 -1 可能实际上会损害其他特征。我会将性能与将它们设置为 0、-1 以及平均值进行比较。我发现将其设置为均值不会使我的模型产生偏差,我使用了随机森林,但对于某些模型,它可能会使特征权重产生偏差
标签: python pandas scikit-learn feature-selection