数据无处不在,数据的形式也多种多样,在这篇文章主要说一下数据的一些特征和常用的一些处理方法。这里引用一句在《Matlab技术论坛数据挖掘公开课》中看到的:
干渴的水手,看到海水也能满足他们对水的渴望 ------Rime of Ancient Mariner《老水手之歌》
搞数据的人,看到数据,也就看到信息的期待。根据公开课,本文分了3个部分,就个人的理解,进行了一些总结:
1.数据结构与类型
属性类型 | 描述 | 例子 | 操作 |
分类(定性) | 标称 | 邮编、ID、眼球颜色、gender | 众数、熵、列联相关、卡方 |
序数 | 成绩(好,较好,良好) | 中值,百分位数,秩相关、 游程检验、符号检验 | |
数值(定量) | 区间 | 日历日期、摄氏 | 均值、标准差、皮尔森相关、 t和F检验 |
比率 | 绝对温度、货币量、计数、年龄、质量、长度 | 几何平均、调和平均、百分比变差 |
离散:有限或者无限可能个值 比如:二元(0、1)
连续:取实数值(温度、高度、重量等)
2.数据的特征
(1)维度
(2)稀疏性
(3)分辨率
3.数据质量
(1)特殊的列
a.只有一种值的“列”
这类的信息对于建模是没有贡献信息的,应该忽略他们
b.几乎只含一种值的列
数据偏态,一般以均值为参考点,如果大多数值分布在均值左边,则称为右偏;如果大多数值分布在均值的右边,则称为左偏。这类数据,一般按照拇指法则,如果一个数据95%~99%的值都相同,那么就应该忽略它。
c.列的值各不相同
不能直接用为特征,但是可以从中衍生出一些有用的特征,比如:地址(地址信息一般是唯一的,但是可以提取出地方等信息)
(2)测量误差和数据收集错误
(3)噪声和伪像
噪声是测量误差的随机部分,可能涉及值的扭曲和附加的谬误对象
伪像:是一种更确定性的现象,比噪声更有规律,比如:一组照片同一地方的条纹
(4)离群点
异常对象或异常值,主要处理方案:
1.漠然处之,直接交给算法处理(比如:决策树)
2.滤掉含有离群点的行 不推荐---歧视性抽样
3.忽略相应的列
4.采用预测值,用其余列的值来预测缺失的列中的数据(比如:0,平均值,极大极小值)
5.对数据做等高分组,比如:(身高,收入等)---这个比较推荐,在更高的维度中处理掉离群点
(5)缺失数据
处理方案:
1.漠然处之,交给算法处理
2.滤掉含有缺失值的行
3.忽略相应的列 减少一维/用一个显示数据是否缺失的标示变量替代
4.采用预测值,用其余列的值来预测缺失列中的数据---比较推荐
5.建立独立的模型---比较推荐
6.更改运作系统(不实用)
4.数据挖掘预处理
1.聚集
将两个或者多个对象合并成单个对象,通过聚集,可以减少内存的使用和处理时间,通过高层的视图对低层的数据有更好的解释性,及属性的稳定性。
2.抽样
1.简单随机抽样:无放回抽样、有放回抽样
2.分层抽样
3.分组抽样
3.维规约
通过维规约的技术,比如:PCA、LDA、SVD等方法,通常通过规约,删除不相关的特征,去相关性,可以得到更好的效果,同时,模型更能理解,容易可视化,减低了数据挖掘算法的时间和内存要求。
4.特征子集选择
从特征集中,选择一个子集参与模型的建立,可以去掉一些冗余特征、不相关的特征
三种标准的特征选择方法:嵌入,过滤,包装
5.变量变换
用于变量的所有值的变换,比如简单函数:log(x)、1/x、sin(x)、|x|、e^x、x^k等
但是变量变换也可以改变数据的一些特性,所以要小心使用
规范化和标准化:x' = (x-xavg)/Sx