1. 数据集分类
数据集分为训练集(training set),交叉验证集(cross validation set),测试集(test set)。比例为60:20:20。
使用训练集对模型进行训练,得到使训练集误差Jtrain(θ)J_{train}(\theta)Jtrain(θ)最小的一系列参数θ\thetaθ,然后代入验证集,得到使验证集误差Jcv(θ)J_{cv}(\theta)Jcv(θ)最小的模型,最后代入测试集,得到该模型的误差Jtest(θ)J_{test}(\theta)Jtest(θ)。为什么不直接使用Jcv(θ)J_{cv}(\theta)Jcv(θ)作为该模型的误差?使用Jtest(θ)J_{test}(\theta)Jtest(θ)具有公平性,而使用Jcv(θ)J_{cv}(\theta)Jcv(θ)得到的肯定是该模型这组数据的最小值,不具有普遍意义。
2. 模型选择
2.1. 选择合适的二项式次数
在进行特征选择的时候,需要选择特征值的多少次幂。将特征值的不同次幂作为不同的模型,如:
model 1: θ0+θ1x\theta_0+\theta_1xθ0+θ1x
model 2: θ0+θ1x+θ2x2\theta_0+\theta_1x+\theta_2x^2θ0+θ1x+θ2x2
model 3: θ0+θ1x+θ2x2+θ3x3\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3θ0+θ1x+θ2x2+θ3x3
…
model n: θ0+θ1x+θ2x2+...+θnxn\theta_0+\theta_1x+\theta_2x^2+...+\theta_nx^nθ0+θ1x+θ2x2+...+θnxn
将这些模型利用训练集,验证集得到每个模型的误差Jcv(θ)J_{cv}(\theta)Jcv(θ)。其误差曲线如下:
可以得到:
- 当Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)≈Jcv(θ)J_{train}(\theta)\approx J_{cv}(\theta)Jtrain(θ)≈Jcv(θ)时,此时处于高偏差,欠拟合的状态。
- 当Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)J_{train}(\theta)Jtrain(θ)很小时,此时处于高方差,过拟合的状态。
2.2. 选择合适的正则化参数λ\lambdaλ
J(θ)=12m∑i=1i=m(hθ(x(i))−y(i))2+λ2m∑i=1i=mθi2
J(\theta)=\frac{1}{2m}\sum_{i=1}^{i=m}(h_{\theta}(x^{(i)})-y^{(i)})^2+\frac{\lambda}{2m}\sum_{i=1}^{i=m}\theta_i^2
J(θ)=2m1i=1∑i=m(hθ(x(i))−y(i))2+2mλi=1∑i=mθi2
将λ=0,0.01,0.02,0.04,0.08,...,10.24\lambda=0,0.01,0.02,0.04,0.08,...,10.24λ=0,0.01,0.02,0.04,0.08,...,10.24作为不同模型的参数,得到通过训练集验证集得到的误差Jcv(θ)J_{cv}(\theta)Jcv(θ)。其误差曲线如下:
可以得到:
- 当Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)≈Jcv(θ)J_{train}(\theta)\approx J_{cv}(\theta)Jtrain(θ)≈Jcv(θ)时,此时处于高偏差,欠拟合的状态。
- 当Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)J_{train}(\theta)Jtrain(θ)很小时,此时处于高方差,过拟合的状态。
2.3. 修正欠拟合和过拟合
欠拟合(高偏差)状态:
- 增加特征变量
- 增加特征值的多次幂特征
- 减小正则化参数λ\lambdaλ的值
过拟合(高方差)状态:
- 获取更多训练样本
- 减少特征变量
- 增大正则化参数λ\lambdaλ的值
3. 学习曲线
随着训练样本量的增加,误差曲线如下:
可以得到:
- 随着m增大,当Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jtrain(θ)≈Jcv(θ)J_{train}(\theta)\approx J_{cv}(\theta)Jtrain(θ)≈Jcv(θ)时,此时处于高偏差,欠拟合的状态。
- 随着m增大,当Jcv(θ)J_{cv}(\theta)Jcv(θ)很大,Jcv(θ)J_{cv}(\theta)Jcv(θ)与Jtrain(θ)J_{train}(\theta)Jtrain(θ)相差很大时,此时处于高方差,过拟合的状态。可以从图中看出,随着m的增大,Jcv(θ)J_{cv}(\theta)Jcv(θ)与Jtrain(θ)J_{train}(\theta)Jtrain(θ)相差会越来越小,所以增加样本数量可有效的解决过拟合问题。
4. 误差分析
模型训练完毕后,通过测试数据集可以得到该模型下,测试数据的误差率。但是单单通过误差率不能有效的评估该模型。比如:偏斜类。
偏斜类:正样本数量远远大于负样本的数量,这样机器学习而来的模型起误差率可能大于全部预测为正的误差率,但这样的预测并不是一个机器学习算法。所以引入查准率和召回率。
TP(True Positive):实际为正(positive),预测正确(true)的数量。
FP(False Positive):实际为正(positive),预测错误(false)的数量。
FN(False Negative):实际为负(negative),预测错误(false)的数量。
TN(True Negative):实际为负(negative),预测正确(true)的数量。
查准率:所有预测为正的样本中实际为正的样本所占的比例。
Precision=TPTP+FP
Precision = \frac{TP}{TP+FP}
Precision=TP+FPTP
召回率:所有实际为正的样本中预测为正的样本所占的比例。
Recall=TPTP+FN
Recall = \frac{TP}{TP+FN}
Recall=TP+FNTP
在logisticlogisticlogistic回归中,增大阈值,则Precision增大,Recall减小;减小阈值,则Precision减小,Recall增大。
利用F1F_1F1值评估算法性能,F1F_1F1最大,算法性能越好。
F1=2Precision∗RecallPrecision+Recall
F_1=2\frac{Precision\ast Recall}{Precision+Recall}
F1=2Precision+RecallPrecision∗Recall
5. 机器学习系统设计
- 使用最简单的算法,尽可能块得得出一个不完美的结果。
- 利用cv集,画出学习曲线,找到高偏差或者高防叉问题,进行模型完善。
- 利用test集进行误差分析,手动检查被误分类的样本,进行特征分析,完善样本。