Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python XGBoost对列表和数组的预测略有不同,这是正确的吗?_Python_Numpy_Scikit Learn_Xgboost - Fatal编程技术网

Python XGBoost对列表和数组的预测略有不同,这是正确的吗?

Python XGBoost对列表和数组的预测略有不同,这是正确的吗?,python,numpy,scikit-learn,xgboost,Python,Numpy,Scikit Learn,Xgboost,我注意到我传递了一个双括号的测试特性值列表 print(test_feats) >> [[23.0, 3.0, 35.0, 0.28, -3.0, 18.0, 0.0, 0.0, 0.0, 3.33, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 39.0, 36.0, 113.0, 76.0, 0.0, 0.0, 1.0, 0.34, -999.0, -999.0, -999.0, -999.0, -999.0, -9

我注意到我传递了一个双括号的测试特性值列表

print(test_feats)
>> [[23.0, 3.0, 35.0, 0.28, -3.0, 18.0, 0.0, 0.0, 0.0, 3.33, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 39.0, 36.0, 113.0, 76.0, 0.0, 0.0, 1.0, 0.34, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, -999.0, 0.0, 25.0, 48.0, 48.0, 0.0, 29.0, 52.0, 53.0, 99.0, 368.0, 676.0, 691.0, 4.0, 9.0, 12.0, 13.0]]
我注意到,当我将其传递给XBGBoost进行预测时,当我将其转换为数组时,它会返回不同的结果

array_test_feats = np.array(test_feats)
print(regr.predict_proba(test_feats)[:,1][0])
print(regr.predict_proba(aray_test_feats)[:,1][0])
>> 0.46929297
>> 0.5161868
一些基本检查表明值是相同的

print(sum(test_feats[0]) == array_test_feats.sum())
print(test_feats == array_test_feats)) 
>> True
>> array([[ True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True,  True,
         True,  True,  True,  True,  True,  True,  True,  True]])

我猜阵列是正确的选择,但我真的不知道该怎么说。这些预测非常接近,很容易被忽略,因此我很想了解为什么会发生这种情况。

您刚刚遇到了这里描述的问题:

文档不包括列表作为允许的 数据输入到DMatrix。尽管如此,还是可以传入一个列表 没有错误。此更改将阻止传递列表表单 直接进入

我遇到了一个问题,即传入一个列表与一个np.array的结果 在不同的预测中(有时超过10%的相对差异) 同样的数据。尽管这些差异并不常见(约1.5% 在某些应用中,这可能会导致严重后果 问题

从本质上讲,直接传递Python列表在XGBoost中不受官方支持,但由于它在XGBoost的数据转换中起作用,因此不管怎样它都能工作

这会导致XGBoost使用
XGDMatrixCreateFromCSREx
函数而不是
XGDMatrixCreateFromMat
为数据创建基线矩阵。然后,在sprase和Density表示中缺少的元素之间存在一个平衡点:

“稀疏”元素被树增强器视为“缺失”,并被视为 线性助推器的零点