【问题标题】:is it possible to set the splitting strategy for GridSearchCv?是否可以为 GridSearchCv 设置拆分策略?
【发布时间】:2022-01-13 13:27:23
【问题描述】:
我正在通过 GridSearchCv 优化模型的超参数。而且由于我正在处理的数据非常不平衡,我需要“选择”算法拆分训练集/测试集的方式,以确保代表性不足的点在两个集中。
通过阅读 scikit-learn 的文档,我知道可以为 GridSearch 设置拆分策略,但我不确定如何或是否是这种情况。
如果有人能帮我解决这个问题,我将不胜感激。
【问题讨论】:
标签:
scikit-learn
hyperparameters
gridsearchcv
【解决方案1】:
是的,将GridSearchCV 作为cv 传递给StratifiedKFold 对象。
from sklearn.model_selection import StratifiedKFold
from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
iris = datasets.load_iris()
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svc = svm.SVC()
skf = StratifiedKFold(n_splits=5)
clf = GridSearchCV(svc, parameters, cv = skf)
clf.fit(iris.data, iris.target)
【解决方案2】:
默认情况下,如果您使用 GridSearchCV 训练分类模型,则拆分数据集的默认方法是 StratifiedKFold,它负责根据目标变量平衡数据集。
如果您的数据集由于某些其他原因(不是目标变量)不平衡,您可以选择其他标准来执行拆分。仔细阅读GridSearchCV的文档,选择合适的CV splitter。
在model selection 的 scikit-learn 文档中,您可以使用许多拆分器类。或者您可以根据您的标准定义自己的拆分器类,但这会更困难。