繁体   English   中英

Python:sci-kit中的特征选择可以学习正态分布

[英]Python: feature selection in sci-kit learn for a normal distribution

我有一个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']

假设以下情况属实 :成功数据应正态分布,均值为0.80,sd为0.10。 当我查看my_data['success']的直方图时,它不正常并向左倾斜。 如果在现实中这是真的,那就不重要了。 我只想解决下面提出的技术问题。

所以这就是我的问题 :有一些事件我不认为是“好”的,因为它们使成功数据偏离正常。 我想在我的事件上做“特征选择”来挑选它们的一个子集,这使得my_data['success'] 分布在“分配收敛”的意义上尽可能接近正常。

我在这里查看了scikit-learn “特征选择”方法,“单变量特征选择”看起来很有意义。 但我对pandasscikit-learn都很新,并且可以真正使用如何在代码中实际实现它的帮助。

half the original events. 约束:我需要保留原始事件的一半。

任何帮助将不胜感激。 请分享尽可能多的详细信息,我对这些库非常新,并且很想看看如何使用我的DataFrame执行此操作。

谢谢!

编辑 :在更多地scikit-learn特征选择方法之后,“递归特征选择”似乎也可能在这里有意义但我不确定如何构建它,我的“准确度”度量标准“接近正常”分布均值...“

请记住,功能选择是选择要素,而不是样本,即(通常)数据DataFrame的列,而不是行。 因此,我不确定功能选择是否符合您的要求:我了解您是否要删除导致分布偏差的样本?

此外,如何进行特征缩放,例如标准化,以便您的数据变为正态分布,均值= 0且sd = 1?

方程式只是z =(x - mean)/ sd

要将它应用于您的DataFrame,您可以这样做

my_data['success'] = (my_data['success'] - my_data['success'].mean(axis=0)) / (my_data['success'].std(axis=0))

但是,不要忘记保留均值和SD参数来转换测试数据。 或者,您也可以使用scikit-learn中的StandardScaler

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM