Python 为什么我在使用sklearn R2函数时得到nan?

Python 为什么我在使用sklearn R2函数时得到nan?,python,python-3.x,machine-learning,scikit-learn,Python,Python 3.x,Machine Learning,Scikit Learn,我总是用sklearn模型预测下一个值 y1_test, y2_test, y3_test, y4_test = get_test_targets(df) ypred1, ypred2, ypred3, ypred4 = ml_model(df, ElasticNet()) 我想使用sklearn来测量y\u true和y\u predicted的r2分数 np.array([y2_test]) >> array([6.75233645]) np.array([ypred2[0

我总是用
sklearn
模型预测下一个值

y1_test, y2_test, y3_test, y4_test = get_test_targets(df)

ypred1, ypred2, ypred3, ypred4 = ml_model(df, ElasticNet())
我想使用sklearn来测量
y\u true
y\u predicted
的r2分数

np.array([y2_test])
>> array([6.75233645])

np.array([ypred2[0]])
array([6.75233645])
使用
r2_分数(np.array([y2_测试]),np.array([ypred2[0]])
给出
nan


我不明白为什么我会收到
nan

有一条警告告诉您出了什么问题:

import numpy as np
from sklearn.metrics import r2_score

x = np.array([2.3])
y = np.array([2.1]) # exact values do not matter

r2_score(x, y)
结果:

UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.
  warnings.warn(msg, UndefinedMetricWarning)

nan
这并不奇怪:R^2的

R^2 = 1 - (total_sum_squares)/(residual_sum_squares)
但是只有一个样本,分数的命名和分母都是0,导致
0/0
除法,这实际上是
nan
(计算上和数学上)

底线:您不应该只使用一对数据来计算R^2;为了得到有意义的R^2结果,将更多对预测和地面真相样本批处理在一起