whale异常检测task3- 线性模型

1、引言

真实数据集中不同维度的数据通常具有高度的相关性,这是因为不同的属性往往是由相同的基础过程以密切相关的方式产生的。在古典统计学中,这被称为——回归建模,一种参数化的相关性分析。   一类相关性分析试图通过其他变量预测单独的属性值,另一类方法用一些潜在变量来代表整个数据。前者的代表是 线性回归,后者一个典型的例子是 主成分分析。本文将会用这两种典型的线性相关分析方法进行异常检测。

需要明确的是,这里有两个重要的假设:

假设一:近似线性相关假设。线性相关假设是使用两种模型进行异常检测的重要理论基础。

假设二:子空间假设。子空间假设认为数据是镶嵌在低维子空间中的,线性方法的目的是找到合适的低维子空间使得异常点(o)在其中区别于正常点(n)。

基于这两点假设,在异常检测的第一阶段,为了确定特定的模型是否适合特定的数据集,对数据进行探索性和可视化分析是非常关键的。

2、线性回归

在线性回归中,我们假设不同维度的变量具有一定的相关性,并可以通过一个相关系数矩阵进行衡量。因此对于特定的观测值,可以通过线性方程组来建模。在实际应用中,观测值的数量往往远大于数据的维度,导致线性方程组是一个超定方程,不能直接求解。因此需要通过优化的方法,最小化模型预测值与真实数据点的误差。

线性回归是统计学中一个重要的应用,这个重要的应用往往是指通过一系列自变量去预测一个特殊因变量的值。在这种情况下,异常值是根据其他自变量对因变量的影响来定义的,而自变量之间相互关系中的异常则不那么重要。这里的异常点检测主要用于数据降噪,避免异常点的出现对模型性能的影响,因而这里关注的兴趣点主要是正常值(n)。

而我们通常所说的异常检测中并不会对任何变量给与特殊对待,异常值的定义是基于基础数据点的整体分布,这里我们关注的兴趣点主要是异常值(o)。
广义的回归建模只是一种工具,这种工具既可以用来进行数据降噪也可以进行异常点检测。

3、主成分分析

上一节的最小二乘法试图找到一个与数据具有最佳匹配 ( d − 1 ) (d−1) (d1) 维超平面。主成分分析方法可用于解决这一问题的广义版本。具体来说,它可以找到任意 k ( k < d ) k( k<d ) k(k<d) 维的最优表示超平面,从而使平方投影误差最小化。
3.1 原理推导

对于 d维,包含 N 个样本的数据,用 [公式] 表示其中第 i 行为: [公式] 。由此可以得到 [公式] 的协方差矩阵(标准的PCA应当计算相关系数矩阵,即对数据进行均值为0方差为1的标准化处理,而协方差矩阵只需要减去均值即可):

在许多涉及高维数据集的真实场景中,很大一部分特征值往往非常接近于零。这意味着大多数数据都沿着一个低维的子空间排列。从异常检测的角度来看,这是非常方便的,因为离这些投影方向非常远的观测值可以被假定为离群值。例如,对于特征值较小(方差较小)的特征向量 j,第 i 条记录的 [公式] 与 [公式] 的其他值的偏差较大,说明有离群行为。这是因为当 j j j固定而k变化时, [公式] 的值应当变化不大。因此, [公式] 值是不常见的。

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

4、回归分析的局限性

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

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

5、总结

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

6 代码

导入乳腺癌数据,划分训练集测试集
import pandas as pd
from sklearn.model_selection import train_test_split
Train_data = pd.read_csv('breast-cancer-unsupervised-ad.csv')
Train_data.loc[Train_data['label']=='o','label']=1
Train_data.loc[Train_data['label']=='n','label']=0
Train_data['label'] = Train_data['label'].astype(float)
X_train, X_test, y_train, y_test = train_test_split(Train_data.loc[:, Train_data.columns != 'label'], Train_data['label'], test_size=0.3,stratify=Train_data['label'])

2. 使用主成分分析训练模型,预测结果

from pyod.models.pca import PCA
from pyod.models.hbos import HBOS
from pyod.utils.data import evaluate_print

# 训练PCA模型
clf_name = 'PCA'
clf = PCA()
clf.fit(X_train) # 注意训练模型的时候,不需要输入y参数

# 得到训练标签和训练分数
y_train_pred = clf.labels_   # 0正常,1异常
y_train_scores = clf.decision_scores_  # 数值越大越异常

# 用训练好的模型预测测试数据的标签和分数
y_test_pred = clf.predict(X_test) 
y_test_scores = clf.decision_function(X_test)

# 评估并打印结果
print("\nOn Training Data:")
evaluate_print(clf_name, y_train, y_train_scores)
print("\nOn Test Data:")
evaluate_print(clf_name, y_test, y_test_scores)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值