程序地带

异常检测-线性模型


1、
2、数据可视化
3、线性回归
3.1、基于自变量与因变量的线性回归
3.1.1、最小二乘法

为了简单起见,这里我们一元线性回归为例:
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=1∑d​ai​⋅Xi​+ad+1​ 变量Y为因变量,也就是我们要预测的值;
X
1
.
.
.
X
d
X_{1}...X_{d}
X1​...Xd​为一系列因变量,也就是输入值。系数
a
1
.
.
.
a
d
+
1
a_{1}...a_{d+1}
a1​...ad+1​为要学习的参数。假设数据共包含
N
N
N个样本,第
j
j
j个样本包含的数据为
x
j
1
.
.
.
x
j
d
x_{j1}...x_{jd}
xj1​...xjd​和
y
j
y_{j}
yj​,带入式(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=1∑d​ai​⋅xji​+ad+1​+ϵj​


这里
ϵ
j
epsilon_{j}
ϵj​为第
j
j
j个样本的误差。以
Y
Y
Y 代表
N
×
1
N imes 1
N×1 的因变量矩阵
(
y
1
.
.
.
y
N
)
T
{(y_{1}...y_{N})}^{T}
(y1​...yN​)T,即样本中的真实值;以
U
U
U代表
N
×
(
d
+
1
)
N imes (d+1)
N×(d+1)的自变量矩阵,其中第
j
j
j行为
(
x
j
1
.
.
.
x
j
d
,
1
)
(x_{j1}...x_{jd}, 1)
(xj1​...xjd​,1);以
A
A
A 代表
(
d
+
1
)
×
1
(d+1) imes 1
(d+1)×1 的系数矩阵
(
a
1
.
.
.
a
d
+
1
)
T
(a_{1}...a_{d+1})^{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}{left| {Y - U cdot A} ight|^2}
L(A)=21​∣Y−U⋅A∣2


目标函数是关于
A
A
A的凸函数,其对
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 {{left| {Y - U cdot A} ight|}^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 ight)^{-1} cdotleft(U^{T} cdot Y ight)
A=(UT⋅U)−1⋅(UT⋅Y)


这种求解线性回归参数的方法也叫最小二乘法。


最小二乘法要求矩阵
U
T

U
U^{T} cdot U
UT⋅U 可逆,即
U
T

U
U^{T} cdot U
UT⋅U是满秩的。   当
U
T

U
U^{T} cdot U
UT⋅U不可逆时可以通过两种方法进行参数估计,一种先使用主成分分析等方法来预处理数据,消除不同特征之间的相关性,然后再使用最小二乘法。第二种方法是使用梯度下降法。


3.1.2、梯度下降法

梯度下降法是数值优化问题中最常见的求解方法。我们把线性回归(线性方程组)看作是一个优化问题,那么我们要优化的目标就是损失函数。损失函数是用来衡量样本误差的函数,我们的优化目标是要求得在误差最小的情况下模型参数的值。这里强调一下损失函数和代价函数的区别:


注意: **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^{(i)}(mathbf{w}, b)=frac{1}{2}left(hat{y}^{(i)}-y^{(i)} ight)^{2}
l(i)(w,b)=21​(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
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}^{ op} mathbf{x}^{(i)}+b-y^{(i)} ight)^{2}
L(w,b)=n1​i=1∑n​l(i)(w,b)=n1​i=1∑n​21​(w⊤x(i)+b−y(i))2   其中
y
^
hat{y}
y^​ 为预测值,
y
y
y 为真实值。 优化算法 - 随机梯度下降


当模型和损失函数形式较为简单时,上面的误差最小化问题的解可以直接用公式表达出来。这类解叫作解析解(analytical solution)。本节使用的线性回归和平方误差刚好属于这个范畴。然而,大多数深度学习模型并没有解析解,只能通过优化算法有限次迭代模型参数来尽可能降低损失函数的值。这类解叫作数值解(numerical solution)。


在求数值解的优化算法中,小批量随机梯度下降(mini-batch stochastic gradient descent)被广泛使用。它的算法很简单:先选取一组模型参数的初始值,如随机选取;接下来对参数进行多次迭代,使每次迭代都可能降低损失函数的值。在每次迭代中,先随机均匀采样一个由固定数目训练数据样本所组成的小批量(mini-batch),然后求小批量中数据样本的平均损失和有关模型参数的导数(梯度),最后用此结果与预先设定的学习率的乘积作为模型参数在本次迭代的减小量。如下式所示:



