论剔除噪声(异常)数据的问题
似乎是一个老生常谈的话题,有很多文章研究过这个,
但始终没有一个完美的或者robust的答案,尤其当数据多维度的时候。
去噪,每次分析数据之前,总是要考虑的一个问题,异常数据常常
会使得分析的结果偏离真实的结果。
当数据维度较低的时候,可以通过散点图,box图(分位数)等等
来逐个对指标分析,剔除含有异常数据的观测,工作量不算大,
剔除的观测也不算多。
在我的工作中,多数情况是面对的几十个上百个的指标,逐个
去检验每个指标,写个宏,做个批处理或许可行;然而每个指标都会
对应一批异常用户,不同指标对应的用户又不会完全重复。
这么一来,含有异常数据的观测数,是十分可观的。如果都剔除,
信息损失未免过大了。
如此看来,倒是很羡慕那些"抗噪"能力强的算法了;
比如决策树,不管C5.0还是CHIAD,从其算法来看,异常的数据确实对
其没什么影响。
亦或者K-median,传统的K-MEANS,过大过小的异常数据,总是会使得类的
中心(均值)偏大或偏小,而以中位数来作为类的中心,这种影响就非常小了。
不过可惜的是,多数的算法的"抗造"能力是很差的,比如logistic回归,KNN,
BP神经网络,判别分析,广义线性模型等等。
很多耳熟能详的算法,抗噪效果都不是很好,但是在没有噪声数据的情况下,
这些算法的作用又是不言而喻的。
所以如何去噪,成了一件基本却十分重要的任务了。
一般去噪,大的方向来说有两类,一是"删除"异常值,即上面所讲的,
二是"转化"异常值。
比如将数据转化为秩,又如分位数分箱,前1%的数据记为1,
前2%的数据记为2,以此类推。
这样一来,确实摆脱了异常值,但将连续型的数据转为秩,
或者转为1-100,1-1000等等,信息的损失是无法避免的。
第一种方法,由于观测的删除造成信息损失,第二种则由于数据形态的
转变造成信息损失。
很多时候,在不能保证原汁原味的数据情况下,少许的信息损失也是可以接受的,
不同的去噪方法,造成的信息损失自然各不相同。
在此希望各位坛友,积极讨论,集思广益,多多补充去噪的方法。