You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSV数据异常检测:如何从Sklearn Isolation Forest获混淆矩阵与评分

入门级讲解:Isolation Forest的0-1评分与混淆矩阵生成

一、获取0.0-1.0区间的算法评分

Isolation Forest默认输出的是类别标签:1代表正常样本,-1代表异常样本。如果你想得到0到1之间的连续评分(用来衡量样本的异常/正常程度),得用模型的decision_function()方法,再做简单转换。

具体操作(附代码)

  1. 补全数据加载与模型训练步骤
import pandas as pd
from sklearn.ensemble import IsolationForest

# 加载你的CSV文件
df = pd.read_csv("你的文件路径.csv")
X = df.iloc[:, :4].values  # 取前4列特征数据(可根据实际列位置调整)

# 初始化并训练模型,contamination设为你预估的异常样本比例(比如0.05代表5%)
clf = IsolationForest(n_estimators=100, contamination=0.05, random_state=42)
clf.fit(X)
  1. 计算并转换评分
# 获取模型原始决策分数:值越小,样本越可能是异常
decision_scores = clf.decision_function(X)

# 转换为【异常概率评分】(0=最正常,1=最异常)
anomaly_scores = 0.5 - (decision_scores / 2)

# 或者转换为【正常概率评分】(0=最异常,1=最正常)
normal_scores = 0.5 + (decision_scores / 2)
  • 转换逻辑:decision_scores的取值范围约为[-1,1],通过上述公式可映射到0-1区间,直观体现样本的异常/正常程度。

二、生成混淆矩阵

混淆矩阵用来对比模型预测结果和真实情况,但前提是你必须有真实的异常/正常标签(比如CSV里有专门一列标记哪些是异常样本)。如果是无监督检测、没有真实标签,无法生成这个矩阵。

具体操作(附代码)

  1. 对齐真实标签与预测标签格式
# 假设CSV里有一列叫"is_anomaly",1代表异常,0代表正常(根据实际列名调整)
y_true = df["is_anomaly"].values

# 把模型默认输出的-1(异常)、1(正常)转成和真实标签一致的格式
y_pred = clf.predict(X)
y_pred = [1 if label == -1 else 0 for label in y_pred]  # 现在y_pred中1=异常,0=正常,与y_true对齐
  1. 计算并可视化混淆矩阵
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

# 计算混淆矩阵
cm = confusion_matrix(y_true, y_pred)

# 打印原始矩阵
print("混淆矩阵:")
print(cm)

# 用热力图可视化,更直观
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", 
            xticklabels=["预测正常", "预测异常"], 
            yticklabels=["真实正常", "真实异常"])
plt.xlabel("预测结果")
plt.ylabel("真实情况")
plt.show()

混淆矩阵入门解读

这是一个2x2表格,四个数值的含义:

  • 左上角(TN):真实正常、模型也判对的样本数
  • 右上角(FP):真实正常、但模型误判为异常的样本数(误报)
  • 左下角(FN):真实异常、但模型误判为正常的样本数(漏报)
  • 右下角(TP):真实异常、模型也判对的样本数
    通过这四个数值,你能快速看出模型的误报、漏报情况,判断模型效果。

关键提醒

  • 若CSV无真实标签,无需尝试混淆矩阵,可通过分析评分分布、可视化异常样本评估模型。
  • contamination参数需贴合实际异常样本占比,设置偏差会直接影响模型判断结果。

内容的提问来源于stack exchange,提问作者xredJ3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:41:20