我正在构建一个自动清理过程,用于清除数据集中的空值。我发现很少有函数,如mode,median,mean,可以用来填充给定数据中的NaN值。但我应该选择哪一个?如果数据是分类的,则必须是模式或中值,而对于连续,它必须是均值或中值。因此,为了定义数据是分类的还是连续的,我决定制作机器学习分类模型。
我采取了很少的功能,如,
1)数据的标准偏差
2)数据中的唯一值数量
3)数据总行数
4)总行数的唯一比例
5)数据的最小值
6)数据的最大值
7)中位数和第75百分位数之间的数据
8)中位数和第25百分位数之间的数据
9)第75百分位数和上部胡须之间的数据数量
10)25%和更低胡须之间的数据数量
11)上晶须以上的数据
12)低于晶须的数据
首先使用这12个特征和大约55个训练数据,我使用标准化形式上的逻辑回归模型来预测标签1(连续)和0(分类)。
有趣的部分是有效的!!
但是,我是以正确的方式做到的吗?这是预测数据性质的正确方法吗?如果我可以进一步改进,请告诉我。
答案 0 :(得分:1)
数据分析看起来很棒。对于部分
但我应该选择哪一个?
就我测试而言,平均值总是胜利者。对于每个数据集,我都会尝试对所有案例进行测试并比较准确性。
有一种更好的方法,但有点耗时。如果你想推进这个系统,这可以提供帮助。
对于缺少数据的每个列,找到其最近的邻居并将其替换为该值。假设您有N列不包括目标,因此对于每列,将其视为因变量,将其余N-1列视为独立列。并找到它的最近邻居,然后它的输出(因变量)是缺失属性的期望值。
答案 1 :(得分:0)
但我应该选择哪一个?如果数据是分类的,则必须是模式或中位数,而对于连续数据,它必须是均值或中位数。
通常使用分类数据模式。对于连续 - 意味着。但我最近看到一篇文章,其中几何平均值用于分类值。 如果你构建一个使用带有nan的列的模型,你可以包含具有均值替换的列,中值替换以及布尔列'index is nan'。但最好不要在这种情况下使用线性模型 - 你可以面对相关性。
此外还有许多其他方法可以取代nan。例如,MICE算法。
关于您使用的功能。它们还可以,但我想建议添加一些与分发相关的功能,例如:
您可以根据正常数据+转换数据(log,exp)获得所有这些项目。
我解释一下:你可以在里面有一个包含许多类别的列。它可能看起来像旧的方法的数字列,但它没有数字。分布匹配算法可能对此有所帮助。
您也可以使用不同的规范化。来自sklearn的RobustScaler可能效果很好(如果类别的级别与'outlied'值非常相似,则可能会有所帮助。)
最后一条建议:你可以使用随机森林模型来获得重要的列。此列表可能为特征工程/生成提供一些方向。
而且,当然,看看错误分类矩阵以及错误发生的特征也是一件好事!