美文网首页
1.pycaret进行异常检测

1.pycaret进行异常检测

作者: wo_monic | 来源:发表于2023-11-02 09:39 被阅读0次

    本系列的是在pycaret3版本上运行的

    1. 从官方下载数据集,读取数据集,预处理分割为训练集和验证集
    # 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()
    

    异常值这个是无监督学习,有的模型可能无法检测到异常值,不同的模型检测到的数量也可能不一样,这个需要根据实际情况自行进行取舍。

    相关文章

      网友评论

          本文标题:1.pycaret进行异常检测

          本文链接:https://www.haomeiwen.com/subject/wzzgidtx.html