Python:如何正确处理熊猫DataFrame中的NaN,以在Scikit-learn中进行功能选择

基尔格罗鳟鱼

这与我在这里发布的一个问题有关,但是这个问题更具体,更简单。

我有一个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的正确方法?

编辑:我想补充一点,如果有一个合理的指标可以让我继续进行功能选择,我很乐意从上面更改“成功”的指标。我只是试图确定哪些事件可以有效地吸引用户的兴趣。它是开放式的,主要是练习功能选择的练习。

谢谢!

Azmy Rajab |

如果我理解正确,那么您希望从NaN清除数据而不显着改变其中的统计属性-这样您就可以运行一些分析后言。

我最近实际上遇到了类似的事情,您可能会感兴趣的一种简单方法是使用sklearn的“ Imputer”。如EdChum先前所述,一种想法是用轴上的均值代替。其他选项包括例如替换为中位数。

就像是:

from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='mean', axis=1)
cleaned_data = imp.fit_transform(original_data)

在这种情况下,这将用每条轴上的平均值替换NaN(例如,让我们根据事件进行估算,使axis = 1)。然后,您可以对清除的数据进行四舍五入,以确保得到0和1。

我将通过事件为数据绘制一些直方图,以理智地检查这种预处理是否会显着改变您的分布-因为我们可能会通过在每个轴上将太多的值交换为均值/众数/众数/中位数来引入过多的偏差。

参考链接:http : //scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Imputer.html

再往前走一步(假设以上内容还不够),您可以选择执行以下操作:

  • 删除所有nan数后,获取数据中的每个事件列,并计算出参加('p')与未参加('1- p')的概率。[即p =参加/(参加+不参加)]
  • 然后,使用从伯努利分布生成的随机数替换每个事件列上的NaN数,我们将其与您估计的'p'进行拟合,大致类似于:

    import numpy as np

    n = 1 # number of trials

    p = 0.25 # estimated probability of each trial (i.e. replace with what you get for attended / total)

    s = np.random.binomial(n, p, 1000)

    # s now contains random a bunch of 1's and 0's you can replace your NaN values on each column with

再说一次,这本身并不完美,因为您仍将最终稍微偏向数据(例如,更准确的方法是考虑每个用户事件之间数据的依存关系),而是通过大致匹配来采样分布至少比用平均值等任意替换更健壮。

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何正确处理python中的可选功能

来自分类Dev

如何使用scikit-learn中的Information Gain度量选择Dataframe中的最佳功能

来自分类Dev

如何在Sympy中进行功能组合?

来自分类Dev

如何在emacs中进行反向选择?

来自分类Dev

如何在jQuery中进行HTML选择

来自分类Dev

如何:从互斥的多个CTE中进行选择

来自分类Dev

如何:从互斥的多个CTE中进行选择

来自分类Dev

如何:从互斥的多个CTE中进行选择

来自分类Dev

如何在“单个查询”中进行选择?

来自分类Dev

使用Python从列表中进行多项选择

来自分类Dev

选择带有'%'的数据并在熊猫中进行处理的问题

来自分类Dev

bash-completion:如何在不同的选择中进行选择

来自分类Dev

如何在mysql中进行循环以进行选择语法

来自分类Dev

如何从Django ORM中的多个表中进行选择?

来自分类Dev

如何在Java的sqlite中从多个表中进行选择?

来自分类Dev

无法从Python fdb中以“ @”开头的表中进行选择

来自分类Dev

使用MultiIndex时按年份在熊猫中进行索引/选择

来自分类Dev

Java中在haskell中进行映射或在C#中进行选择的等效方法是什么?

来自分类Dev

地图功能如何在Scala中进行排序

来自分类Dev

如何在镜头中进行功能类型检查

来自分类Dev

在我的 WordPress 网站中进行评论后,如何触发功能?

来自分类Dev

重复功能几次,而无需在python中进行for循环

来自分类Dev

使用保留集在scikit-learn中的RandomizedSearchCV中进行验证?

来自分类Dev

编码风格的监督学习-功能选择(Scikit Learn)

来自分类Dev

如何在scikit-learn的`pipeline'中使用自定义功能选择功能

来自分类Dev

如何在scikit Learn,Python中处理名义数据?

来自分类Dev

如何在Angular中进行相关选择?

来自分类Dev

您如何在MASM Assembly中进行选择排序?

来自分类Dev

用户在ComboBox中进行选择时,如何更新DataGrid?

Related 相关文章

  1. 1

    如何正确处理python中的可选功能

  2. 2

    如何使用scikit-learn中的Information Gain度量选择Dataframe中的最佳功能

  3. 3

    如何在Sympy中进行功能组合?

  4. 4

    如何在emacs中进行反向选择?

  5. 5

    如何在jQuery中进行HTML选择

  6. 6

    如何:从互斥的多个CTE中进行选择

  7. 7

    如何:从互斥的多个CTE中进行选择

  8. 8

    如何:从互斥的多个CTE中进行选择

  9. 9

    如何在“单个查询”中进行选择?

  10. 10

    使用Python从列表中进行多项选择

  11. 11

    选择带有'%'的数据并在熊猫中进行处理的问题

  12. 12

    bash-completion:如何在不同的选择中进行选择

  13. 13

    如何在mysql中进行循环以进行选择语法

  14. 14

    如何从Django ORM中的多个表中进行选择?

  15. 15

    如何在Java的sqlite中从多个表中进行选择?

  16. 16

    无法从Python fdb中以“ @”开头的表中进行选择

  17. 17

    使用MultiIndex时按年份在熊猫中进行索引/选择

  18. 18

    Java中在haskell中进行映射或在C#中进行选择的等效方法是什么?

  19. 19

    地图功能如何在Scala中进行排序

  20. 20

    如何在镜头中进行功能类型检查

  21. 21

    在我的 WordPress 网站中进行评论后,如何触发功能?

  22. 22

    重复功能几次,而无需在python中进行for循环

  23. 23

    使用保留集在scikit-learn中的RandomizedSearchCV中进行验证?

  24. 24

    编码风格的监督学习-功能选择(Scikit Learn)

  25. 25

    如何在scikit-learn的`pipeline'中使用自定义功能选择功能

  26. 26

    如何在scikit Learn,Python中处理名义数据?

  27. 27

    如何在Angular中进行相关选择?

  28. 28

    您如何在MASM Assembly中进行选择排序?

  29. 29

    用户在ComboBox中进行选择时,如何更新DataGrid?

热门标签

归档