线型模型
引言
真实数据集中不同维度的数据通常具有高度的相关性,这是因为不同的属性往往是由相同的基础过程以密切相关的方式产生的。在古典统计学中,这被称为——回归建模,一种参数化的相关性分析。
一类相关性分析试图通过其他变量预测单独的属性值,另一类方法用一些潜在变量来代表整个数据。前者的代表是线性回归,后者一个典型的例子是主成分分析。
需要明确的是,这里有两个重要的假设:
假设一:近似线性相关假设。线性相关假设是使用两种模型进行异常检测的重要理论基础。
假设二:子空间假设。子空间假设认为数据是镶嵌在低维子空间中的,线性方法的目的是找到合适的低维子空间使得异常点(o)在其中区别于正常点(n)。
基于这两点假设,在异常检测的第一阶段,为了确定特定的模型是否适合特定的数据集,对数据进行探索性和可视化分析是非常关键的。
数据可视化
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno
##
path = 'dataverse_files/'
f=open(path+'breast-cancer-unsupervised-ad.csv')
Train_data = pd.read_csv(f)
Train_data.info()
numeric_features = ['f' + str(i) for i in range(30)]
numeric = Train_data[numeric_features]
correlation = numeric.corr()
f , ax = plt.subplots(figsize = (14, 14))
sns.heatmap(correlation,square = True)
plt.title('Correlation of Numeric Features with Price',y=1,size=16)
plt.show())
f = pd.melt(Train_data, value_vars=numeric_features)
g = sns.FacetGrid(f, col="variable", col_wrap=6, sharex=False, sharey=False)
g = g.map(sns.distplot, "value", hist=False, rug=True)
sns.set()
sns.pairplot(Train_data[numeric_features],size = 2 ,kind
='scatter',diag_kind='kde')
plt.savefig('correlation.png')
plt.show()
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, init='pca', random_state=0)
result = tsne.fit_transform(numeric)
x_min, x_max = np.min(result, 0), np.max(result, 0)
result = (result - x_min) / (x_max - x_min)
label = Train_data['label']
fig = plt.figure(figsize = (7, 7))
#f , ax = plt.subplots()
color = {'o':0, 'n':7}
for i in range(result.shape[0]):
plt.text(result[i, 0], result[i, 1], str(label[i]),
color=plt.cm.Set1(color[label[i]] / 10.),
fontdict={'weight': 'bold', 'size': 9})
plt.xticks([])
plt.yticks([])
plt.title('Visualization of data dimension reduction')
线性回归
在线性回归中,我们假设不同维度的变量具有一定的相关性,并可以通过一个相关系数矩阵进行衡量。因此对于特定的观测值,可以通过线性方程组来建模。在实际应用中,观测值的数量往往远大于数据的维度,导致线性方程组是一个超定方程,不能直接求解。因此需要通过优化的方法,最小化模型预测值与真实数据点的误差。
线性回归是统计学中一个重要的应用,这个重要的应用往往是指通过一系列自变量去预测一个特殊因变量的值。在这种情况下,异常值是根据其他自变量对因变量的影响来定义的,而自变量之间相互关系中的异常则不那么重要。这里的异常点检测主要用于数据降噪,避免异常点的出现对模型性能的影响,因而这里关注的兴趣点主要是正常值(n)。
而我们通常所说的异常检测中并不会对任何变量给与特殊对待,异常值的定义是基于基础数据点的整体分布,这里我们关注的兴趣点主要是异常值(o)。
广义的回归建模只是一种工具,这种工具既可以用来进行数据降噪也可以进行异常点检测。
基于自变量与因变量的线性回归
最小二乘法
一元线性回归: Y = ∑ i = 1 d a i ⋅ X i + a d + 1 Y=\sum_{i=1}^{d} a_{i} \cdot X_{i}+a_{d+1} Y=∑i=1dai⋅Xi+ad+1
变量Y为因变量,也就是我们要预测的值;
X
1
…
X
d
X_{1} \ldots X_{d}
X1…Xd为一系列因变量,也就是输入值。系数
a
1
…
a
d
+
1
a_{1}\ldots a_{d+1}
a1…ad+1为要学习的参数。假设数据共包含个
N
N
N样本,第
j
j
j个样本包含的数据为
x
j
1
…
x
j
d
x_{j1}\ldots x_{jd}
xj1…xjd和
y
i
y_{i}
yi,带入式(1)如下式所示:
y
j
=
∑
i
=
1
d
a
i
⋅
x
j
i
+
a
d
+
1
+
ϵ
j
y_{j}=\sum_{i=1}^{d} a_{i} \cdot x_{j i}+a_{d+1}+\epsilon_{j}
yj=∑i=1dai⋅xji+ad+1+ϵj
这里 ϵ j \epsilon_{j} ϵj为第 j j j个样本的误差。以 Y Y Y代表 N × 1 N \times 1 N×1的因变量矩阵 = ( y 1 … y N ) T =\left(y_{1} \ldots y_{N}\right)^{T} =(y1…yN)T,即样本中的真实值;以 U U U代表 N × ( d + 1 ) N \times(d+1) N×(d+1)的自变量矩阵,其中第 j j j行为 ( x j 1 … x j d , 1 ) (x_{j1} \ldots x_{jd},1) (xj1…xjd,1);以 A A A代表 ( d + 1 ) × 1 (d+1) \times 1 (d+1)×1的系数矩阵 ( a 1 … a d + 1 ) T \left(a_{1} \ldots a_{d+1}\right)^{T} (a1…ad+1)T。则模型可表示为:
f ( U , A ) = U ⋅ A f(U, A)=U \cdot A f(U,A)=U⋅A
定义目标函数为:
L ( A ) = 1 2 ∥ Y − U ⋅ A ∥ 2 L(A)=\frac{1}{2}\|Y-U \cdot A\|^{2} L(A)=21∥Y−U⋅A∥2
目标函数是关于的凸函数,其对
A
A
A求偏导为:
∂
L
(
A
)
∂
A
=
1
2
∂
∥
Y
−
U
⋅
A
∥
2
∂
A
=
−
U
T
(
Y
−
U
⋅
A
)
\frac{\partial L(A)}{\partial A}=\frac{1}{2} \frac{\partial\|Y-U \cdot A\|^{2}}{\partial A}=-U^{T}(Y-U \cdot A)
∂A∂L(A)=21∂A∂∥Y−U⋅A∥2=−UT(Y−U⋅A)
令 ∂ L ( A ) ∂ A = 0 , \frac{\partial L(A)}{\partial A}=0, ∂A∂L(A)=0, 得到最优参数为:
A
=
(
U
T
⋅
U
)
−
1
⋅
(
U
T
⋅
Y
)
A=\left(U^{T} \cdot U\right)^{-1} \cdot\left(U^{T} \cdot Y\right)
A=(UT⋅U)−1⋅(UT⋅Y)
这种求解线性回归参数的方法也叫最小二乘法。
梯度下降法
数据集
监督学习一般靠数据驱动。我们通常收集一系列的真实数据,例如多栋房屋的真实售出价格和它们对应的面积和房龄。我们希望在这个数据上面寻找模型参数来使模型的预测价格与真实价格的误差最小。在机器学习术语里,该数据集被称为训练数据集(training data set)或训练集(training set),通常还应该有一个用于防止过拟合的交叉验证集和一个用于评估模型性能的测试集(test set)。一栋房屋被称为一个样本(sample),其真实售出价格叫作标签(label),用来预测标签的两个因素叫作特征(feature)。
损失函数
如果把线性回归看作是一个优化问题,那么我们要优化的目标就是损失函数。损失函数是用来衡量样本误差的函数,我们的优化目标是要求得在误差最小的情况下模型参数的值。这里强调一下损失函数和代价函数的区别:
Loss Function(损失函数):the error for single training example;
Cost Function(代价函数):the average of the loss functions of the entire training set;
线性回归常用的损失函数是均方误差,表达式为:
l
(
i
)
(
w
,
b
)
=
1
2
(
y
^
(
i
)
−
y
(
i
)
)
2
L
(
w
,
b
)
=
1
n
∑
i
=
1
n
l
(
i
)
(
w
,
b
)
=
1
n
∑
i
=
1
n
1
2
(
w
⊤
x
(
i
)
+
b
−
y
(
i
)
)
2
\begin{aligned} l^{(i)}(\mathbf{w}, b)=\frac{1}{2}\left(\hat{y}^{(i)}-y^{(i)}\right)^{2} & \\ L(\mathbf{w}, b)=\frac{1}{n} \sum_{i=1}^{n} l^{(i)}(\mathbf{w}, b)=\frac{1}{n} \sum_{i=1}^{n} \frac{1}{2}\left(\mathbf{w}^{\top} \mathbf{x}^{(i)}+b-y^{(i)}\right)^{2} \end{aligned}
l(i)(w,b)=21(y^(i)−y(i))2L(w,b)=n1i=1∑nl(i)(w,b)=n1i=1∑n21(w⊤x(i)+b−y(i))2
其中
y
^
\hat{y}
y^ 为预测值,
y
y
y 为真实值。
基于异常检测的线性回归
一个特定的变量被认为是特殊的,最优平面是通过最小化该特殊变量的均方误差而确定的。而我们通常所说的异常检测中并不会对任何变量给与特殊对待,异常值的定义是基于基础数据点的整体分布,因此需要采用一种更一般的回归建模:即以相似的方式对待所有变量,通过最小化数据对该平面的投影误差确定最佳回归平面。在这种情况下,假设我们有一组变量 X 1 … X d X_{1} \ldots X_{d} X1…Xd,对应的回归平面如下: a 1 ⋅ X 1 + … + a d ⋅ X d + a d + 1 = 0 a_{1} \cdot X_{1}+\ldots+a_{d} \cdot X_{d}+a_{d+1}=0 a1⋅X1+…+ad⋅Xd+ad+1=0
为了后续计算的方便,对参数进行如下约束:
∑ i = 1 d a i 2 = 1 \sum_{i=1}^{d} a_{i}^{2}=1 ∑i=1dai2=1
以 L 2 L_{2} L2范数作为目标函数:
L = ∥ U ⋅ A ∥ 2 L=\|U \cdot A\|_{2} L=∥U⋅A∥2
主成分分析
的最小二乘法试图找到一个与数据具有最佳匹配
(
d
−
1
)
(d - 1)
(d−1)维超平面。主成分分析方法可用于解决这一问题的广义版本。具体来说,它可以找到任意
k
(
k
<
d
)
k(k < d)
k(k<d)维的最优表示超平面,从而使平方投
影误差最小化。
原理推导
对于 d d d 维, 包含 N N N 个样本的数据, 用 R i R_{i} Ri 表示其中第 i i i 行为: [ x i 1 … x i d ] . \left[x_{i 1} \ldots x_{i d}\right] . [xi1…xid]. 由此可以得到 d × d d \times d d×d 的 协方差矩阵 (标准的PCA应当计算相关系数矩阵, 即对数据进行均值为0方差为1的标准化处理, 而协方 差矩阵只宰要减去均值即可):
Σ = ( R − R ˉ ) T ⋅ ( R − R ˉ ) \Sigma=(R-\bar{R})^{T} \cdot(R-\bar{R}) Σ=(R−Rˉ)T⋅(R−Rˉ)
易知协方差矩阵 Σ \Sigma Σ 是对称并且半正定的, 因此可以进行相似对角化:
Σ = P ⋅ D ⋅ P T \Sigma=P \cdot D \cdot P^{T} Σ=P⋅D⋅PT
这里的 D D D 为对角矩阵,对角元素为特征值; P P P 为标准正交矩阵,每一行为对应的特征向量; 这些标 准正交向量提供了数据应该投影的轴线方向。与异常检测相关的主成分分析的主要性质如下:
- 如果前 k k k 的特征向量选定之后(根据最大的 k k k个特征值),由这些特征向量定义的 k k k 维超平面是在 所有维度为 k k k 的超平面中,所有数据点到它的均方距离尽可能小的平面。。
- 如果将数据转换为与正交特征向量对应的轴系,则转换后的数据沿每个特征向量维的方差等于相应 的特征值。在这种新表示中,转换后的数据的协方差为0。
- 由于沿特征值小的特征向量的转换数据的方差很低, 因此沿这些方向的变换数据与平均值的显着偏差可能表示离群值。
需要注意的是, 相比2.2节的内容,这里提供了一个更加普遍的解决方法。2.2中的内容可以归为主 成分分析中只保留最大特征值对应的特征向量的情况。
在得到这些特征值和特征向量之后, 可以将数据转换到新的坐标系中。以 Y 1 … Y N Y_{1} \ldots Y_{N} Y1…YN 表示新坐标系 中的数据, 这些数据可以通过原始向量 R i R_{i} Ri 与包含新轴系的标准正交特征向量矩阵 P P P 的乘积来实现 Y i = R i ⋅ P Y_{i}=R_{i} \cdot P Yi=Ri⋅P
在许多涉及高维数据集的真实场影中,很大一部分特征值往往非常接近于零。这意味着大多数数据 都沿着一个低维的子空间排列。从异常检测的角度来看, 这是非常方便的, 因为离这些投影方向非常远 的观测值可以被假定为离群值。例如, 对于特征值较小 (方差较小) 的特征向量 j , j, j, 第 i i i 条记录的 y i j y_{i j} yij 与 y k j y_{k j} ykj 的其他值的偏差较大,说明有离群行为。这是因为当 j j j 固定而 k k k 变化时, y k j y_{k j} ykj 的值应当变化不大。因 此, y i j y_{i j} yij 值是不常见的。
在不选取任何特定的
k
k
k 维集合的情况下, 一种更精确的异常检测建模方法是使用特征值来计算数据 点沿每个主分量方向到质心的归一化距离。设
e
j
e_{j}
ej 为第
j
j
j 个特征向量,
λ
j
\lambda_{j}
λj 为沿该方向的方差(特征值)。数 据点
X
ˉ
\bar{X}
Xˉ 相对于对数据质心
μ
\mu
μ 的总体归一化异常得分可以由下式给出:
S
core
(
X
ˉ
)
=
∑
j
=
1
d
∣
(
X
ˉ
−
μ
ˉ
)
⋅
e
ˉ
j
∣
2
λ
j
S \operatorname{core}(\bar{X})=\sum_{j=1}^{d} \frac{\left|(\bar{X}-\bar{\mu}) \cdot \bar{e}_{j}\right|^{2}}{\lambda_{j}}
Score(Xˉ)=j=1∑dλj∣∣(Xˉ−μˉ)⋅eˉj∣∣2
值得注意的是, 对异常得分的大部分贡献是由
λ
j
\lambda_{j}
λj 值较小的主成分的偏差提供的, 这一点上文中有提及过。主成分分析比因变量回归能更稳定地处理少数异常值的存在。这是因为主成分分析是根据最优超 平面来计算误差的, 而不是一个特定的变量。当数据中加入更多的离群点时,最优超平面的变化通常不 会大到影响离群点的选择。因此, 这种方法更有可能选择正确的异常值,因为回归模型一开始就更准确。
归一化问题
当不同维度的尺度差别较大时,使用 P C A PCA PCA有时并不能得到直观有效的结果。例如,考虑一个包含年龄和工资等属性的人口统计数据集。工资属性的范围可能是几万,而年龄属性几乎总是小于100,使用主成分分析会导致主成分被高方差属性所控制。对于一个只包含年龄和工资的二维数据集,最大的特征向量几乎与工资轴平行,这会降低异常点检测过程的有效性。因此,一个自然的解决方案是对数据进行均值为0方差为1的标准化处理。这隐含地导致在主成分分析中使用相关矩阵而不是协方差矩阵。当然,这个问题并不是线性建模所独有的,对于大多数异常检测算法,都需要使用这样的预处理。
回归分析的局限性
回归分析作为检测离群值的工具有一些局限性。这些缺点中最重要的是在本章的一开始就讨论了,其中探讨了回归分析的数据特定性质。特别是,为了使回归分析技术有效,数据需要高度相关,并沿着低维子空间对齐。当数据不相关,但在某些区域高度聚集时,这种方法可能不会有效。