我正在使用scikit学习决策树解决分类问题。
我的输入数据的精度为4个小数点。但是,由于binary representation errors的原因,它们的内部numpy表示形式可能具有4个以上的小数点有效位。
在计算二叉树时,有没有办法指示sklearn算法不要使用大于4个小数点的阈值?否则,恐怕结果在很大深度上可能毫无意义。
最佳答案
避免在决策树的构造中与浮点表示相关的数字错误的一种可能方法是使用整数而不是浮点数来拟合模型。如果输入数据的精度为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])