@异常检测怎么做,试试孤立随机森林算法(附代码)( 三 )


类似的 , 可以对训练后的模型调用 predict() 函数 , 并传入工资作为参数 , 找到异常列的值 。
将这两列添加到数据框 df 中 。添加完这两列后 , 查看数据框 。如我们所料 , 数据框现在有三列:工资、分数和异常值 。分数列中的负值和异常列中的 -1 表示出现异常 。异常列中的 1 表示正常数据 。
这个算法给训练集中的每个数据点都分配了异常分数 。可以定义阈值 , 根据异常分数 , 如果分数高于预定义的阈值 , 就可以将这个数据点标记为异常 。df['scores']=model.decision_function(df[['salary']]) df['anomaly']=model.predict(df[['salary']]) df.head(20)
@异常检测怎么做,试试孤立随机森林算法(附代码)
文章图片

文章图片

给数据的每一行中都添加了分数和异常值后 , 就可以打印预测的异常了 。
打印异常
为了打印数据中预测得到的异常 , 在添加分数列和异常列后要分析数据 。如前文所述 , 预测的异常在预测列中的值为 -1 , 分数为负数 。根据这一信息 , 将预测的异常(本例中是两个数据点)打印如下 。anomaly=df.loc[df['anomaly']==-1] anomaly_index=list(anomaly.index) print(anomaly)
异常输出 。
注意 , 这样不仅能打印异常值 , 还能打印异常值在数据集中的索引 , 这对于进一步处理是很有用的 。
评估模型
【@异常检测怎么做,试试孤立随机森林算法(附代码)】为了评估模型 , 将阈值设置为工资>99999 的为离群值 。用以下代码找出数据中存在的离群值:outliers_counter=len(df[df['salary']>99999]) outliers_counter
计算模型找到的离群值数量除以数据中的离群值数量 , 得到模型的准确率 。print("Accuracypercentage:",100*list(df['anomaly']).count(-1)/(outliers_counter))
准确率:100%
尾注
本教程内容包括:什么是离群值以及如何用孤立森林算法检测离群值 。还讨论了针对该问题的不同的探索性数据分析图 , 比如小提琴图和箱图 。
最终我们实现了孤立森林算法 , 并打印出了数据中真正的离群值 。希望你喜欢这篇文章 , 并希望这篇文章能在未来的项目中帮到你 。


推荐阅读