数据中存在的问题
数据预处理是数据挖掘中的重要一环,必不可少。要更有效地挖掘出知识,就必须为其提供干净、准确、简洁的数据。
1、现实中数据大体上都是不完整,不一致的脏数据,无法直接进行数据挖掘,或挖掘结果差强人意
2、数据的不一致:各系统间的数据存在较大的不一致性
如属性重量的单位:A数据库重量单位kg,B数据库重量单位g
3、噪声数据:数据中存在着错误或异常(偏离期望值)
如:血压或身高为0
4、缺失值:由于实际系统设计时存在的缺陷以及使用过程中的一些人为因素,数据记录可能会出现数据值的丢失或不确定
数据预处理的任务
- 数据清理(清洗)
去掉数据中的噪声,纠正不一致
- 数据集成
将多个数据源合并成一致的数据存储,构成一个完整的数据集
- 数据规约(消减)
通过聚集、删除冗余属性或聚类等方法来压缩数据
- 数据变换(转换)
将一种格式的数据转换成另一种格式的数据(如规范化)
数据变换(转换)
简单函数变换
在进行统计分析或机器学习时,需要保证数据保持比较完美的正态分布,若数据为偏态数据,则很难用均值和标准差去描述数据
x ′ = x 2 x ′ = x x ′ = log ( x ) ∇ f ( x k ) = f ( x k + 1 − f ( x k ) ) x' = x^2\\ x' = \sqrt x\\ x' = \log(x)\\ \nabla f(x_k) = f(x_{k+1}-f(x_k)) x′=x2x′=xx′=log(x)∇f(xk)=f(xk+1−f(xk))
归一化
数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的的量纲和量纲单位,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果,为了消除指标间的量纲和大小不一的影响,需要进行数据标准化处理,将数据按照比例进行缩放,使之落入一个特定的区域,从而进行综合分析。
- 最小-最大规范化:也称离差标准化,是对原始数据的线性变换,使结果值映射到[0, 1]之间
x ∗ = x − m i n m a x − m i n 其中 m a x 为样本数据的最大值, m i n 为样本数据的最小值 x^* =\frac{x-min}{max-min}\\ 其中max为样本数据的最大值,min为样本数据的最小值 x∗=max−minx−min其中max为样本数据的最大值,min为样本数据的最小值
- 零-均值规范化:也叫标准差标准化,经过处理的数据的平均数为0,标准差为1。
x ∗ = x − x ˉ σ 其中 x ˉ 为原始数据的均值, σ 为原始数据的标准差 x^*=\frac{x-\bar{x}}{\sigma}\\ 其中\bar{x}为原始数据的均值,\sigma为原始数据的标准差 x∗=σx−xˉ其中xˉ为原始数据的均值,σ为原始数据的标准差
- 小数定标规范化:通过移动属性值的小数位数,将属性值映射到[-1, 1]之间,移动的小数位数取决于属性值绝对值的最大值。
x ∗ = x 1 0 k x^*=\frac{x}{10^k} x∗=10kx
数据清洗
数据清洗主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,处理缺失值、异常值等。
缺失值处理
处理缺失值的方法可分为三类:删除记录、数据插补和不处理。其中常用的数据插补方法如下:
插补方法 | 方法描述 |
---|---|
均值/中位数/众数插补 | 根据属性值的类型,用该属性取值的平均数/中位数/众数进行插补 |
使用固定值 | 将缺失值的属性值用一个常量替换 |
最近邻插补 | 在记录中找到与缺失样本最接近的样本的该属性值插补(重点:距离判断,如欧几里得距离) |
回归方法 | 对带有缺失值的变量,根据已有数据和与其有关的其他变量(因变量)的数据建立拟合模型来预测缺失的属性值(如多元线性回归) |
插值法 | 插值法是利用已知点建立合适的插值函数f(x),未知值由对应点x’求出的函数值f(x’)近似代替(如拉格朗日插值) |
欧几里得距离
令
i
=
(
x
i
1
,
x
i
2
,
.
.
.
,
x
i
p
)
i=(x_{i1},x_{i2},...,x_{ip})
i=(xi1,xi2,...,xip)和
j
=
(
x
j
1
,
x
j
2
,
.
.
.
,
x
j
p
)
j=(x_{j1},x_{j2},...,x_{jp})
j=(xj1,xj2,...,xjp)是两个被
p
p
p个数值属性描述的对象。则对象i与j之间的欧几里得距离为:
d
(
i
,
j
)
=
(
x
i
1
−
x
j
1
)
2
+
(
x
i
2
−
x
j
2
)
2
+
.
.
.
+
(
x
i
p
−
x
j
p
)
2
d(i,j)=\sqrt{(x_{i1}-x_{j1})^2+(x_{i2}-x_{j2})^2+...+(x_{ip}-x_{jp})^2}
d(i,j)=(xi1−xj1)2+(xi2−xj2)2+...+(xip−xjp)2
拉格朗日插值
假设已知 n + 1 n+1 n+1个点: ( x 0 , y 0 ) 、 ( x 1 , y 1 ) 、 … … 、 ( x n , y n ) (x_0,y_0)、(x_1,y_1)、……、(x_n,y_n) (x0,y0)、(x1,y1)、……、(xn,yn),要求当 x = x ∗ x=x^* x=x∗时 y y y的值,则拉格朗日插值的步骤如下:
- 构造拉格朗日基函数 l i l_i li
l 0 = ( x − x 1 ) ( x − x 2 ) … ( x − x n ) ( x 0 − x 1 ) ( x 0 − x 2 ) … ( x 0 − x n ) l 1 = ( x − x 0 ) ( x − x 2 ) … ( x − x n ) ( x 1 − x 0 ) ( x 1 − x 2 ) … ( x 1 − x n ) . . . l i = ( x − x 0 ) ( x − x 1 ) … ( x − x i − 1 ) ( x − x i + 1 ) … ( x − x n ) ( x i − x 1 ) ( x i − x 2 ) … ( x i − x i − 1 ) ( x i − x i + 1 ) … ( x i − x n ) … l n = ( x − x 0 ) ( x − x 1 ) … ( x − x n − 1 ) ( x n − x 0 ) ( x n − x 1 ) … ( x n − x n − 1 ) l_0=\frac{(x-x_1)(x-x_2)…(x-x_n)}{(x_0-x_1)(x_0-x_2)…(x_0-x_n)}\\ l_1=\frac{(x-x_0)(x-x_2)…(x-x_n)}{(x_1-x_0)(x_1-x_2)…(x_1-x_n)}\\ ...\\ l_i=\frac{(x-x_0)(x-x_1)…(x-x_{i-1})(x-x_{i+1})…(x-x_n)}{(x_i-x_1)(x_i-x_2)…(x_i-x_{i-1})(x_i-x_{i+1})…(x_i-x_n)}\\ …\\ l_n=\frac{(x-x_0)(x-x_1)…(x-x_{n-1})}{(x_n-x_0)(x_n-x_1)…(x_n-x_{n-1})} l0=(x0−x1)(x0−x2)…(x0−xn)(x−x1)(x−x2)…(x−xn)l1=(x1−x0)(x1−x2)…(x1−xn)(x−x0)(x−x2)…(x−xn)...li=(xi−x1)(xi−x2)…(xi−xi−1)(xi−xi+1)…(xi−xn)(x−x0)(x−x1)…(x−xi−1)(x−xi+1)…(x−xn)…ln=(xn−x0)(xn−x1)…(xn−xn−1)(x−x0)(x−x1)…(x−xn−1)
- 构造拉格朗日插值函数 L n ( x ) L_{n}(x) Ln(x)
L n ( x ) = ∑ i = 0 n y i × l i L_n(x)=\sum_{i=0}^{n}{y_i\times l_i} Ln(x)=i=0∑nyi×li
- 插值:将 x = x ∗ x=x^* x=x∗代入插值函数 L n ( x ) L_n(x) Ln(x),可得对应的 y = L n ( x ∗ ) y=L_n(x^*) y=Ln(x∗)
牛顿插值
假设已知 n + 1 n+1 n+1个点: ( x 0 , f ( x 0 ) ) 、 ( x 1 , f ( x 1 ) ) 、 … … 、 ( x n , f ( x n ) ) (x_0,f(x_0))、(x_1,f(x_1))、……、(x_n,f(x_n)) (x0,f(x0))、(x1,f(x1))、……、(xn,f(xn)),要求当 x = x ∗ x=x^* x=x∗时 y y y的值,则拉格朗日插值的步骤如下:
- 求差商(从一阶差商到 n n n阶差商)
一阶差商:
f
[
x
0
,
x
1
]
=
f
(
x
1
)
−
f
(
x
0
)
x
1
−
x
0
f
[
x
1
,
x
2
]
=
f
(
x
2
)
−
f
(
x
1
)
x
2
−
x
1
…
f
[
x
n
−
1
,
x
n
]
=
f
(
x
n
)
−
f
(
x
n
−
1
)
x
n
−
x
n
−
1
f[x_0,x_1]=\frac{f(x_1)-f(x_0)}{x_1-x_0}\\ f[x_1,x_2]=\frac{f(x_2)-f(x_1)}{x_2-x_1}\\ …\\ f[x_{n-1},x_n]=\frac{f(x_n)-f(x_{n-1})}{x_n-x_{n-1}}\\
f[x0,x1]=x1−x0f(x1)−f(x0)f[x1,x2]=x2−x1f(x2)−f(x1)…f[xn−1,xn]=xn−xn−1f(xn)−f(xn−1)
二阶差商:
f
[
x
0
,
x
1
,
x
2
]
=
f
[
x
1
,
x
2
]
−
f
[
x
0
,
x
1
]
x
2
−
x
0
f
[
x
1
,
x
2
,
x
3
]
=
f
[
x
2
,
x
3
]
−
f
[
x
1
,
x
2
]
x
3
−
x
1
…
f
[
x
n
−
2
,
x
n
−
1
,
x
n
]
=
f
[
x
n
−
1
,
x
n
]
−
f
[
x
n
−
2
,
x
n
−
1
]
x
n
−
x
n
−
2
f[x_0,x_1,x_2]=\frac{f[x_1,x_2]-f[x_0,x_1]}{x_2-x_0}\\ f[x_1,x_2,x_3]=\frac{f[x_2,x_3]-f[x_1,x_2]}{x_3-x_1}\\ …\\ f[x_{n-2},x_{n-1},x_n]=\frac{f[x_{n-1},x_n]-f[x_{n-2},x_{n-1}]}{x_n-x_{n-2}}\\
f[x0,x1,x2]=x2−x0f[x1,x2]−f[x0,x1]f[x1,x2,x3]=x3−x1f[x2,x3]−f[x1,x2]…f[xn−2,xn−1,xn]=xn−xn−2f[xn−1,xn]−f[xn−2,xn−1]
……
n阶差商:
f
[
x
0
,
x
1
,
…
,
x
n
]
=
f
[
x
1
,
x
2
,
…
,
x
n
]
−
f
[
x
0
,
x
1
,
…
,
x
n
−
1
]
x
n
−
x
0
f[x_0,x_1,…,x_n]=\frac{f[x_1,x_2,…,x_n]-f[x_0,x_1,…,x_{n-1}]}{x_{n}-x_0}
f[x0,x1,…,xn]=xn−x0f[x1,x2,…,xn]−f[x0,x1,…,xn−1]
- 构造牛顿插值函数 N n ( x ) N_n(x) Nn(x)
N n ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) + f [ x 0 , x 1 , x 2 ] ( x − x 0 ) ( x − x 1 ) + … + f [ x 0 , x 1 , … , x n ] ( x − x 0 ) ( x − x 1 ) … ( x − x n − 1 ) N_n(x)=f(x_0)+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)+…+f[x_0,x_1,…,x_n](x-x_0)(x-x_1)…(x-x_{n-1}) Nn(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+…+f[x0,x1,…,xn](x−x0)(x−x1)…(x−xn−1)
- 插值:将 x = x ∗ x=x^* x=x∗代入插值函数 N n ( x ) N_n(x) Nn(x),可得对应的 y = N n ( x ∗ ) y=N_n(x^*) y=Nn(x∗)
分段插值
由于拉格朗日插值和牛顿插值在高阶的时候,会出现龙格现象,所以将整个区间分为多个小区间,在每个小区间上用拉格朗日插值或者牛顿插值,以此避免龙格现象
异常值处理
异常值发现
- 3 σ 3\sigma 3σ原则
3 σ 3\sigma 3σ原则又称拉依达法则。该法则就是先假设一组检测数据只含有随机误差,对原始数据进行计算处理得到标准差,然后按一定的概率确定一个区间,认为误差超过这个区间就属于异常
这种判别处理方法仅适用于对正态或近似正态分布的样本数据进行处理
如上图,其中 μ \mu μ表示均值, σ \sigma σ表示标准差, x = μ x=\mu x=μ为图形的对称轴;可见,数据的数值几乎分布在 [ μ − 3 σ , μ + 3 σ ] [\mu-3\sigma,\mu+3\sigma] [μ−3σ,μ+3σ]之间,超出范围的数据很少,所以根据小概率原理,可以认为超出 3 σ 3\sigma 3σ的部分数据为异常数据
数值分布 | 在数据中占比 |
---|---|
( μ − σ , μ + σ ) (\mu-\sigma,\mu+\sigma) (μ−σ,μ+σ) | 0.6827 0.6827 0.6827 |
( μ − 2 σ , μ + 2 σ ) (\mu-2\sigma,\mu+2\sigma) (μ−2σ,μ+2σ) | 0.9545 0.9545 0.9545 |
( μ − 3 σ , μ + 3 σ ) (\mu-3\sigma,\mu+3\sigma) (μ−3σ,μ+3σ) | 0.9937 0.9937 0.9937 |
- 箱线图
箱形图(Box-plot) , 于 1977 年由美国著名统计学家约翰·图基(John Tukey) 发明, 是一种用作显示一组数据分散情况资料的统计图, 因形状如箱子而得名。 它能显示出一组数据的最大值、 最小值、 中位数、 及上下四分位数。 主要用于反映原始数据分布的特征, 还可以进行多组数据分布特征的比较。 它在各种领域经常被使用, 常见于品质管理, 快速识别异常值。 以下为箱线图的结构:
其中:
1、 下四分位数 Q1: 等于该样本中所有数值由小到大排列后第 25%的数字。
2、 中位数(第二个四分位数) Q2: 中位数, 等于该样本中所有数值由小到大排列后第 50%
的数字。
3、 上四分位数 Q3: 等于该样本中所有数值由小到大排列后第 75%的数字
4、 上限: 上限是非异常范围内的最大值。
5、 下限: 下限是非异常范围内的最小值。
在下限与上限之间的值为异常值
异常值的处理
异常值处理方法 | 方法描述 |
---|---|
删除含有异常值的记录 | 直接将含有异常值的记录删除 |
视为缺失值 | 将异常值视为缺失值,利用缺失值的处理方式进行处理 |
平均值修正 | 可用前后两个观测值的平均值修正该异常值 |
不处理 | 直接在具有异常值的数据集上进行挖掘建模 |