Python sklearn隔离林树分割阈值精度

时间:2017-08-25 16:31:30

标签: python numpy scikit-learn isolation pmml

我试图使用Scikit-Learn(sklearn)隔离森林进行异常检测。我还使用sklearn2pmml库将模型转换为PMML格式。理想情况下,使用两者(pickle和PMML(使用JPMML Evaluator))文件进行预测应该产生与使用相同模型生成PMML相同的结果。

但是我发现几个记录的预测(异常得分)在3/4小数点处不匹配。例如使用pickle进行预测: - 0.975643并使用PMML文件进行相同记录的预测: - 0.975498。

我试图用boston数据集复制这个问题,该数据集是在sklearn中构建的。 我创建了隔离林(没有树:1)并转换为pickle文件和PMML.I然后使用python代码(how to extract the decision rules from scikit-learn decision-tree?)将pickle转换为文本格式,并将其与PMML文件进行比较。

我发现Python存储树节点阈值的方式与PMML不同。  例如PMML: - SimplePredicate field =“CHAS”operator =“lessOrEqual”value =“0.08887574”

Python Pickle: - 如果CHAS< = 0.0888757431362:

所以,pickle以numpy float64格式存储阈值,PMML存储在numpy float 32中。我想。

但是看看github上的sklearn代码,我猜sklearn还以numpy float32格式存储树阈值。那么为什么我的pickle存储值为float64而不是float32,因为0.0888757431362肯定不是float32。

如果有人对这个问题有任何想法或者我的假设是错误的,请告诉我。

0 个答案:

没有答案