所以0.19.1中对应的代码IsolationForest
可以在这里找到。这使您的问题更易于管理并且更少混乱,因为当前存在于 sklearn 的 master 分支上的内容与 0.19.1 版本完全不同。
在这个版本中,我们可以直接恢复基础分数,因为decision_function
它们是这样提供给我们的:
/// do the work for calculating the path lengths across the ensemble ///
scores = 2 ** (-depths.mean(axis=1) / _average_path_length(self.max_samples_))
return 0.5 - scores
scores
完全按照您对原始论文的期望进行计算。要恢复我们想要的,我们只需执行以下操作:
model = sklearn.ensemble.IsolationForest()
model.fit(data)
sklearn_score_anomalies = model.decision_function(data_to_predict)
original_paper_score = [-1*s + 0.5 for s in sklearn_score_anomalies]
非常重要的注意事项:这将不是scikit-learn 未来版本的默认行为decision_function
,因此请评估以后版本的文档,看看你必须做什么才能从模型中恢复原始分数!
希望这有帮助!