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

Isolation Forest参数选择及六列数据集离群点可视化咨询

关于Isolation Forest的contamination参数选择与离群点可视化

一、contamination参数的选择建议

首先得澄清:在scikit-learn 0.22及以后的版本中,Isolation Forest的contamination默认值已经从0.2改成了'auto'——这个模式下模型会自动根据决策函数的阈值估算异常点比例,完全不用你手动指定。如果你的sklearn版本较新,直接用默认的'auto'是最稳妥的选择,尤其在完全不清楚数据中异常点占比的情况下。

如果你的版本是旧版(默认0.2),或者想手动调整得更精准,可以试试这些方法:

  • 先做数据探索:用箱线图(sns.boxplot)查看每一列的分布,初步判断各特征中异常点的大致比例,取一个整体平均值作为参考(比如大部分特征异常点比例在5%-10%,就可以把contamination设为0.05或0.1)。
  • 统计方法估算:用四分位距(IQR)计算每个特征的异常点数量,统计整体异常点占总样本的比例,把这个比例作为contamination的输入。
  • 网格搜索验证:尝试几个合理取值(比如0.05、0.1、0.15、0.2),训练模型后观察异常点的特征是否符合业务认知——比如异常点数值是否明显偏离正常范围,或是集中在不合理的特征组合上,选最符合逻辑的那个值。

二、6维数据集的离群点可视化实现

6维数据没法直接画散点图,需要先通过降维把数据降到2维或3维,常用方法是PCA(线性降维,速度快)或t-SNE(非线性降维,适合复杂数据但计算慢)。这里用PCA举个完整示例:

步骤1:导入所需库

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import IsolationForest
from sklearn.decomposition import PCA

步骤2:加载数据集

# 替换成你的数据集路径,确保数据为纯数值格式(非数值列需提前预处理)
df = pd.read_csv("your_dataset.csv")
X = df.values  # 提取特征矩阵

步骤3:降维处理

# 用PCA将6维数据降到2维
pca = PCA(n_components=2, random_state=42)
X_reduced = pca.fit_transform(X)

步骤4:训练模型并预测

# 用'auto'模式自动估计异常比例,也可替换为你估算的数值(如0.1)
clf = IsolationForest(contamination='auto', random_state=42)
y_pred = clf.fit_predict(X)
# y_pred中,1代表正常点,-1代表异常点

步骤5:绘制可视化图

plt.figure(figsize=(10, 7))

# 绘制正常点
sns.scatterplot(
    x=X_reduced[y_pred == 1, 0],
    y=X_reduced[y_pred == 1, 1],
    label="Normal Points",
    alpha=0.6,
    color="#1f77b4"
)

# 绘制异常点(放大显示更显眼)
sns.scatterplot(
    x=X_reduced[y_pred == -1, 0],
    y=X_reduced[y_pred == -1, 1],
    label="Outliers",
    alpha=0.8,
    color="#ff4b5c",
    s=80
)

plt.title("Outlier Detection with Isolation Forest (PCA Reduced 6D Data)", fontsize=14)
plt.xlabel(f"PCA Component 1 (Explains {pca.explained_variance_ratio_[0]:.1%} Variance)", fontsize=12)
plt.ylabel(f"PCA Component 2 (Explains {pca.explained_variance_ratio_[1]:.1%} Variance)", fontsize=12)
plt.legend(fontsize=12)
plt.grid(alpha=0.3)
plt.show()

如果你的数据是非线性结构,想更精准展示聚类关系,可以把PCA换成t-SNE:

from sklearn.manifold import TSNE

tsne = TSNE(n_components=2, random_state=42, perplexity=30)
X_reduced = tsne.fit_transform(X)

后续绘图代码和上述一致即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:31:52