为什么GridSearchCV没有给出最好的分数? - Scikit Learn

时间:2015-05-25 16:16:45

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

我有一个包含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 个答案:

答案 0 :(得分:14)

best_score_是交叉验证的最佳分数。也就是说,模型适合训练数据的部分,并且通过预测训练数据的其余部分来计算得分。这是因为您已将X_trainy_train传递给fit; fit过程因此对您的测试集没有任何了解,只知道您的训练集。

模型对象的score方法根据您提供的数据对模型进行评分。您通过了X_testy_test,因此此调用会计算 test 集合中拟合(即调整)模型的得分。

简而言之,这两个分数是根据不同的数据集计算出来的,因此它们不同并不奇怪。