(
w
,
b
)

(
w
,
b
)

η

B


i

B

(
w
,
b
)
l
(
i
)
(
w
,
b
)
(mathbf{w}, b) leftarrow(mathbf{w}, b)-frac{eta}{|mathcal{B}|} sum_{i in mathcal{B}} partial_{(mathbf{w}, b)} l^{(i)}(mathbf{w}, b)
(w,b)←(w,b)−∣B∣η​i∈B∑​∂(w,b)​l(i)(w,b)


学习率(
η
eta
η): 代表在每次优化中,能够学习的步长的大小 批量大小(
B
B
B): 是小批量计算中的批量大小batch size


3.2、基于异常检测的线性回归

前一节讨论了这样一种情况:即一个特定的变量被认为是特殊的,最优平面是通过最小化该特殊变量的均方误差而确定的。而我们通常所说的异常检测中并不会对任何变量给与特殊对待,异常值的定义是基于基础数据点的整体分布,因此需要采用一种更一般的回归建模:即以相似的方式对待所有变量,通过最小化数据对该平面的投影误差确定最佳回归平面。在这种情况下,假设我们有一组变量
X
1

X
d
X_{1}… 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
sumlimits_{i = 1}^d {a_i^2 = 1}
i=1∑d​ai2​=1   以
L
2
L_{2}
L2​范数作为目标函数:
L
=

U

A

2
L = {left| {U cdot A} ight|_2}
L=∣U⋅A∣2​


这样的一个问题可以通过主成分分析方法得到有效解决,我们会单独用一个部分进行讨论。


4、主成分分析

上一节的最小二乘法试图找到一个与数据具有最佳匹配
(
d

1
)
(d−1)
(d−1) 维超平面。主成分分析方法可用于解决这一问题的广义版本。具体来说,它可以找到任意
k
(
k
<
d
)
k( k<d )
k(k<d) 维的最优表示超平面,从而使平方投影误差最小化。


4.1、原理推导

对于
d
d
d 维,包含
N
N
N 个样本的数据,用
R
i
R_{i}
Ri​ 表示其中第
i
i
i 行为:
[
x
i
1
.
.
.
x
i
d
]
[x_{i1}... x_{id}]
[xi1​...xid​]。由此可以得到
d
×
d
d imes d
d×d 的协方差矩阵(标准的PCA应当计算相关系数矩阵,即对数据进行均值为0方差为1的标准化处理,而协方差矩阵只需要减去均值即可):



Σ
=
(
R

R
ˉ
)
T

(
R

R
ˉ
)
Σ = (R - ar{R})^{T} cdot (R - ar{R})
Σ=(R−Rˉ)T⋅(R−Rˉ)


易知协方差矩阵
Σ
Σ
Σ 是对称并且半正定的,因此可以进行相似对角化:



Σ
=
P

D

P
T
Σ = 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}...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_{ij}
yij​ 与
y
k
j
y_{kj}
ykj​ 的其他值的偏差较大,说明有离群行为。这是因为当
j
j
j固定而
k
k
k变化时,
y
k
j
y_{kj}
ykj​ 的值应当变化不大。因此,
y
i
j
y_{ij}
yij​ 值是不常见的。


在不选取任何特定的
k
k
k 维集合的情况下,一种更精确的异常检测建模方法是使用特征值来计算数据点沿每个主分量方向到质心的归一化距离。设
e
j
e_{j}
ej​为第
j
j
j 个特征向量,
λ
j
λ_{j}
λj​ 为沿该方向的方差(特征值)。数据点
X
ˉ
ar{X}
Xˉ相对于对数据质心$ar{mu} $的总体归一化异常得分可以由下式给出:



S
core

(
X
ˉ
)
=

j
=
1
d

(
X
ˉ

μ
ˉ
)

e
ˉ
j

2
λ
j
S operatorname{core}(ar{X})=sum_{j=1}^{d} frac{left|(ar{X}-ar{mu}) cdot ar{e}{j} ight|^{2}}{lambda{j}}
Score(Xˉ)=j=1∑d​λj∣∣​(Xˉ−μˉ​)⋅eˉj∣∣​2​


