为什么使用 sklearn 的 R2 函数会得到 nan?

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

y1_test, y2_test, y3_test, y4_test = get_test_targets(df)ypred1, ypred2, ypred3, ypred4 = ml_model(df, ElasticNet())

我想使用 sklearn 来测量 y_truey_predicted 的 R2 分数。

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

使用 r2_score(np.array([y2_test]), np.array([ypred2[0]])) 得到 nan

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


回答:

有一个警告告诉你问题出在哪里:

import numpy as npfrom sklearn.metrics import r2_scorex = np.array([2.3])y = np.array([2.1]) # 具体数值并不重要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 结果。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注