如图所示,k-folder交叉验证就是用全部数据划分为k个子集,然后取一个子集作为测试集,剩下k-1个子集作为训练集。最后把这k次测试的精确度取一个平均值。
但我们要注意的是k折交叉验证算法内部划分之前不会进行乱序排序,因此如果如果你的数据本身是有顺序的,可能进行泾渭分明的划分,这对于训练和测试的效果都不好
注: 此主题内容引用自优达学城
GridSearchCV 用于系统地遍历多种参数组合,通过交叉验证确定最佳效果参数。它的好处是,只需增加几行代码,就能遍历多种组合。
from sklearn.model_selection import GridSearchCV parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]} svr = svm.SVC() clf = GridSearchCV(svr, parameters) clf.fit(iris.data, iris.target)让我们逐行进行说明。
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}参数字典以及他们可取的值。在这种情况下,他们在尝试找到 kernel(可能的选择为 ‘linear’ 和 ‘rbf’ )和 C(可能的选择为1和10)的最佳组合。
这时,会自动生成一个不同(kernel、C)参数值组成的“网格”:
标题一标题二(‘rbf’, 1)(‘rbf’, 10)(‘linear’, 1)(‘linear’, 10)各组合均用于训练 SVM,并使用交叉验证对表现进行评估。
svr = svm.SVC()这与创建分类器有点类似,就如我们从第一节课一直在做的一样。但是请注意,“clf” 到下一行才会生成—这儿仅仅是在说采用哪种算法。另一种思考方法是,“分类器”在这种情况下不仅仅是一个算法,而是算法加参数值。请注意,这里不需对 kernel 或 C 做各种尝试;下一行才处理这个问题。
clf = grid_search.GridSearchCV(svr, parameters)这是第一个不可思议之处,分类器创建好了。 我们传达算法 (svr) 和参数 (parameters) 字典来尝试,它生成一个网格的参数组合进行尝试。
clf.fit(iris.data, iris.target)第二个不可思议之处。 拟合函数现在尝试了所有的参数组合,并返回一个合适的分类器,自动调整至最佳参数组合。现在您便可通过 clf.best_params_ 来获得参数值。
实际举例如下:
param_grid = { 'C': [1e3, 5e3, 1e4, 5e4, 1e5], 'gamma': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.1], } # for sklearn version 0.16 or prior, the class_weight parameter value is 'auto' clf = GridSearchCV(SVC(kernel='rbf', class_weight='balanced'), param_grid) clf = clf.fit(X_train_pca, y_train)