线性回归中的交叉验证

时间:2018-03-27 21:45:49

标签: python scikit-learn cross-validation

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

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

据我了解,cross_val_score用于根据交叉验证获得分数。并且,可以使用Lasso()进行调整以实现正则化的交叉验证分数(例如:here)。

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

现在,我的问题是:

  • 哪一种更好(cross_val_score LassoLassoCV)。
  • 对Linear执行交叉验证的正确方法是什么 回归(或其他算法,比如Logistic,NN等)

感谢。

2 个答案:

答案 0 :(得分:2)

为了让您更加困惑 - 请考虑使用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)))

答案 1 :(得分:0)

@PankajK,

在评论中回答您的问题-

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

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