数据预处理过程
数据清洗—>数据转换—>数据描述—>特征选择—>特征提取
为什么要进行数据预处理
原始的数据不利于直接进行数据挖掘,因为:
- 数据不完整
- 存在错误数据
- 数据存在重复信息
- 数据量过大
等等。。。
如何解决丢失的数据问题
- 进行选择性忽视
- 人工补全(比如重新收集、经验填充)
- 自动补全(利用数据的均值等)
等等。。。
离群点(Outlier)
如何对这些离群点进行检测
离群是相对的概念
局部异常因子算法-Local Outlier Factor(LOF)
distance k(B):距离B第k远的点的距离
d(A,B):A与B两点之间的距离
lrd(A):点A的局部可达密度
(密度越高,我们认为越可能属于同一簇,密度越低,越可能是离群点。)
LOFk(A):局部离群因子
(如果这个比值越接近1,说明A的其邻域点密度差不多,A可能和邻域同属一簇;如果这个比值越小于1,说明p的密度高于其邻域点密度,A为密集点;如果这个比值越大于1,说明A的密度小于其邻域点密度,A越可能是异常点。 )
Duplicate Data
两条数据可能对应的是同一个人,但数据的格式很有可能是不一样的
滑动窗口
高度近似的样本是彼此挨着的,可以使用滑动窗口
一般先创建关键字,然后进行排序再整合
数据类型转换和采样
数据的类型有很多种,连续型、离散型、文本数据…
格式不同同样会对我们对数据的处理带来很大的影响(如下面对调蓝绿可以简化编码)
采样
目的是为了提高数据处理效率
不平衡的数据
从上图可以看出,整体的准确率并不适用与不平衡的数据。分类器B的效果显然要比分类器A更好,但是它的整体准确率只有90%,小于分类器A的10%。
应该用下面的度量方式
其中混淆矩阵如下
F-measure和G-mean类似,只是角度不同而已
向上采样
如果两个类不均衡,比如红颜色远远多于蓝颜色,这样直接进行分类,会导致一些不太好的效果,比较好的一个思路是一个蓝颜色的点,找它的一个紧邻点,然后在该区域随机生成一个点
边缘采样
还有一种采样是提取边缘的点,有时候数据非常大,处理的话需要花费大量的时间,其实对于这些点来说,最外面的这些点是有价值的,我们可以只提取边缘的这些点,中间的这些数据可能并不参与到数据挖掘中。
我们可以根据密度或者法向量等的方法将边缘的点找出来,这样,我们只需要百分之几的点也能达到处理全部的数据的效果,为我们节省大量的时间。
标准化
我们拿到的原始数据可能变化不一,比如单位不统一等,所以我们需要对这些数据进行 Normalization。
有一种比较简单的方法就是将原始的数据映射到【0,1】区间。
数据描述
1、均值
2、中位数
3、Mode,频率最高的数据
4、Variance,衡量数据分布是密集还是分散
数据挖掘如何评价两件事情是否具有相关性
使用上图中概率论统计的公式:
r值大于0,两组数据正相关
r值小于0,两组数据负相关
r值等于0,两组数据不存在线性相关(但并不是不相关)
参考文献:清华大学-数据挖掘:理论与算法(国家级精品课)