为啥 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_trainy_train 传递给fit;因此,fit 进程对您的测试集一无所知,只知道您的训练集。

模型对象的score 方法根据您提供的数据对模型进行评分。你通过了X_testy_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

GridSearchCV 是不是存储所有参数组合的所有分数?

测试准确度分数高于 GridSearchCV 中的最佳分数

GridSearchCV:选定类的性能指标[不平衡数据集]