【Python机器学习专栏】异常检测算法在Python中的实践

简介: 【4月更文挑战第30天】本文介绍了异常检测的重要性和在不同领域的应用,如欺诈检测和网络安全。文章概述了四种常见异常检测算法:基于统计、距离、密度和模型的方法。在Python实践中,使用scikit-learn库展示了如何实现这些算法,包括正态分布拟合、K-means聚类、局部异常因子(LOF)和孤立森林(Isolation Forest)。通过计算概率密度、距离、LOF值和数据点的平均路径长度来识别异常值。

在机器学习的广阔领域中,异常检测(Outlier Detection)是一个重要的分支,用于识别数据集中与大多数数据显著不同的观测值。这些异常值可能是由测量误差、数据录入错误或某种未知过程产生的。异常检测在欺诈检测、医疗诊断、网络安全等领域发挥着关键作用。本文将介绍几种常见的异常检测算法,并通过Python实现这些算法,以展示其在实践中的应用。

一、异常检测算法简介

异常检测算法通常可以分为基于统计的方法、基于距离的方法、基于密度的方法和基于模型的方法等几类。以下简要介绍几种常见的异常检测算法:

基于统计的方法:通过假设数据服从某种概率分布(如正态分布),计算数据点的概率密度或累积分布函数值,将低于某个阈值的点视为异常值。
基于距离的方法:如K-means聚类算法,通过计算数据点到聚类中心的距离来判断数据点是否为异常值。距离较远的点可能被视为异常值。
基于密度的方法:如局部异常因子(Local Outlier Factor, LOF)算法,通过计算数据点与其邻居的局部密度比值来判断数据点是否为异常值。LOF值较大的点可能被视为异常值。
基于模型的方法:如孤立森林(Isolation Forest)算法,通过构建多棵随机决策树来隔离数据点,并计算数据点的平均路径长度来判断其是否为异常值。路径较短的点可能被视为异常值。
二、异常检测算法在Python中的实践

下面我们将使用Python和scikit-learn库来实现上述几种异常检测算法,并应用于一个简单的数据集。

基于统计的方法
以正态分布为例,我们可以使用scipy库中的正态分布函数来拟合数据,并计算每个数据点的概率密度值。然后,我们可以设置一个阈值,将概率密度值低于该阈值的数据点视为异常值。

python
import numpy as np
from scipy.stats import norm

假设数据服从正态分布

data = np.random.normal(0, 1, 1000)
data = np.append(data, [5, -5]) # 添加异常值

拟合正态分布

mu, std = norm.fit(data)

计算每个数据点的概率密度值

pdf_values = norm.pdf(data, mu, std)

设置阈值,识别异常值

threshold = 0.01
outliers = data[pdf_values < threshold]
print(f"异常值: {outliers}")
基于距离的方法(以K-means为例)
使用scikit-learn中的KMeans类进行K-means聚类,并计算每个数据点到其所属聚类中心的距离。然后,我们可以设置一个阈值,将距离较大的数据点视为异常值。

python
from sklearn.cluster import KMeans

使用K-means聚类

kmeans = KMeans(n_clusters=3, randomstate=0).fit(data.reshape(-1, 1))
distances = np.sort(kmeans.transform(data.reshape(-1, 1)), axis=0)
distances = distances[:, kmeans.labels
]

设置阈值,识别异常值

threshold = np.mean(distances) + 2 * np.std(distances)
outliers = data[distances > threshold]
print(f"异常值: {outliers}")
基于密度的方法(以LOF为例)
scikit-learn的local_outlier_factor方法提供了LOF算法的实现。我们可以直接使用该方法计算每个数据点的LOF值,并设置阈值来识别异常值。

python
from sklearn.neighbors import LocalOutlierFactor

计算LOF值

lof = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
y_pred = lof.fit_predict(data.reshape(-1, 1))

设置阈值,识别异常值

在这里,我们将LOF值小于-1的点视为异常值(因为正常点的LOF值通常接近1)

outliers = data[y_pred == -1]
print(f"异常值: {outliers}")
基于模型的方法(以孤立森林为例)
scikit-learn的IsolationForest类提供了孤立森林算法的实现。我们可以直接使用该方法来检测异常值。

python
from sklearn.ensemble import IsolationForest

使用孤立森林检测异常值

iforest

相关文章
|
3月前
|
存储 数据采集 监控
Python定时爬取新闻网站头条:从零到一的自动化实践
在信息爆炸时代,本文教你用Python定时爬取腾讯新闻头条,实现自动化监控。涵盖请求、解析、存储、去重、代理及异常通知,助你构建高效新闻采集系统,适用于金融、电商、媒体等场景。(238字)
518 2
|
3月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
3月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
3月前
|
监控 安全 算法
137_安全强化:输入过滤与水印 - 实现输出水印的检测算法与LLM安全防护最佳实践
随着大语言模型(LLM)在各行业的广泛应用,安全问题日益凸显。从提示注入攻击到恶意输出生成,从知识产权保护到内容溯源,LLM安全已成为部署和应用过程中不可忽视的关键环节。在2025年的LLM技术生态中,输入过滤和输出水印已成为两大核心安全技术,它们共同构建了LLM服务的安全防护体系。
|
3月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
394 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
4月前
|
传感器 资源调度 算法
DDMA-MIMO雷达多子带相干累积目标检测算法——论文阅读
本文提出一种多子带相干累积(MSCA)算法,通过引入空带和子带相干处理,解决DDMA-MIMO雷达的多普勒模糊与能量分散问题。该方法在低信噪比下显著提升检测性能,实测验证可有效恢复目标速度,适用于车载雷达高精度感知。
640 4
DDMA-MIMO雷达多子带相干累积目标检测算法——论文阅读
机器学习/深度学习 算法 自动驾驶
943 0
|
4月前
|
算法 API 数据安全/隐私保护
深度解析京东图片搜索API:从图像识别到商品匹配的算法实践
京东图片搜索API基于图像识别技术,支持通过上传图片或图片URL搜索相似商品,提供智能匹配、结果筛选、分页查询等功能。适用于比价、竞品分析、推荐系统等场景。支持Python等开发语言,提供详细请求示例与文档。
|
4月前
|
存储 人工智能 算法
Python实现简易成语接龙小游戏:从零开始的趣味编程实践
本项目将中国传统文化与编程思维相结合,通过Python实现成语接龙游戏,涵盖数据结构、算法设计与简单AI逻辑,帮助学习者在趣味实践中掌握编程技能。
476 0
|
4月前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
228 0

推荐镜像

更多