具有交叉验证的 Sklearn 线性回归返回 NA 准确度分数

Posted

技术标签:

【中文标题】具有交叉验证的 Sklearn 线性回归返回 NA 准确度分数【英文标题】:Sklearn Linear Regression with Cross Validate Returns NA Accuracy Scores 【发布时间】:2018-11-23 15:35:57 【问题描述】:

我正在运行一个带有基本输入的非常简单的初始线性回归模型。我有一个小数据集并删除了所有空值。我使用交叉验证并传递评分方法,以便能够检索分数以判断欠拟合/过拟合。

但是,我得到了 Null Accuracy:有人知道为什么会发生这种情况吗?

X_train, X_test, y_train, y_test = train_test_split(X,y, random_state=42)

#Linear Regression

lr = linear_model.LinearRegression(fit_intercept=True)

scores_lr = cross_validate(lr, X_train, y_train, return_train_score = True, scoring = ('r2', 'neg_mean_squared_error'), cv=10)

print 'Training Accuracy: ', np.sqrt(-scores_lr['train_r2'].mean())
print 'Training RMSE: ', np.sqrt(-scores_lr['train_neg_mean_squared_error'].mean())
print 'Validation Accuracy: ', np.sqrt(-scores_lr['test_r2'].mean())
print 'Validation RMSE: ', np.sqrt(-scores_lr['test_neg_mean_squared_error'].mean()) 

Training Accuracy:  nan
Training RMSE:  1.0170113520623867
Validation Accuracy:  nan
Validation RMSE:  1.0230034705533613

【问题讨论】:

【参考方案1】:

您似乎在取负数的 sqrt,结果是 nan。您要计算什么度量?精度通常用于分类问题。它被定义为正确预测的类在观察总数中的比例。由于您使用的是线性回归模型并计算均方根误差,因此您的应用领域似乎是回归(使用连续值)。您尝试采用 sqrt 的 R2 度量是您当前模型能够解释的方差分数(笼统地说)。它应该不需要进一步处理。

【讨论】:

以上是关于具有交叉验证的 Sklearn 线性回归返回 NA 准确度分数的主要内容,如果未能解决你的问题,请参考以下文章

详解决策树-交叉验证菜菜的sklearn课堂笔记

Python 中的逻辑回归和交叉验证(使用 sklearn)

sklearn - 具有多个分数的交叉验证

在 sklearn 中使用交叉验证和 AUC-ROC 进行逻辑回归模型

Python sklearn 逻辑回归 K-hold 交叉验证:如何为 coef_ 创建一个框架

线性回归中的交叉验证