我试图使用scikitlearn(sklearn)隔离林进行异常检测。我还使用sklearn2pmml库将模型转换为PMML格式。理想情况下,同时使用(pickle和PMML(使用JPMML求值器))文件的预测应该产生与使用相同模型生成PMML相同的结果。在
但我发现两个记录的预测(异常分数)在小数点后3/4处不匹配。e、 g.预测使用泡菜:-0.975643使用PMML文件对同一记录进行预测:-0.975498。在
我试图用sklearn内置的boston数据集复制这个问题。 我创建了隔离林(树数为1)并转换为pickle文件和PMML,然后使用python代码(how to extract the decision rules from scikit-learn decision-tree?)将pickle转换为文本格式,并将其与PMML文件进行了比较。在
我发现Python存储树节点阈值的方式与PMML不同。 e、 g.PMML:-SimplePredicate field=“CHAS”operator=“lessOrEqual”value=“0.08887574”
Python Pickle:-如果CHAS<;=0.0888757431362:
所以pickle以numpyfloat64格式存储阈值,PMML以numpyfloat32格式存储。在
但是看看github上的sklearn代码,我想sklearn也以numpyfloat32格式存储树阈值。那么为什么pickle将值存储为float64而不是float32,因为0.0888757431362肯定不是float32。在
如果有人对这个问题有任何想法或者我的假设是错误的,请告诉我。在
目前没有回答
相关问题 更多 >
编程相关推荐