为啥 GridSearchCV 没有给出最好的分数? - Scikit 学习
Posted
技术标签:
【中文标题】为啥 GridSearchCV 没有给出最好的分数? - Scikit 学习【英文标题】:Why does not GridSearchCV give best score ? - Scikit Learn为什么 GridSearchCV 没有给出最好的分数? - Scikit 学习 【发布时间】:2015-08-07 03:58:49 【问题描述】:我有一个包含 158 行和 10 列的数据集。我尝试建立多元线性回归模型并尝试预测未来价值。
我使用 GridSearchCV 调整参数。
这是我的 GridSearchCV 和回归函数:
def GridSearch(data):
X_train, X_test, y_train, y_test = cross_validation.train_test_split(data, ground_truth_data, test_size=0.3, random_state = 0)
parameters = 'fit_intercept':[True,False], 'normalize':[True,False], 'copy_X':[True, False]
model = linear_model.LinearRegression()
grid = GridSearchCV(model,parameters)
grid.fit(X_train, y_train)
predictions = grid.predict(X_test)
print "Grid best score: ", grid.best_score_
print "Grid score function: ", grid.score(X_test,y_test)
这段代码的输出是:
网格最好成绩:0.720298870251
网格得分函数:0.888263112299
我的问题是best_score_
和score
函数有什么区别?
score
函数如何优于best_score
函数?
提前致谢。
【问题讨论】:
【参考方案1】:best_score_
是交叉验证的最佳分数。也就是说,模型适合训练数据的部分,并且通过预测训练数据的其余部分来计算分数。这是因为您将X_train
和y_train
传递给fit
;因此,fit
进程对您的测试集一无所知,只知道您的训练集。
模型对象的score
方法根据您提供的数据对模型进行评分。你通过了X_test
和y_test
,所以这个调用计算了 test 集上拟合(即调整)模型的分数。
简而言之,这两个分数是在不同的数据集上计算得出的,因此它们不同也就不足为奇了。
【讨论】:
感谢您的解释。我还有几个问题。哪个分数等于 r_squared ?哪一个对未来的预测更保密?我想第二个score
但我还是有点困惑。
@BatuhanBardak:他们都是 R^2。对于不同的配合,它们是 R^2。 R^2 的值不是模型的固定特征;这取决于您用于拟合模型的数据,以及您用于进行预测的数据。我不确定您所说的“更加机密”是什么意思。
其实我的主要问题是为我的模型找到最好的 R^2 分数。我有 158 个示例数据。每个数据代表一个week
(这个数据是时间序列数据)。所以我尝试预测 159.week
值。所以现在我尝试创建一个预测未来数据的最佳模型。但是我的 R^2 分数是多少?是0.7202
还是0.8882
。我应该为我的模型关注哪个分数?如果我的模型 R^2 是 0.8882
这对我有好处,但如果不是,我必须开发我的模型。我希望,我可以解释我想说的。 @BrenBarn
@BatuhanBardak:你正在研究可能更适合Cross Validated 的东西。你说的真的没有道理。通过在正确的数据上测试您的模型,您始终可以获得非常高的 R^2 值; R^2 仅在您的测试数据允许的范围内有意义。您需要做的是提前决定要测试哪些数据,然后使用其中的 R^2 值。您需要针对相同的数据测试不同的模型,以找到具有最佳 R^2 的模型,而不是针对特定值(如 0.8)。以上是关于为啥 GridSearchCV 没有给出最好的分数? - Scikit 学习的主要内容,如果未能解决你的问题,请参考以下文章
我从 GridSearchCV 获得的 R^2 分数与我从 cross_val_score 获得的分数非常不同,为啥? (sklearn,python)
为啥当我将 GridSearchCV 与 roc_auc 评分一起使用时,grid_search.score(X,y) 和 roc_auc_score(y, y_predict) 的分数不同?
为啥在逻辑回归中对 roc_auc 进行评分时,GridSearchCV 不给出具有最高 AUC 的 C