iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >基于LOF算法的异常值检测
  • 428
分享到

基于LOF算法的异常值检测

算法数据分析异常值检测 2023-08-30 10:08:02 428人浏览 独家记忆
摘要

目录 LOF算法简介Sklearn官网LOF算法应用实例1Sklearn官网LOF算法应用实例2基于LOF算法鸢尾花数据集异常值检测读取数据构造数据可视化,画出可疑异常点LOF算法 LOF算法简介 LOF异常检测算法是一种基

LOF算法简介

LOF异常检测算法是一种基于密度的异常检测算法,基于密度的异常检测算法主要思想是:给定的样本数据集,对于数据集中的点,如果其局部领域的点都很密集,那么这个点大概率为正常的数据点;而如果这个点距离其相邻的点距离较远,也就是在一个局部领域的点密度较小,那么这个点可能为异常点。

Sklearn官网LOF算法应用实例1

在这里插入图片描述
clf.negative_outlier_factor_输出:array([ -0.98214286, -1.03703704, -73.36970899, -0.98214286])
绝对值越大于1则越有可能是异常。很明显101.1最有可能是异常。

Sklearn官网LOF算法应用实例2

导入包:
在这里插入图片描述
构造二维数据,以及一些离群点,并可视化
在这里插入图片描述
LOF算法:
在这里插入图片描述
根据X_scores可视化,红色圈越大,该点越可能是异常点:
在这里插入图片描述

基于LOF算法鸢尾花数据集异常值检测

import pandas as pdimport numpy as npimport matplotlibimport matplotlib.pyplot as pltfrom sklearn.neighbors import LocalOutlierFactorfrom sklearn.datasets import load_irismatplotlib.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文%matplotlib inline

读取数据

iris_data = load_iris()iris_data.data[0:5,:]
array([[5.1, 3.5, 1.4, 0.2],       [4.9, 3. , 1.4, 0.2],       [4.7, 3.2, 1.3, 0.2],       [4.6, 3.1, 1.5, 0.2],       [5. , 3.6, 1.4, 0.2]])
# 数据规模iris_data.data.shape
(150, 4)
# 特征iris_data.feature_names
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
# 查看类别pd.DataFrame(iris_data.target).value_counts(), iris_data.target_names
(0    50 1    50 2    50 dtype: int64, array(['setosa', 'versicolor', 'virginica'], dtype='

构造数据

这里为方便可视化,只选取iris数据集中 ‘sepal width (cm)’ 和 ‘petal width (cm)’ 两个特征

data = iris_data.data[:, [1, 3]]data = pd.DataFrame(data, columns=iris_data.feature_names[1:4:2])#['sepal width (cm)','petal width (cm)']data.head()
sepal width (cm)petal width (cm)
03.50.2
13.00.2
23.20.2
33.10.2
43.60.2

可视化,画出可疑异常点

# 可视化两个特征'sepal width (cm)','petal width (cm)'data.plot(kind="scatter", x="sepal width (cm)", y="petal width (cm)", c='r', figsize=(6,2))## 圈出可疑的异常点plt.plot(2.3, 0.3, "ko", markersize=20, markerfacecolor="none")plt.annotate("可能异常点", xy=(2.3, 0.48), xytext=(2, 0.75), arrowprops=dict(facecolor="blue"))plt.plot(3.8, 2.1, "ko", markersize=30, markerfacecolor="none")plt.annotate("可能异常点", xy=(3.9, 1.9), xytext=(4, 1.5), arrowprops=dict(facecolor="blue"))plt.plot(4.4, 0.4, "ko", markersize=20, markerfacecolor="none")plt.annotate("可能异常点", xy=(4.3, 0.5), xytext=(4.5, 1), arrowprops=dict(facecolor="blue"))
Text(4.5, 1, '可能异常点')

在这里插入图片描述

LOF算法

lof = LocalOutlierFactor(n_neighbors=30, metric="minkowski")outlier_pre = lof.fit_predict(data.values)"异常值数量:%d"%np.sum(outlier_pre==-1)
'异常值数量:7'
# 异常点data[outlier_pre==-1]
sepal width (cm)petal width (cm)
154.40.4
334.20.2
412.30.3
602.01.0
1093.62.5
1173.82.2
1313.82.0
scores = lof.negative_outlier_factor_# negative_outlier_factor_数值越大越正常;数值越小越不正常,可能是离群点scores = (scores.max()-scores)/(scores.max()-scores.min())
data.plot(kind="scatter", x="sepal width (cm)", y="petal width (cm)", c='r', figsize=(6,2))plt.scatter(data["sepal width (cm)"], data["petal width (cm)" ], s=800*scores, edgecolors='k', facecolor="none",label="score")

在这里插入图片描述

来源地址:https://blog.csdn.net/qq_43276566/article/details/132521651

--结束END--

本文标题: 基于LOF算法的异常值检测

本文链接: https://www.lsjlt.com/news/382527.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作