缺失值的处理
缺失值:信息(暂时)无法获取,丢失,冲突矛盾而不可用,获取代价大
1、删除
- 删除有缺失值的特征
- 删除有缺失值数据
删除的时候可以设定一个阈值x
如果这一个数据缺失值>x则丢弃
如果这一个特征有缺失数据数>x则丢弃
2、数据补齐
1、人工补齐
好,但费钱
2、特殊值填充
用一个特征的所有的空都用特殊值unknown来填充,形成另一种概念,但是很可能会导致严重的数据偏离
3、均值(众数)填充
连续型用均值,离散型用众数
4、热卡填充(就近补齐)
相当于k邻近算的k等于1。
就是在所有除了当前数据的缺失值其他都完整的数据中中找一个最像的来填充
5、k邻近算法
和上面一样,就是在最相似的k个中。
- 离散值:找出出现次数最多的来填充
- 连续值:加权平均
6、暴力所有的可能值
效果最好,但是代价比较大,尤其是在连续值的数据当中
7、回归
把完整的数据建立一个模型出来,然后预测空缺
8、期望值最大化的方法(EM)
1、在缺失值未随机缺失的情况下,假设完整的数据样本是正确的。
2、然后对这些数据的分布对缺失值做极大似然估计
1、E步:每次用上一次迭代得到的参数计算完整数据的对数似然函数和条件期望
2、M步:用极大化对数似然函数以确定参数
3、两次迭代之间的参数小于阈值则退出
适用于大数据,但是可能会陷入局部极值,收敛不快,计算复杂
9、C4.5法(分类)
对离散值:通过寻找属性之间的关系来对缺失值填充。
3、不处理
据说是直接在数据集上进行挖掘,暂时不知道和特殊值填充有什么区别
4、方法之间的比较
不推荐人工和特殊值
对于大多数数据情况而言:
删除、均值(众数)<热卡<knn<EM
- 毕竟删除,均值(众数)会破坏原始数据,较容易过拟合
- 热卡明显不如knn,毕竟knn不仅能把k调为1,还能调为其他,不过一般用热卡就行
回归<热卡<EM
- 我还没有试过回归和热卡的比较