整体而言,树模型+bayes对于缺失值都不太敏感;涉及到度量问题的模型(SVM+KNN)就相对敏感。
决策树
其实缺失值问题可以从三个方面来考虑
- 在选择分裂属性的时候,训练样本存在缺失值,如何处理?假如你使用ID3算法,那么选择分类属性时,就要计算所有属性的熵增(信息增益,Gain)。假设10个样本,属性是a,b,c。在计算a属性熵时发现,第10个样本的a属性缺失,那么就把第10个样本去掉,前9个样本组成新的样本集,在新样本集上按正常方法计算a属性的熵增。然后结果乘0.9(新样本占raw样本的比例),就是a属性最终的熵。
- 分裂属性选择完成,对训练样本分类,发现属性缺失怎么办?比如该节点是根据a属性划分,但是待分类样本a属性缺失,怎么办呢?假设a属性离散,有1,2两种取值,那么就把该样本分配到两个子节点中去,但是权重由1变为相应离散值个数占样本的比例。然后计算错误率的时候,注意,不是每个样本都是权重为1,存在分数。
例如:a=1的占30%,a=2的占70%.则这里可以将原来的一个样本,划分0.3个向左分支,划分0.7个向右分支。 - 训练完成,给测试集样本分类,有缺失值怎么办?这时候,就不能按比例分配了,因为你必须给该样本一个确定的label,而不是薛定谔的label。这时候根据投票来确定,或者填充缺失值。
- 简单粗暴快速的方法:利用中位数或者出现次数最多的树,替代
网友评论