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

Python中使用Scikit Learn做离群点检测时如何指定样本为非离群点

Scikit-learn离群点检测固定指定样本为非离群点的实现方案

可以实现该需求,常用两种方案如下:

方案1:使用半监督新颖点检测模式(推荐)

Scikit-learn中大部分离群点检测算法都支持novelty参数,开启后进入新颖点检测模式:你可以仅用预先确认的非离群点完成模型训练,模型会以这批样本的分布作为正常基准,后续预测时这批已知样本不会被判定为离群点。
支持该模式的算法包括:IsolationForest、OneClassSVM、LocalOutlierFactor、EllipticEnvelope等。
示例代码:

from sklearn.ensemble import IsolationForest

# 替换为你预先确认的非离群点特征矩阵
X_known_normal = your_known_normal_samples
# 替换为所有待检测样本(包含上述已知非离群点)
X_all = your_all_samples

# 开启新颖点检测模式
clf = IsolationForest(novelty=True, random_state=42)
# 仅用已知正常样本训练
clf.fit(X_known_normal)

# 预测结果中1为正常,-1为离群点,已知非离群点都会被标记为1
y_pred = clf.predict(X_all)

方案2:无监督检测后手动修正标签

如果你需要保留无监督算法对全量数据的分布学习结果,不需要调整训练逻辑,也可以在得到预测结果后,手动将指定样本的标签修改为正常即可。
示例代码:

from sklearn.ensemble import IsolationForest

# 所有待检测样本
X_all = your_all_samples
# 替换为已知非离群点在X_all中的索引列表
known_normal_idx = [0, 3, 5, 9]

clf = IsolationForest(random_state=42)
y_pred = clf.fit_predict(X_all)

# 强制将已知非离群点的预测结果修正为正常
y_pred[known_normal_idx] = 1

注意事项

  • 若使用LocalOutlierFactor的默认无监督模式(novelty=False),只能通过方案2修正结果,该模式下不支持基于已知正常样本训练后预测。
  • 方案1的检测结果会更贴合你对正常样本的定义,优先级高于方案2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:02