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

基于卫星数据集的Isolation Forest模型ROC曲线不平滑的原因与修复方案

Isolation Forest异常检测ROC曲线不平滑的原因及修复方案

常见原因

  • 误用离散标签计算ROC:直接用IsolationForest.predict()输出的-1/1离散标签计算ROC,会导致曲线只有少数离散点,呈现锯齿状。
  • 异常样本量不足:卫星数据集本身异常比例较低,若设置的污染率对应的异常样本太少,roc_curve生成的阈值点稀疏,曲线自然不平滑。
  • 得分转换不合理:IsolationForest.score_samples()返回的是样本“正常度”得分(值越大越正常),直接用该值计算ROC会导致得分分布区分度不足,阈值点分布不均。
  • 未做插值处理:roc_curve返回的是离散的FPR、TPR点,直接连线时样本量少就会出现不平滑的折线。

修复方法

1. 使用连续异常得分计算ROC

替换predict()为score_samples(),并将得分转换为“异常度”(值越大代表越异常):

from sklearn.ensemble import IsolationForest
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt

# 初始化模型,contamination贴近数据集真实异常比例
model = IsolationForest(contamination=0.05)
model.fit(X_train)

# 转换为异常度得分:取score_samples的负值
y_score = -model.score_samples(X_test)
# 计算ROC离散点
fpr, tpr, thresholds = roc_curve(y_test, y_score)
roc_auc = auc(fpr, tpr)

2. 插值平滑ROC曲线

用插值生成更多连续的FPR、TPR点,让曲线更平滑:

from scipy.interpolate import interp1d
import numpy as np

# 生成1000个均匀分布的FPR点
fpr_interp = np.linspace(0, 1, 1000)
# 对TPR做线性插值
tpr_interp = interp1d(fpr, tpr, kind='linear', fill_value="extrapolate")(fpr_interp)
roc_auc_interp = auc(fpr_interp, tpr_interp)

# 绘制平滑曲线
plt.figure(figsize=(8,6))
plt.plot(fpr_interp, tpr_interp, label=f'Smoothed ROC (AUC = {roc_auc_interp:.2f})')
plt.plot([0,1], [0,1], 'k--', label='Random Guess')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend(loc='lower right')
plt.show()

3. 校准模型得分(可选)

用概率校准优化得分连续性,提升曲线平滑度:

from sklearn.calibration import CalibratedClassifierCV

# 对Isolation Forest做概率校准
calibrated_model = CalibratedClassifierCV(model, method='sigmoid', cv='prefit')
calibrated_model.fit(X_train, y_train)
# 获取校准后的异常概率
y_proba = calibrated_model.predict_proba(X_test)[:, 1]

# 用校准概率计算ROC
fpr, tpr, thresholds = roc_curve(y_test, y_proba)

4. 调整污染率参数

确保contamination参数尽可能贴近数据集真实异常比例,提升模型得分的区分度,让ROC曲线点分布更合理。


内容的提问来源于stack exchange,提问作者ابوبكر مستور

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:35