Week6 机器学习的应用技巧
1.机器学习的应用
如果学习后的模型在测试集上有很大的误差,该怎么办?
1).收集更多的数据作为数据集;(处理过拟合)
2).简化问题的数学模型,即减少样本的特征;(处理过拟合)
3).分析问题的本质,使用其他更符合问题本质的特征;
4).增加更多复杂的多项式特征,如
x
1
2
,
x
2
2
,
x
1
x
2
x_1^2,x_2^2,x_1 x_2
x12,x22,x1x2等等;(处理欠拟合)
5).调整正则项λ的超参数。
上述步骤并不是随便选择的,而是要具体情况具体分析的。随便采取措施,很可能导致浪费大量时间(比如无谓地搜集更多数据等)。
2.机器学习诊断法
机器学习的诊断:当模型效果不好时,诊断模型到底问题出在哪里。
2.1 评估数学模型
1).将已有数据划分为训练集(Training set)、验证集(Validation set)和测试集(Test set)两部分,比例自定;
训练集:用于优化模型中的参数向量θ;
验证集:用于在训练过程中进行测试,从而选择出能得到最好的效果的模型以及其超参数;
测试集:在训练和验证完毕后,作为标签未知的数据,检验训练好的模型是否真正有效。只做检验作用,不能用于优化参数或超参数等。
2).利用训练集按原有模型使用并学习得到参数向量θ,并利用验证集进行验证,并根据验证集的情况选择模型中存在的超参数,使模型能在验证集的测试上得到最好的结果。学习过程会得到训练集的损失值和验证集的损失值;
3).然后分析训练集误差和验证集误差,可以得出一定结果:
i.如果训练集误差很小,而测试集误差很大,那么原数学模型很可能过拟合了。此时模型相当于是方差(Variance)很大,但偏差(Bias)很小。以射击打靶为例,假设靶中心是我们想要得到的模型效果。方差很大说明我们射击100次,可能平均起来距离靶中心差不多,但是点位分散的范围很大,虽然包含了我们想要的目标范围,但是也包含了很多我们不需要的范围;
ii.如果训练集误差就很大,而测试集误差通常也很大(运气好可能比较小),那么原数学模型很可能欠拟合了。此时模型相当于是方差很大,但偏差很小。此时模型相当于是方差很大,但偏差很小。还是以打靶为例,偏差很大说明我们射击100次,可能每次之间偏移的距离都不多,即所有射击点包含的范围并不大,但是所有射击点平均起来却距离靶心很远,导致了其实我们的射击覆盖范围根本没有包含目标范围,所以效果也不好。
4).将得到的参数向量θ用于预测测试集,并计算测试集上模型目前的损失值。如果最终测试集的误差还是比较大,那很可能就需要考虑重头开始,说明上述所有模型对解决该问题的效果均不理想。但前提一定要保证测试集的数据是完全属于问题所涵盖的范围内。
2.2 学习曲线(Learning Curves)
绘出学习曲线,可以观察模型的学习过程。学习曲线的横坐标是样本的数量,纵坐标是训练过程中的训练集损失和验证集损失。
在训练前,可以将训练集分成一定数量的小批;在训练一批后,计算该批数据的训练误差,并用当前的参数进行验证集的测试,得到验证误差,然后可以得到这批数据学习曲线上的训练误差和验证误差的两个点;继续进行下一批数据的训练,同样会得到两个点;反复循环,最后就可以画出整个训练过程中的学习曲线。
欠拟合时,学习曲线的训练误差和测试误差通常都会归于某个较高值,如下图:
过拟合时,学习曲线的训练误差会归于一个较小值,而测试误差则会归于一个较大值,如下图。
3.实战技巧
3.1垃圾邮件分类器
案例,参照视频,可以学习整个思路和处理过程。
3.2 推荐的技巧
(以上图片来自吴恩达教程)
用更直观的数值来说明模型解决问题的效果,而不只是看损失值。比如分类问题,可以使用最终分类的准确率来判断模型效果。
3.3 常见的判别模型指标
注意数据集的不均衡性
假设垃圾邮件分类问题,数据集中有100个样本,其中99个正例,1个负例。那么,只要构建一个无论什么邮件都判断为正例的模型,那么在训练集上就可以达到99%的准确率。这明显是不科学的。这种问题就是数据集的不均衡性(skewed data)。因此,这个问题就非常影响在3.2节中选择的“直观数值表示模型解决问题的效果”。因为如果你的判断标准被改为准确率,就会出现上述问题;如果换一个指标,或许可以避免上述问题。
常见的指标如下:
1).F Score
正
确
率
:
a
c
c
u
r
a
c
y
=
T
P
+
T
N
T
P
+
T
N
+
F
N
+
F
P
正确率:accuracy=\frac{TP+TN}{TP+TN+FN+FP}
正确率:accuracy=TP+TN+FN+FPTP+TN
查
准
率
:
p
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
查准率:precision=\frac{TP}{TP+FP}
查准率:precision=TP+FPTP
查
全
率
:
r
e
c
a
l
l
=
T
P
T
P
+
F
N
查全率:recall=\frac{TP}{TP+FN}
查全率:recall=TP+FNTP
查准率是说明,模型在判断一个样本是正例时,这个判断的可靠程度有多大;
查全率是说明,模型在判断样本是正例时,这个模型不会遗漏正例的程度有多大;
查准率和查全率是相互矛盾的,因此在模型选择中,如果想要提高其中一项,就会使另一项降低,所以要根据具体问题具体分析,到底是哪个指标更合适。
如果在判断一个模型时,查全率和查准率都需要考虑,那么怎么根据这两个指标同时判断一个模型的好坏呢?这时候通常使用的是
F
1
F_1
F1 Score指标或
F
F
F Score指标。
F
1
S
c
o
r
e
:
F
1
=
2
⋅
p
r
e
c
i
s
i
o
n
⋅
r
e
c
a
l
l
p
r
e
c
i
s
i
o
n
+
r
e
c
a
l
l
F_1 Score:F_1=\frac{2·precision·recall}{precision+recall}
F1Score:F1=precision+recall2⋅precision⋅recall
F
S
c
o
r
e
:
F
β
=
(
1
+
β
2
)
p
r
e
c
i
s
i
o
n
⋅
r
e
c
a
l
l
β
2
p
r
e
c
i
s
i
o
n
+
r
e
c
a
l
l
F Score:F_β=\frac{(1+β^2)precision·recall}{β^2 precision+recall}
FScore:Fβ=β2precision+recall(1+β2)precision⋅recall
β越大,判断指标越偏向于recall;越小,越偏向于precision。
注意,不能使用查全率和查准率的平均值作为判断指标,因为模型可以简单地将所有样本判断为正例,这样查全率就一定是100%,平均值就至少有50%,这是不科学的。
2).AUC(Area Under Curve)
(以上图片来自邹博机器学习课程)
T
P
R
=
T
P
T
P
+
F
N
;
F
P
R
=
F
P
F
P
+
T
N
TPR=\frac{TP}{TP+FN};FPR=\frac{FP}{FP+TN}
TPR=TP+FNTP;FPR=FP+TNFP
右上角的曲线叫ROC曲线,曲线下方的面积(AUC, Area Under Curve)就是度量分类器好坏的工具。取阈值的时候,就要取对角线的交点(equal error rate)作为阈值。
3.4 数据越多越好吗?
01年数学家做了实验,使用四个不同的模型,研究模型与样本数据集大小对于算法最终效果的影响。从下图可以看出,数据集越大,算法效果越好。
但事实真的如此吗?想象一下房价预测问题,如果只告诉你房屋面积,其他任何信息都没有,即使是过目不忘看过无数房产的专家,也无法准确预测这套房屋的价格。机器学习也是如此。
只有在建模的样本特征提取足够准确、足够多的情况下,那么无论模型如何,通常数据集越大,模型效果就越好。
所以,以我自己的认识总结一下:
1).影响机器学习的效果的本质是,对问题本身的理解,包括问题的特征提取和数学模型的构建;只要这一步能做好,机器学习就能够得到不错的效果,即使你使用的算法不是很强大;也就是说,对问题本身的理解,决定了机器学习效果的上限。
2).在上述本质因素能保证的情况下,数据集的大小可以影响机器学习的效果。也就是说,数据集的规模,能影响机器学习算法的效果最终是否可以达到其上限,但是无法提高算法本身的上限。
3).算法本身对机器学习效果的上限有影响,主要体现在不同的问题可能需要使用不同的算法更能够提取问题本身的特征。也就是决定机器学习效果上限的算法是那一类特征提取的算法。在使用的特征相同的情况下,算法就只影响机器学习的效率了。所谓效率,就是指要达到同样的效果,某种算法所需要使用的数据量大小;或者说是使用同样的数据集,算法的效果如何。所以,现实中数据集的数量通常无法无限增加(由于成本等因素),优秀的算法可以大大节约机器学习所需要的数据量。
4).总结来说,机器学习的重点在于对问题本身的理解和建模,在利用机器学习时,首先要思考,我们所拥有的数据集和所选择的样本特征,如果给相关领域的专家来研究,他们能否解决问题。如果能,那么机器学习或许可以帮助你免去“专家们所做的专项研究”这个步骤;如果不能,那么就需要考虑完善数据集和特征选取等方面,否则机器学习很可能也无法达到期望的效果。