模型评估方法
网格搜索 调参
在训练集上训练模型,根据验证集上的结果调参。调好参数后,在测试集上得到测试误差。
- 将数据集分为训练集,验证集,测试集
- 将参数网格化,每一个交叉点都是一组参数
- 遍历每个网格参数,在训练集上训练模型,在验证集上得到与网格参数对应的验证误差
- 挑选最小的验证误差所对应的那个网格参数,作为最优的参数
- 用最优参数设置模型,在训练集$\bigcup$验证集上训练,得到测试误差,在测试集上得到测试误差。
因为模型参数的选择是依赖于验证集,而模型对于测试集是没有依赖的,所以在测试上的准确率一般来说会比验证集低一些。
交叉验证 估计期望泛化误差
用交叉验证的目的是为了得到可靠稳定的模型。如果已经调好参了,且得到的估计的期望泛化误差比较大,那么说明模型不太适用,就可以考虑做一些特征变化或换模型了。
在非测试集上交叉验证,用MSE估计期望泛化误差,在测试集上得到测试误差
- 将数据集分为非测试集和测试集
- 在将非测试集分为k份,其中k-1份作为训练集,另一份作为验证集
- 在训练集上训练模型,得到一个训练误差,在验证集上测试,得到一个验证误差。
- 共训练了k个模型,得到k个训练误差和k个验证误差。用k个验证误差的平均来估计期望泛化误差。
- 在非测试集上训练模型,得到训练误差,在测试集上测试模型,得到测试误差。
为了减小因样本划分不同而引起的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的平均。所以说,一共会训练pk个模型,并得到pk个验证误差。
如果只是为了估计模型的期望泛化误差,可以去掉验证集,并以测试集代替。
网格搜索+交叉验证
比网格搜索更稳定些,因为评价的标准不再是单个的验证误差,而是k个验证误差的平均。
在非测试集上网格搜索并交叉验证,用MSE估计期望泛化误差,调参。调好参数后,在测试集上得到测试误差。
- 将数据集分为非测试集,测试集
- 将非测试集分为k份,其中k-1份作为训练集,另一份作为验证集
- 将参数网格化,每个交叉点都是一组参数
- 遍历每个网格参数,进行k交叉验证,共得到k个模型,k个训练误差,k个验证误差。用k个验证误差的平均来估计期望泛化误差,作为参数选择的评判标准。
- 选择估计期望泛化误差最小所对应的一个网格参数,作为最优参数
- 用最优参数设置模型,在非测试集上训练,得到训练误差,在测试集上得到测试误差
小结
- 对于给定的模型,确定了网络结构,确定了损失函数,确定了核的选择,
那么便确定了唯一的训练误差和测试误差,最优参数值的选择会根据网格搜索在验证集上确定。 - 如果模型的所有参数都确定了,那么就可以只用训练集和测试集了。
- 网格搜索是在验证集是调参用的。
- 交叉验证只是用于估计期望泛化误差。可以有验证集,也可以不用验证集。如果同时要得到训练的模型,训练误差,测试误差,那么就需要有验证集。
- 交叉验证可以使网格搜索的参数评判更准确。
- 如果不需要调参,那么就没必要有验证集了。
P-R曲线 ROC曲线
先列,后行
真实 \ 预测 | 正例 | 反例 |
---|---|---|
正例 | TP | FN |
反例 | FP | TN |
P-R
p 计算列1 显示列
r 计算行1 显示行
$P=\frac{TP}{TP+FP}$
$R=\frac{TP}{TP+FN}$
ROC
tpr 计算行1 显示列
fpr 计算行2 显示行
$TPR=\frac{TP}{TP+FN}$
$FPR=\frac{FP}{FP+TN}$
$R=TPR$
正则
正则就是在训练数据的模型上加一个惩罚项,shrink模型的参数。
lasso的解是稀疏的,如sparse coding, compressed sensing
构造目标函数
用X来构造分布,用Y来确定分布的具体值。
- 构造概率函数。给定x,初始超参数,构造出一个概率函数。但此概率函数的变量是y,不是x。
- 构造似然函数。根据真实y,得到p(y|x)概率,连乘得到似然函数
- 优化的参数,其实是构造分布时的超参数。
不平衡类
- 对多的类进行欠采样
- 对少的类进行过采样
- 移动阈值$\frac{y}{1-y}>\frac{m^+}{m^-}$即为正类
- 少类的插值(kmeans聚类,然后在一个簇里面插值)
生成模型 判别模型
生成模型
学习的是联合分布p(y,x)
- 可以由联合分布p(y,x)在y上积分得到p(x),即类条件概率p(x|y)与p(y)在y上的积分,如果p(x)的概率比较小,说明可能是异常点(outlier),该点的分类效果可能不好。对p(x,y)在y上的积分有时比较难求,需要用MCMC抽样方法得到p(x)或变分近似p(x)。
- 根据贝叶斯公式,p(y,x) / p(x)得到条件分布p(y|x),即得到预测的条件分布。
- 当样本量较多时,生成模型能更快地收敛于真实模型。
- 可以解决存在隐变量的模型,比如GMM,HMM。
- 需要更大的样本,做判别的时候,有些信息用不到。
判别模型
学习的是条件分布p(y|x),或判别函数f(x)
- 需要的样本量少于生成模型
- 寻找的是不同类别的最优分类面
- 准确率一般比生成模型高
- 可以对原数据X进行特征的变化,例如降维,特征选择
Reference
http://blog.csdn.net/zouxy09/article/details/8195017