1.pycaret进行异常检测
2023-11-02 本文已影响0人
wo_monic
本系列的是在pycaret3版本上运行的
- 从官方下载数据集,读取数据集,预处理分割为训练集和验证集
# loading sample dataset from pycaret dataset module
import pycaret
from pycaret.datasets import get_data
#data = get_data('anomaly')
#使用本地的数据,所有数据可以自行从https://github.com/pycaret/pycaret/tree/master/datasets下载,因国内服务器无法访问github,所以我把所有的数据集下载到本地进行分析
#使用pandas读取
import pandas as pd
dataset=pd.read_csv("~/AI/pycaret/datasets/anomaly.csv")
data = dataset.sample(frac=0.95, random_state=786)
data_unseen = dataset.drop(data.index)
data.reset_index(inplace=True, drop=True)
data_unseen.reset_index(inplace=True, drop=True)
print('Data for Modeling: ' + str(data.shape))
print('Unseen Data For Predictions: ' + str(data_unseen.shape))
2.数据初始化,并查看有哪些模型可用
# 初始化数据
from pycaret.anomaly import *
s = setup(data,session_id = 136)
models()
image.png
注意异常检测无法自动比较选择最优的模型。这属于无监督学习,所以没法自动选优。
使用iforest(孤立森林)模型
# 训练iforest模型
iforest = create_model('iforest')
# 使用测试集进行检验预测
iforest_pred = predict_model(iforest,data=data)
anomaly_data=iforest_pred[iforest_pred["Anomaly"]==1]
anomaly_data
上面的anomaly_data就是异常值的数据框。此处是挑选异常值Anomaly等于1的行。
# 查看异常值的分布情况
iforest_pred["Anomaly"].value_counts()
可以看到0的有902行,1的有48行,显然少的是异常值
对验证集数据进行验证
# 对最开始的提取的独立数据进行预测
data_unseen_pred = predict_model(iforest,data=data_unseen)
下面的保存模型和实验,加载模型和实验,pycaret所有的类型的建模后的操作都是一样的。差别在于 前面数据的处理和建模时模型的选择,模型的比较,模型调参,模型结果的可视化
保存模型
save_model(iforest,'iforest_pipline')
保存实验
save_experiment("05.anomaly_detection_experiment")
加载模型
load_model_from_disk = load_model("iforest_pipline")
加载实验,注意加载前要先读取数据,加载的时候需要提供数据的变量名
exp_from_disk = load_experiment('05.anomaly_detection_experiment',data=data)
换一种模型检测异常值,此处是使用直方图的方式检测
histogram=create_model("histogram")
predict_model_histogram=predict_model(histogram,data=data)
predict_model_histogram["Anomaly"].value_counts()