如何在 cv 中使用多个值运行 GridSearchCV
Posted
技术标签:
【中文标题】如何在 cv 中使用多个值运行 GridSearchCV【英文标题】:How to run GridSearchCV with multiple values in cv 【发布时间】:2021-11-21 20:04:02 【问题描述】:我正在对贷款预测数据使用逻辑回归。我正在使用 GridSearchCV 进行超参数调整,我一直在尝试找到一个可以为 cv 添加多个值的源。例如;我想以 3、5、6、7、10 折运行我的模型。这是我的代码:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
parameters = 'penalty': ['l1', 'l2'],
'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000],
'solver' : ['liblinear', 'newton-cg', 'lbfgs', 'saga', 'sag'],
'multi_class' : ['auto'],
'max_iter' : [5,15,25],
s_scaled_X_train = s_scaler.fit_transform(X_train)
s_scaled_X_test = s_scaler.transform(X_test)
logmodel = GridSearchCV(LogisticRegression(), parameters, cv = 10, refit = True)
我试图寻找可以找到解决方案的来源,了解如何在此处的 cv 值中添加更多数字。
logmodel = GridSearchCV(LogisticRegression(), parameters, cv = 10, refit = True)
我尝试了类似的方法:
bb = [3, 5, 6, 7, 10]
cv_folds = bb
我尝试将其添加到日志模型中。
logmodel = GridSearchCV(LogisticRegression(), parameters, cv = cv_folds, refit = True)
这是我运行时遇到的错误
TypeError: cannot unpack non-iterable int object
【问题讨论】:
【参考方案1】:我认为 Grid Search CV 中没有任何内置方式来调整 cv
的数量,但您可以使用 for-loop
来检查哪个 cv
更好,如下所示:
import warnings
warnings.filterwarnings("ignore")
cv_folds = [3, 5, 6, 7, 10]
for x in cv_folds:
logmodel = GridSearchCV(LogisticRegression(random_state = 12), parameters, cv = x, refit = True)
logmodel.fit(X_train, y_train)
print('The best score with CV =', x, 'is', logmodel.score(X_test, y_test), 'with parameters =\n\n', logmodel.best_params_, '\n\n')
它将返回如下输出:
The best score with CV = 3 is 0.9824561403508771 with parameters =
'C': 100, 'max_iter': 15, 'multi_class': 'auto', 'penalty': 'l1', 'solver': 'liblinear'
The best score with CV = 5 is 0.9824561403508771 with parameters =
'C': 100, 'max_iter': 15, 'multi_class': 'auto', 'penalty': 'l1', 'solver': 'liblinear'
The best score with CV = 6 is 0.9883040935672515 with parameters =
'C': 1000, 'max_iter': 15, 'multi_class': 'auto', 'penalty': 'l1', 'solver': 'liblinear'
The best score with CV = 7 is 0.9941520467836257 with parameters =
'C': 100, 'max_iter': 25, 'multi_class': 'auto', 'penalty': 'l1', 'solver': 'liblinear'
The best score with CV = 10 is 0.9883040935672515 with parameters =
'C': 1000, 'max_iter': 15, 'multi_class': 'auto', 'penalty': 'l1', 'solver': 'liblinear'
我们可以看到 CV = 7 给出了非常好的结果。
【讨论】:
以上是关于如何在 cv 中使用多个值运行 GridSearchCV的主要内容,如果未能解决你的问题,请参考以下文章
Emgu CV 人脸识别:在多个文件上并行运行 DetectHaarCascade 问题
如何在打开的 cv 中使用向量将一些浮点值存储在 for 循环中
如何正确地将 cv::Mat 转换为具有完美匹配值的 torch::Tensor?
Logistic回归的多个问题(1.所有CV值具有相同的分数,2.分类报告和准确性不匹配)
如何将多个(超过 4 个)`CV::Mat` 图像`Size(M, N), CV_8UC1` 加入到一个 RGBA 图像中?