gpt4 book ai didi

Python Numpy 数组(坏)自动舍入

转载 作者:行者123 更新时间:2023-12-01 08:18:32 27 4
gpt4 key购买 nike

我在线性回归模型上使用留一交叉验证。拥有 8869 个观察结果,原因如下:

reg = LinearRegression()

list_Rs = cross_val_score(reg, X_34_const, y_34,
cv = len(y_34),
scoring = 'r2')

我应该获得一个包含 8869 个值的 numpy 数组,包含在 0 到 1 之间,有 8 位小数。问题是,在生成结果时,Python 自动将所有此类值舍入为 0.0:

array([0., 0., 0., ..., 0., 0., 0.])

相反,例如,如果我使用 2 折交叉验证(这意味着 list_Rs 是一个具有 2 个值的 numpy 数组),它会打印正确的未舍入值:

list_Rs = cross_val_score(reg, X_34_const, y_34,
cv = 2,
scoring = 'r2')

打印出来的是:

array([0.16496198, 0.18115719])

这不仅仅是一个打印表示问题,因为,例如:

print(list_Rs[3] == 0)

返回真。这对我来说是一个主要问题,因为在我的计算中,我需要将 list_Rs 的值放在分数的分母处!

如何解决该问题,以免我的 8869 维数组中也出现自动舍入值?

非常感谢,期待您的回复。

最佳答案

Python 和 NumPy 都没有在这里进行任何舍入:scikit-learn 的 r2_score评分函数(在使用 scoring='r2' 调用 cross_val_score 时在后台调用)返回实际的零。

这是因为通过使用留一法,每个验证集都包含一个样本。因此,现在对于交叉验证的每个部分,都会使用单个观测值以及该观测值的单个预测值来调用 r2_score。在这种情况下,它的产量为零。例如:

>>> from sklearn.metrics import r2_score
>>> import numpy as np
>>> y_true = np.array([2.3])
>>> y_pred = np.array([2.1])
>>> r2_score(y_true, y_pred)
0.0

Here's假设预测值与观察值不完全匹配,在对单个数据点进行评估时,r2_score 最终(有点任意)返回零的实现部分。

可以说,r2_score 应该引发异常或产生负无穷大而不是零:确定系数使用观测数据的方差作为归一化因子,并且当只有一个时观察,方差为零,因此 R2 分数的公式涉及除以零。 scikit-learn bug report 对此有一些讨论。 .

关于Python Numpy 数组(坏)自动舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54841298/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com