DataWhale-异常检测-Task4

DataWhale-异常检测-Task4

记录DataWhale的异常检测的学习过程,使用的教材可以在此链接中下载。
Task4介绍的是传统的基于密度的异常检测算法,主要介绍的是最常用的Local Outlier Factor(LOF)方法。

LOF算法

LOF等基于密度的算法可以较好地适应数据集中密度不同的集群情况,密度就是点的聚集程度,点与点之间距离越短,则密度越大。LOF算法为每个点定义了一个局部可达密度,然后用这个点与其周围点的局部可达密度的差异来衡量这个点是否异常,其核心是,一个点的异常与否和其周围点是紧密相关的。为了定义局部可达密度这个概念,LOF算法引入了k-距离,k-邻域,可达距离等概念,具体的解析可参考这篇文章,对相关概念写的十分清楚。

PyOD实例

使用PyOD在breast cancer数据集来测试PCA的性能,并于HBOS对比,breast cancerr数据集可以在此链接中下载,具体的代码如下:

from sklearn.model_selection import train_test_split
from pyod.models.lof import LOF
from pyod.models.pca import PCA
from pyod.models.hbos import HBOS
from pyod.utils.data import evaluate_print
import pandas as pd
import numpy as np


if __name__ == "__main__":
 data = pd.read_csv('dataverse_files/breast-cancer-unsupervised-ad.csv', header=None)
 data_x=data[[i for i in range(30)]].values
 data_y=data[30].map(lambda x: 1 if x=='o' else 0).values
 X_train, X_test, y_train, y_test = train_test_split(data_x, data_y, test_size=0.3,stratify=data_y)
 train_number=X_train.shape[0]


 clf1 = PCA(n_components=15)
 clf1.fit(X_train)
 y_train_scores_clf1 = clf1.decision_scores_
 y_test_scores_clf1 = clf1.decision_function(X_test)


 clf2 = HBOS(n_bins=(int)(np.sqrt(train_number)))
 clf2.fit(X_train)
 y_train_scores_clf2 = clf2.decision_scores_
 y_test_scores_clf2 = clf2.decision_function(X_test)

 clf3 = LOF(n_neighbors=20)#lof中的近邻数
 clf3.fit(X_train)
 y_train_scores_clf3 = clf3.decision_scores_
 y_test_scores_clf3 = clf3.decision_function(X_test)


 print("\nOn Training Data:")
 evaluate_print('PCA', y_train, y_train_scores_clf1)
 evaluate_print('HBOS', y_train, y_train_scores_clf2)
 evaluate_print('LOF', y_train, y_train_scores_clf3)

 print("\nOn Test Data:")
 evaluate_print('PCA', y_test, y_test_scores_clf1)
 evaluate_print('HBOS', y_test, y_test_scores_clf2)
 evaluate_print('LOF', y_test, y_test_scores_clf3)
 >>>
 On Training Data:
PCA ROC:0.9753
HBOS ROC:0.9426
LOF ROC:0.9908

On Test Data:
PCA ROC:1.0
HBOS ROC:0.9475
LOF ROC:0.9753

可以看出,在breast cancer数据集上,LOF和PCA效果很接近。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值