值得注意的是,对异常得分的大部分贡献是由
λ
j
λ_{j}
λj​ 值较小的主成分的偏差提供的,这一点上文中有提及过。主成分分析比因变量回归能更稳定地处理少数异常值的存在。这是因为主成分分析是根据最优超平面来计算误差的,而不是一个特定的变量。当数据中加入更多的离群点时,最优超平面的变化通常不会大到影响离群点的选择。因此,这种方法更有可能选择正确的异常值,因为回归模型一开始就更准确。


4.2 归一化操作

当不同维度的尺度差别较大时,使用
P
C
A
PCA
PCA 有时并不能得到直观有效的结果。例如,考虑一个包含年龄和工资等属性的人口统计数据集。工资属性的范围可能是几万,而年龄属性几乎总是小于100,使用主成分分析会导致主成分被高方差属性所控制。对于一个只包含年龄和工资的二维数据集,最大的特征向量几乎与工资轴平行,这会降低异常点检测过程的有效性。因此,一个自然的解决方案是对数据进行均值为0方差为1的标准化处理。这隐含地导致在主成分分析中使用相关矩阵而不是协方差矩阵。当然,这个问题并不是线性建模所独有的,对于大多数异常检测算法,都需要使用这样的预处理。


5、回归分析的局限性

回归分析作为检测离群值的工具有一些局限性。这些缺点中最重要的是在本章的一开始就讨论了,其中探讨了回归分析的数据特定性质。特别是,为了使回归分析技术有效,数据需要高度相关,并沿着低维子空间对齐。当数据不相关,但在某些区域高度聚集时,这种方法可能不会有效。


另一个相关的问题是,数据中的相关性在本质上可能不是全局性的。最近的一些分析观察**[1]**表明,子空间相关性是特定于数据的特定位置的。在这种情况下,由主成分分析发现的全局子空间对于异常检测是次优的。因此,为了创建更一般的局部子空间模型,有时将线性模型与邻近模型(在后续章节中讨论)结合起来是有用的。这将是高维和子空间异常检测的主题,将在后续章节详细讨论。


6、总结

真实数据中,数据不同属性之间往往具有显著的相关性。在这种情况下,线性建模可以提供一种有效的工具来从底层数据中移除异常值或者进行异常检测。对于其他基于因变量回归的应用,线性建模是一种工具,去除异常值对于提高此类应用的性能是非常重要的。在大多数情况下,主成分分析提供了去除异常值和进行异常检测最有效的方法,因为它对存在少数异常值的数据更有鲁棒性。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40946639/article/details/112689424

随机推荐

机器学习笔记

机器学习的应用垃圾邮件过滤机器视觉(ComputerVersion):自动驾驶自然语言处理(NLP)智能推荐系统什么是机器学习计算机程序从经验E(数据集)中学习解决某一任务T࿰...

阳光的碎屑 阅读(193)

django基础

安装pythonhttps://www.cnblogs.com/thescholar/p/12167964.htmlyuminstallopenssl-develbzip2-develexpat-de...

gdut17 阅读(615)

深入理解JVM(四)JVM内存模型细讲之堆

深入理解JVM(四)JVM内存模型细讲之堆前言堆细讲堆大小参数:内存溢出堆空间分代划分前言上文就讲了JVM内存的五部分,Java方法区、Java...

君子比德于玉 阅读(360)

Numpy学习---输入和输出

目录Numpy二进制文件numpy.save(file,arr,allow_pickle=True,fix_imports=True)Saveanarraytoabinaryfilei...

Awesome鱼 阅读(521)

第三章python序列

可变字符串在Python中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,智能创建新的字符串对象。但是,经常我们确实...

LiMingZhen1234 阅读(895)

文件读入数组 语言_C语言CaesarCipher的实现

Part1.凯撒密码简介恺撒密码(英语:CaesarCipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术࿰...

巫-挖泥巴 阅读(882)

linux计划任务

Linux软件安装扩展内容linux计划任务让命令在未来的某个时间点去执行,相当于QQ上发送定时说说、定时开关机。一次性调度执行atScheduleone-timetaskswithat...

dkflasjdflk 阅读(841)

vue ref属性

1ref想在脚本中,获取模板中的元素或者组件,可以使用ref属性分成两步第一步为元素或者组件添加ref属性,属性值代表它的名称第二步在脚本中,通...

ruantianqing 阅读(644)