Sklearn错误:R^2分数在少于两个样本的情况下定义不明

为了测试这个功能,我创建了一个data.csv文件。所以我做了这个实验。

s1;s2;s3;s4;result1;2;3;4;5;152;1;3;1;2;919;21;0;0;0;4011;9;0;1;5;265;5;5;5;5;2580;1;1;1;1;841;2;3;1;1;81;0;0;1;1;310;10;10;10;20;60

如你所见,results1, s2, s3和s4的总和。所以我这样做了。

data = pd.read_csv('example.csv', sep=';', index_col=0)data = data[['s1', 's2', 's3', 's4', 'result']]predict = 'result'x = np.array(data.drop([predict], 1))y = np.array(data[predict])x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(x, y, test_size=0.1)linear = linear_model.LinearRegression()linear.fit(x_train, y_train)acc = linear.score(x_test, y_test)print(acc)

但我得到了这个错误。

C:\Users\Sharki\Anaconda3\lib\site-packages\sklearn\metrics\regression.py:543: UndefinedMetricWarning: R^2 score is not well-defined with less than two samples. warnings.warn(msg, UndefinedMetricWarning)

这是怎么回事?


回答:

原因是你设置的train_test_split中的test_size太小了;在只有10行的数据集中,test_size=0.1相当于测试集中的单个数据点:

x_test, y_test# (array([[2, 3, 4, 5]]), array([15]))

因此出现了这个错误(实际上是一个警告,因为返回了nan)。

将其改为至少0.2:

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)[...]print(acc)# -88.65298209559413x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=42)[...]print(acc)# -0.5210446297916358

并准备好迎接由于数据量极小而导致的R^2结果的大幅波动(如上面的例子所示)。

此外,请注意你的CSV文件中有6个字段,但只有5个列名,结果是pandas在读取数据框时将第一列解释为索引(注意上面的x_test变量中缺少了1)。你应该在标题中添加一个s5并移除index_col=0,即:

data = pd.read_csv('example.csv', sep=';')

在发生错误时,始终仔细检查你的变量是值得的。

虽然与你的问题无关,但将R^2称为acc(暗示准确度)并不是好的做法,因为R2和准确度是不同的性能度量,而准确度在回归问题中毫无意义(它只在分类问题中有意义)。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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