【问题标题】: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 函数?

提前致谢。

【问题讨论】:

    标签: python r machine-learning scikit-learn regression


    【解决方案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)。
    猜你喜欢
    • 2015-03-31
    • 2020-08-02
    • 2019-02-08
    • 2014-10-07
    • 2019-09-30
    • 2018-02-21
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多