数据集划分方法
K折交叉验证法
- 将全部训练集S分成k个不相交的子集,假设S中的训练样例子数为m,那么每一个子集有m/k个训练样例,相应子集称作{s1,s2……sk}
- 每次从分好的子集里面,拿一个作为测试集,其他k-1作为训练集
- 在k-1个训练集中训练出学习器模型
- 把这个模型放到测试集上,得到分类率
- 计算k次求得的分类率的平均值,作为改模型或者假设函数的真实分类率
- 这个方法充分利用了所有样本,但计算比较繁琐,需要训练k次,测试k次
留一法
假设有N个样本,将每一个样本作为测试样本,其它N-1个样本作为训练样本,这样得到N个分类器,N个测试结果。用这N个结果的平均值来测量模型的性能
如果LOD与K-fold—CV比较,LOD在N个样本上建立N个模型而不是k个,更进一步,N个模型的每一个都是在N-1个样本上训练的,而不是(k-1)n/k。两种方法中,假定k不是很大,且k<<N.LOD比k-fold-cv更加耗时
留p法验证
有N个样本,将每p个样本作为测试样本,其它N-p个样本作为训练样本,这样得到(n p)个分类器,不像其他p>1,会发生数据重叠。
随机划分法
Shuffle Split迭代器 产生指定数量 独立的train/test数据集划分。首先对样本全体随机打乱,然后再划分train/test对
可以使得随机种子random_test来控制随机数序列产生器是的运算结果可重现
Shuffle Split是Kfold交叉验证的比较好的替代,它允许更好的控制迭代次数和train/test样本比例
StratifiedShuffle Split 是Shuffle Split的一个变体,返回分层划分,也就是在创建划分的时候要保证每个划分中类的样本比例与整体数据集中的原始比例保持一致
超参数优化方法
学习器模型中一般有两个参数:一类参数可以从数据中学习可以估计得到,还有一类参数无法从数据中估计,只能靠人的经验进行设计指定。后一类参数叫超参数
比如:支持向量机中C Kernel gama 朴素贝叶斯里的alpha等
在学习器模型设计中,我们要搜索超参数空间的学习器模型找到最合理的超参数
通过此方法获得学习器模型参数列表和当前取值:
estimator.get_params().
有些学习器模型有自己的独特的参数优化方法
SKLEARN提供两种参数优化方法:网络搜索与随机采样
网格搜索交叉验证:以穷举方式遍历所有可能的参数组合
随机采样交叉验证:依据某种分布对参数空间采样,随机得到一些参数组合方案
网格式搜索超参数优化方法
随机采样式超参数优化方法
超参数空间搜索技巧
技巧一:指定一个合适的目标测度对模型进行评估
默认情况下,参数搜索使用estimator的score函数来评估模型在某种参数配置下的性能
分类器对应于:sklearn.metrics.accuracy_score
回归器对应于sklearn.metrics.r2_score
但是在某些应用中,其他评分函数或许更加的合适。(比如,在非平衡的分类问题中,准确率accuracy_score通常不管用。这时我们可以通过参数scoring来指定GridSearchCV类或者RandomizedSearchCV类内部我们自己定义评分函数
技巧二:
使用sklearn的PipLine将estimator和他们的参数空间组合起来
技巧三:
合理划分数据集,开发集(用于GridSearchCV)+测试集(Test)使用model_selection.train_test_split()
技巧四:
并行化(GridSearchCV)和(RandomizedSearchCV)在参数点的计算上可以做到并行运算,用n_jobs来指定
技巧五:
提高到某些参数节点发生错误的鲁棒性:再出错节点提示警告,设置参数error_score=0搞定
模型验证方法
1.交叉验证计算得分
2.每个输入数据点交叉验证估计
3计算并绘制模型的学习率曲线
学习率曲线:
计算指定的学习器模型在不同大小的训练集上经过交叉验证的训练得分和测试得分
首先,用一个交叉验证生成器划分整体数据集k次,每一次划分都有一个训练集和测试集,然后从第k次的训练集中拿出若干个数量不断增加的子集,在这些子训练集上训练模型,然后再计算模型在对应的子训练集和测试集上的得分。最后,对于每种子训练集大小下,将k次训练得分和测试集得分分别进行平均
sklearn模型预测性能的评估方法
estimator对象的score方法
交叉验证中使用scoring参数