【问题标题】:Ridge regression model using cross validation technique and Grid-search technique使用交叉验证技术和网格搜索技术的岭回归模型
【发布时间】:2020-04-29 22:08:01
【问题描述】:

我为岭回归创建了 python 代码。为此,我将交叉验证和网格搜索技术结合使用。我得到了输出结果。我想检查我的回归模型构建步骤是否正确?谁能解释一下?

from sklearn.linear_model import Ridge
ridge_reg = Ridge()
from sklearn.model_selection import GridSearchCV
params_Ridge = {'alpha': [1,0.1,0.01,0.001,0.0001,0] , "fit_intercept": [True, False], "solver": ['svd', 'cholesky', 'lsqr', 'sparse_cg', 'sag', 'saga']}
Ridge_GS = GridSearchCV(ridge_reg, param_grid=params_Ridge, n_jobs=-1)
Ridge_GS.fit(x_train,y_train)
Ridge_GS.best_params_

输出 - {'alpha': 1, 'fit_intercept': True, 'solver': 'cholesky'}

Ridgeregression = Ridge(random_state=3, **Ridge_GS.best_params_)
from sklearn.model_selection import cross_val_score
all_accuracies = cross_val_score(estimator=Ridgeregression, X=x_train, y=y_train, cv=5)
all_accuracies

输出 - 数组([0.93335508, 0.8984485 , 0.91529146, 0.89309012, 0.90829416])

print(all_accuracies.mean())

输出 - 0.909695864130532

Ridgeregression.fit(x_train,y_train)
Ridgeregression.score(x_test,y_test)

输出 - 0.9113458623386644

我的岭回归准确度是 0.9113458623386644(R 平方)吗? 如果是,那么 0.909695864130532 值是什么意思。

【问题讨论】:

    标签: python machine-learning regression cross-validation grid-search


    【解决方案1】:

    是的,来自 Ridge 回归的 score 方法会返回您的 R 平方值 (docs)。

    如果您不知道 CV 方法的工作原理,它会将您的数据分成 5 个相等的块。然后对于每个参数组合,它使用每个块一次作为评估集来拟合模型五次,同时使用其余数据作为训练集。最好的参数集被选择为给出最高平均分数的集合。

    您的主要问题似乎是为什么您的 CV 分数的平均值低于在测试集上评估的完整训练的分数。这并不奇怪,因为完整的训练集将大于用于all_accuracies 值的任何 CV 样本。更多的训练数据通常会为您提供更准确的模型。

    测试集分数(即您的第二个“分数”,0.91...)最有可能代表您的模型将如何推广到看不见的数据。这就是您应该引用的模型的“分数”。 CV 集的性能是有偏差的,因为这是您选择参数的基础数据。

    一般来说,您的方法看起来是正确的。使用cross_val_score 重新拟合岭回归的步骤似乎是必要的。一旦你从 GridSearchCV 找到了你的最佳参数,我会直接去拟合完整的训练数据集(就像你最后所做的那样)。

    【讨论】:

    • "您的主要问题似乎是为什么您的 CV 分数的平均值低于在测试集上评估的完整训练的分数。这并不奇怪,因为完整的训练集将是“我不清楚你的意思?你能再解释一下吗?我的主要问题是我遵循的步骤是正确的???
    • 这两个值有什么区别? 0.909695864130532 和 0.9113458623386644 我的岭回归分数是多少??
    • 我在回答中添加了更多细节。我希望这会有所帮助。总的来说,我认为你在做正确的事。
    • "一般来说,您的方法看起来是正确的。使用 cross_val_score 重新拟合岭回归的步骤似乎是必要的。一旦您从 GridSearchCV 找到最佳参数,我将直接拟合完整的训练数据集(如你最后做的)。”这意味着 from sklearn.model_selection import cross_val_score all_accuracies = cross_val_score(estimator=Ridgeregression, X=x_train, y=y_train, cv=5) all_accuracies
    • “使用 cross_val_score 重新拟合岭回归的步骤似乎是必要的。一旦你从 GridSearchCV 中找到最佳参数,我将直接拟合完整的训练数据集(就像你最后所做的那样)。 "这意味着 from { sklearn.model_selection import cross_val_score all_accuracies = cross_val_score(estimator=Ridgeregression, X=x_train, y=y_train, cv=5) all_accuracies } 部分是不必要的。我可以在 GridSearch 部分之后直接运行 Ridgeregression.fit(x_train,y_train) Ridgeregression.score(x_test,y_test) 这两个 raw。
    猜你喜欢
    • 2021-01-31
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多