交叉验证

来源:互联网 发布:网络机柜检验报告 编辑:程序博客网 时间:2024/06/05 09:00

在sklearn中将训练/测试数据集分离

from sklearn import datasetsiris = datasets.load_iris()features = iris.datalabels = iris.targetfrom sklearn.model_selection import train_test_splitfeatures_train, features_test, labels_train, labels_test = train_test_split(            iris.data, iris.target, test_size=0.4, random_state=0)# 设置 random_state 参数为 42(random_state 控制哪些点进入训练集,哪些点用于测试;# 将其设置为 42 意味着我们确切地知道哪些事件在哪个集中; 并且可以检查你得到的结果)

数据处理转换并用于机器学习的流程

这里写图片描述

交叉验证(cross validation)

这里写图片描述

如图所示,k-folder交叉验证就是用全部数据划分为k个子集,然后取一个子集作为测试集,剩下k-1个子集作为训练集。最后把这k次测试的精确度取一个平均值。

k折交叉验证编码

from sklearn.cross_validation import KFold# KFold接受两个参数,一个是数据总集中项目数量,另一个是参数是想查看多少折# KFold提供两个列表,kf = KFold(len(authors), 2)#第一个列表是要在训练集中使用的所有数据点索引值的集合#第二个列表是要在测试集中使用的所有数据点索引值的集合# 然后我们可以根据这些索引引入特征和标签,并将特征和标签进行分配for train_indices, test_indices in kf:    feature_train = [word_data[ii] for ii in train_indices]    feature_test = [word_data[ii] for ii in test_indices]    authors_train = [authors[ii] for ii in train_indices]    authors_test = [authors[ii] for ii in test_indices]

但我们要注意的是k折交叉验证算法内部划分之前不会进行乱序排序,因此如果如果你的数据本身是有顺序的,可能进行泾渭分明的划分,这对于训练和测试的效果都不好

sklearn中的GridSearchCV

注: 此主题内容引用自优达学城

GridSearchCV 用于系统地遍历多种参数组合,通过交叉验证确定最佳效果参数。它的好处是,只需增加几行代码,就能遍历多种组合。

from sklearn.model_selection import GridSearchCVparameters = {'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)
原创粉丝点击