【问题标题】:Cross Validation in linear regression线性回归中的交叉验证
【发布时间】:2018-09-06 10:55:41
【问题描述】:

我正在尝试在线性回归中执行交叉验证,为此我正在使用 python sklearn 库。我有一个关于对给定数据集执行交叉验证的适当方式的问题。

让我有点困惑的两个 API 是 cross_val_score() 和任何正则化交叉验证算法,例如 LassoCV()

据我了解,cross_val_score 用于根据交叉验证获得分数。并且,它可以与Lasso() 结合以实现正则化交叉验证分数(例如:here)。

相比之下,LassoCV(),正如it's documentation 所建议的那样,针对给定的调整参数范围(alpha 或 lambda)执行Lasso

现在,我的问题是:

  • 哪种方法更好(cross_val_scoreLasso 或只是 LassoCV)。
  • 什么是执行线性交叉验证的正确方法 回归(或其他算法,例如 Logistic、NN 等)

谢谢。

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案1】:

    为了让您更加困惑 - 考虑使用 GridSearchCV,它将进行交叉验证并调整超参数。

    演示:

    import numpy as np
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import Lasso, Ridge, SGDRegressor
    from sklearn.model_selection import GridSearchCV
    from sklearn.pipeline import Pipeline, FeatureUnion
    
    X_train, X_test, y_train, y_test = \
            train_test_split(X, y, test_size = 0.33)
    
    pipe = Pipeline([
        ('scale', StandardScaler()),
        ('regr', Lasso())
    ])
    
    param_grid = [
        {
            'regr': [Lasso(), Ridge()],
            'regr__alpha': np.logspace(-4, 1, 6),
        },
        {
            'regr': [SGDRegressor()],
            'regr__alpha': np.logspace(-5, 0, 6),
            'regr__max_iter': [500, 1000],
        },
    ]
    
    grid = GridSearchCV(pipe, param_grid=param_grid, cv=3, n_jobs=-1, verbose=2)
    grid.fit(X_train, y_train)
    
    predicted = grid.predict(X_test, y_test)
    
    print('Score:\t{}'.format(grid.score(X_test, y_test)))
    

    【讨论】:

    • 谢谢@MaxU!我知道我们可以将GridSearchCVLassoRidge 一起使用,而不是cross_val_score。那么,我很好奇,有哪些场景/用例,LassoCVRidgeCV 可以派上用场?
    【解决方案2】:

    @PankajK,

    在评论中回答您的问题-

    当您希望模型消除最不重要的特征时,您可能会发现 Lasso 回归很有用,而 Ridge 不仅专注于拟合数据,而且还使模型权重尽可能小。

    您可能想查看 - https://www.oreilly.com/library/view/hands-on-machine-learning/9781491962282/ch04.html

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 2021-01-25
      • 1970-01-01
      • 2017-05-18
      • 2016-09-30
      • 2016-06-27
      • 2020-04-06
      • 2017-11-12
      • 2021-06-06
      相关资源
      最近更新 更多