gpt4 book ai didi

python - 有没有办法在 GridSearchCV 中获取所有计算的系数?

转载 作者:行者123 更新时间:2023-12-05 04:24:45 26 4
gpt4 key购买 nike

我正在尝试不同的 ML 模型,所有模型都使用包含转换器和算法的管道,“嵌套”在 GridSearchCV 中以找到最佳超参数。

当运行 Ridge、Lasso 和 ElasticNet 回归时,我想存储所有计算的系数,而不仅仅是 best_estimator_ 系数,以便根据 alpha 绘制它们> 的路径。换句话说,当 GridSearchCV 更改 alpha 参数并拟合新模型时,我想存储生成的系数,以根据 alpha 值绘制它们。

可以看看this一个漂亮的例子的官方 scikit 帖子。

这是我的代码:

from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_absolute_error, mean_squared_error
import time
start = time.time()

# Cross-validated - Ridge Regression
model_ridge = make_pipeline(transformer, Ridge()) # my transformer is already defined

alphas = np.logspace(-5, 5, num = 50)
params = {'ridge__alpha' : alphas}

grid = GridSearchCV(model_ridge, param_grid = params, cv=10)
grid.fit(X_train, y_train)
regressor = grid.estimator.named_steps['ridge'].coef_ # when I add this line, it returns an error

stop = time.time()
training_time = stop-start

y_pred = grid.predict(X_test)

Ridge_Regression_results = {'Algorithm' : 'Ridge Regression',
'R²' : grid.score(X_train, y_train),
'MAE' : mean_absolute_error(y_test, y_pred),
'RMSE' : np.sqrt(mean_squared_error(y_test, y_pred)),
'Training time (sec)' : training_time}

在本主题中:return coefficients from Pipeline object in sklearn , 建议作者使用管道的 named_steps 属性。但就我而言,当我尝试使用它时,它返回以下错误:

---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_18260/3310195105.py in <module>
13
14 grid.fit(X_train, y_train)
---> 15 regressor = grid.estimator.named_steps['ridge'].coef_
16
17

AttributeError: 'Ridge' object has no attribute 'coef_'

我不明白为什么会这样。

为了让它起作用,我猜想这种存储应该发生在 GridSearchCV 循环 期间,但我不知道该怎么做。

最佳答案

您可以通过将它们设为“分数”来获取系数,尽管这在语义上不是很正确。

import pandas as pd

def myscores(estimator, X, y):
r2 = estimator.score(X, y)
coefs = estimator.named_steps["ridge"].coef_
ret_dict = {
f'a_{i}': coef for i, coef in enumerate(coefs)
}
ret_dict['r2'] = r2
return ret_dict

grid = GridSearchCV(
model_ridge,
param_grid=params,
scoring=myscores,
refit='r2'
)

print(pd.DataFrame(grid.cv_results_)

关于python - 有没有办法在 GridSearchCV 中获取所有计算的系数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73444161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com