详解使用Python+Pycaret进行异常检测
异常检测是在数据挖掘、机器学习、深度学习等领域中非常重要的环节之一。Pycaret是一个快速、好用的机器学习库,其中包括了大量的算法以及可以一键训练的接口。本文讲解使用Pycaret进行异常检测的方法和流程,并提供两个示例,让读者更好地了解异常检测和Pycaret的使用。
1 安装Pycaret库
使用Anaconda prompt或者cmd等命令行工具,输入以下命令即可安装Pycaret:
pip install pycaret
2 数据集准备
在进行异常检测之前,需要准备一个数据集,本文提供了两个示例数据集供读者参考。
2.1 示例一
import pandas as pd
import numpy as np
# 生成正常数据
data1 = np.random.normal(0, 1, (1000, 10))
df1 = pd.DataFrame(data1)
# 生成异常数据
data2 = np.random.normal(10, 1, (50, 10))
df2 = pd.DataFrame(data2)
# 合并数据集
df = pd.concat([df1, df2], ignore_index=True)
# 添加标签列,正常数据标签为0,异常数据标签为1
df['Label'] = [0]*1000 + [1]*50
以上代码生成了一个10维的正态分布数据集,其中有50个异常数据。可以输出数据集的前几行,观察数据集的形式。
print(df.head())
2.2 示例二
from scipy.spatial import distance
import numpy as np
# 生成正常数据
data1 = np.random.normal(0, 1, (1000, 10))
mean = np.mean(data1, axis=0)
mvn = distance.mahalanobis(data1, mean, np.cov(data1.T))
df1 = pd.DataFrame(mvn, columns=['value'])
# 生成异常数据
data2 = np.random.normal(20, 5, (50, 10))
mean = np.mean(data1, axis=0)
mvn = distance.mahalanobis(data2, mean, np.cov(data1.T))
df2 = pd.DataFrame(mvn, columns=['value'])
# 合并数据集
df = pd.concat([df1, df2], ignore_index=True)
# 添加标签列,正常数据标签为0,异常数据标签为1
df['Label'] = [0]*1000 + [1]*50
以上代码生成了一个10维的、包含50个异常数据的数据集。可以输出数据集的前几行,观察数据集的形式。
print(df.head())
3 模型构建
使用Pycaret可以很方便地一键构建异常检测模型。在这里,我们使用默认的lof算法进行检测。调用create_model函数时,需要指定需要检测的标签列(这里是'Label'),并设置参数silent=True以避免输出过多的日志。
from pycaret.anomaly import *
# 创建异常检测模型
model = create_model(df, anomaly_target='Label', silent=True)
4 模型预测
使用训练好的模型进行预测时,我们调用assign_model函数。此函数的作用是使用训练好的模型对数据集中的每一个样本进行预测,并将预测结果添加到数据集中的一个新列中。
# 预测数据集中每个数据的标签
predictions = assign_model(model, df)
# 输出前几行预测结果
print(predictions.head())
5 结果评估
使用Pycaret,通过evaluate_model函数可以很方便地输出模型评估报告。其中会输出Accuracy、AUC、MCC、Precision、Recall等评估指标。
# 输出模型评估报告
evaluate_model(model)
6 可视化分析
最后,我们可以使用plot_model函数对模型进行可视化分析。这里我们选择使用shapley values plot进行分析。由于是10维数据,所以只能选择5个重要的特征进行分析。
# 可视化分析,使用shapley values plot(由于是10维数据,只选择了5个特征)
plot_model(model, plot='shap', feature_names=['0', '1', '2', '3', '4'])
至此,基于Pycaret的异常检测方法完全结束。通过以上分析,我们发现Pycaret非常的方便好用,仅仅几行代码就可以帮助我们完成异常检测任务。也同时也在这里提醒读者,在项目部署后,需要进行测试、验证等流程,排除可能存在的误差和漏洞。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解使用Python+Pycaret进行异常检测 - Python技术站