异常检测学习笔记--Task03:线性相关方法

本章学习内容主要包括以下两个方面:

  • 线性回归
  • 主成分分析

不同的属性往往是由相同的基础过程以密切相关的方式产生的。

几个重要概念:

  1. 回归建模 ----参数化的相关性分析。
  2. 线性回归 ----通过其他变量预测单独的属性值。
  3. 主成分分析 ----用一些潜在变量来代表整个数据。

两个重要假设:

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

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

线性回归

常用办法有以下几种:

  1. 基于自变量与因变量的线性回归
  • 最小二乘法
  • 梯度下降法
  1. 基于异常检测的线性回归

主成分分析

设有m条n维数据,PCA的一般步骤如下。

  1. 将原始数据按列组成n行m列矩阵X;
  2. 计算矩阵X中每个特征属性(n维)的平均向量M(平均值);
  3. 将X的每一行(代表一个属性字段)进行零均值化,即减去M;
  4. 按照公式求出协方差矩阵;
    C=\frac{1}{m}XX^T
  5. 求出协方差矩阵的特征值及对应的特征向量;
  6. 将特征向量按对应特征值从大到小按行排列成矩阵,取前k(k<n)行组成基向量P;
  7. 通过Y=PX计算降维到k维后的样本特征。

实验部分

PCA模型实验
1.导包

from pyod.models.pca import PCA
from pyod.utils.data import generate_data
from pyod.utils.data import evaluate_print
from pyod.utils.example import visualize

2.使用生成样本数据pyod.utils.data.generate_data():

contamination = 0.1  # percentage of outliers
n_train = 200  # number of training points
n_test = 100  # number of testing points
 
X_train, y_train, X_test, y_test = generate_data(
    n_train=n_train, n_test=n_test, contamination=contamination)

3.初始化pyod.models.PCA.PCA检测器,拟合模型,然后进行预测

# train PCA detector
clf_name = 'PCA'
clf = PCA() # n_components默认为全部
clf.fit(X_train)

输出结果

PCA(contamination=0.1, copy=True, iterated_power='auto', n_components=None,
  n_selected_components=None, random_state=None, standardization=True,
  svd_solver='auto', tol=0.0, weighted=True, whiten=False)
  1. 使用训练集训练PCA
# get the prediction labels and outlier scores of the training data
y_train_pred = clf.labels_  # binary labels (0: inliers, 1: outliers)
y_train_scores = clf.decision_scores_  # raw outlier scores

5.在训练集上进行测试

# get the prediction on the test data
y_test_pred = clf.predict(X_test)  # outlier labels (0 or 1)
y_test_scores = clf.decision_function(X_test)  # outlier scores
  1. 使用ROC和Precision @ Rank n评估预测pyod.utils.data.evaluate_print()。
from pyod.utils.data import evaluate_print
# 评估并打印结果
print("\nPCA On Training Data:")
evaluate_print(clf_name, y_train, y_train_scores)
print("\nPCA On Test Data:")
evaluate_print(clf_name, y_test, y_test_scores)

输出PCA在训练集和测试集上的结果


PCA On Training Data:
PCA ROC:1.0, precision @ rank n:1.0

PCA On Test Data:
PCA ROC:0.91, precision @ rank n:0.9

7.在培训和测试数据上查看示例输出。 通过可视化所有示例中包含的功能来生成可视化
图1
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 主要内容包括: 线性回归 主成分分析 基于PCA的异常检测实践针对pca降维后的样本,计算样本之间的加权欧式距离,...
    Q_cy阅读 957评论 0 0
  • 1. 前言 真实数据集中不同维度的数据通常具有高度的相关性,这是因为不同的属性往往是由相同的基础过程以密切相关的方...
    noob鸽阅读 527评论 0 0
  • 异常检测的学习笔记并非原创,而是搜索各位大佬的帖子整理而得。如有冒犯,请联系我。 真实数据集中不同维度的数据通常具...
    Rank_Fan007阅读 382评论 0 0
  • 1、引言 真实数据集中不同维度的数据通常具有高度的相关性,这是因为不同的属性往往是由相同的基础过程以密切相关的方式...
    许志辉Albert阅读 789评论 0 1
  • 前言 ​ 本资料整理了高光谱遥感图像概念定义、分析处理与分类识别的基本知识。第一部分介绍高光谱图像的一般性原理...
    Vinicer阅读 6,087评论 0 24