如何控制scikit-learn决策树算法的精度
Posted
技术标签:
【中文标题】如何控制scikit-learn决策树算法的精度【英文标题】:How to control the precision of the scikit-learn decision tree algorithm 【发布时间】:2017-12-14 18:06:53 【问题描述】:我正在使用 scikit-learn 决策树来解决分类问题。 我的输入数据的精度为小数点后 4 位。但是,由于binary representation errors,它们内部的 numpy 表示可能有超过 4 个小数点的重要性。
有没有办法让我在计算二叉树时指示 sklearn 算法不要使用超过 4 个小数点的阈值?否则我担心结果在大深度上可能毫无意义。
【问题讨论】:
你可以尝试使用:numpy.set_printoptions 看看它是否有效?还要记住,“set_printoptions”只影响数组,因为数组的打印是在 numpy 的控制之下的。另一方面,标量和标量数组的打印被移交给没有 set_printoptions 的 python。 @reMJ 你有解决方案吗? 【参考方案1】:在构建决策树时避免与浮点表示相关的数字错误的一种可能方法是使用整数而不是浮点数来拟合模型。如果您的输入数据的精度为 4 位,您只需将其乘以 104 并四舍五入到最接近的整数并将结果转换为整数,如下所示:
input_data = np.int32(np.around(input_data * 10**4))
通过此功能缩放,可以更准确地计算条件阈值。
演示
In [2]: import numpy as np
In [3]: input_data = np.array([0.0020, 17.0001, 531.4679])
In [4]: np.set_printoptions(precision=32)
In [5]: input_data
Out[5]:
array([ 2.00000000000000004163336342344337e-03,
1.70000999999999997669419826706871e+01,
5.31467899999999985993781592696905e+02])
In [6]: input_data = np.int32(np.around(input_data * 10**4))
In [7]: input_data
Out[7]: array([ 20, 170001, 5314679])
【讨论】:
以上是关于如何控制scikit-learn决策树算法的精度的主要内容,如果未能解决你的问题,请参考以下文章
[机器学习与scikit-learn-15]:算法-决策树-分类问题代码详解