交叉验证
在sklearn中将训练/测试数据集分离
from sklearn import datasets
iris = datasets.load_iris()
features = iris.data
labels = iris.target
from sklearn.model_selection import train_test_split
features_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 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)
上一篇: Python 数据结构之堆栈实例代码
下一篇: php进行文件操作的实例详解