我正在尝试在线性回归中执行交叉验证,我正在使用python sklearn库。关于为给定数据集执行交叉验证的适当方法,我有一个问题。
让我感到困惑的两个API是cross_val_score()
和任何正则化的交叉验证算法,例如LassoCV()
。
据我了解,cross_val_score
用于根据交叉验证获得分数。并且,可以使用Lasso()
进行调整以实现正则化的交叉验证分数(例如:here)。
相比之下,LassoCV()
,如it's documentation所示,对给定范围的调整参数(alpha或lambda)执行Lasso
。
现在,我的问题是:
cross_val_score
Lasso
或LassoCV
)。 感谢。
答案 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