1. 数据集分类
数据集分为训练集(training set),交叉验证集(cross validation set),测试集(test set)。比例为60:20:20。
使用训练集对模型进行训练,得到使训练集误差
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)最小的一系列参数
θ
\theta
θ,然后代入验证集,得到使验证集误差
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)最小的模型,最后代入测试集,得到该模型的误差
J
t
e
s
t
(
θ
)
J_{test}(\theta)
Jtest(θ)。为什么不直接使用
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)作为该模型的误差?使用
J
t
e
s
t
(
θ
)
J_{test}(\theta)
Jtest(θ)具有公平性,而使用
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)得到的肯定是该模型这组数据的最小值,不具有普遍意义。
2. 模型选择
2.1. 选择合适的二项式次数
在进行特征选择的时候,需要选择特征值的多少次幂。将特征值的不同次幂作为不同的模型,如:
model 1:
θ
0
+
θ
1
x
\theta_0+\theta_1x
θ0+θ1x
model 2:
θ
0
+
θ
1
x
+
θ
2
x
2
\theta_0+\theta_1x+\theta_2x^2
θ0+θ1x+θ2x2
model 3:
θ
0
+
θ
1
x
+
θ
2
x
2
+
θ
3
x
3
\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3
θ0+θ1x+θ2x2+θ3x3
…
model n:
θ
0
+
θ
1
x
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
\theta_0+\theta_1x+\theta_2x^2+...+\theta_nx^n
θ0+θ1x+θ2x2+...+θnxn
将这些模型利用训练集,验证集得到每个模型的误差
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)。其误差曲线如下:
可以得到:
- 当 J c v ( θ ) J_{cv}(\theta) Jcv(θ)很大, J t r a i n ( θ ) ≈ J c v ( θ ) J_{train}(\theta)\approx J_{cv}(\theta) Jtrain(θ)≈Jcv(θ)时,此时处于高偏差,欠拟合的状态。
- 当 J c v ( θ ) J_{cv}(\theta) Jcv(θ)很大, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)很小时,此时处于高方差,过拟合的状态。
2.2. 选择合适的正则化参数 λ \lambda λ
J
(
θ
)
=
1
2
m
∑
i
=
1
i
=
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
2
m
∑
i
=
1
i
=
m
θ
i
2
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作为不同模型的参数,得到通过训练集验证集得到的误差
J
c
v
(
θ
)
J_{cv}(\theta)
Jcv(θ)。其误差曲线如下:
可以得到:
- 当 J c v ( θ ) J_{cv}(\theta) Jcv(θ)很大, J t r a i n ( θ ) ≈ J c v ( θ ) J_{train}(\theta)\approx J_{cv}(\theta) Jtrain(θ)≈Jcv(θ)时,此时处于高偏差,欠拟合的状态。
- 当 J c v ( θ ) J_{cv}(\theta) Jcv(θ)很大, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)很小时,此时处于高方差,过拟合的状态。
2.3. 修正欠拟合和过拟合
欠拟合(高偏差)状态:
- 增加特征变量
- 增加特征值的多次幂特征
- 减小正则化参数 λ \lambda λ的值
过拟合(高方差)状态:
- 获取更多训练样本
- 减少特征变量
- 增大正则化参数 λ \lambda λ的值
3. 学习曲线
随着训练样本量的增加,误差曲线如下:
可以得到:
- 随着m增大,当 J c v ( θ ) J_{cv}(\theta) Jcv(θ)很大, J t r a i n ( θ ) ≈ J c v ( θ ) J_{train}(\theta)\approx J_{cv}(\theta) Jtrain(θ)≈Jcv(θ)时,此时处于高偏差,欠拟合的状态。
- 随着m增大,当 J c v ( θ ) J_{cv}(\theta) Jcv(θ)很大, J c v ( θ ) J_{cv}(\theta) Jcv(θ)与 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)相差很大时,此时处于高方差,过拟合的状态。可以从图中看出,随着m的增大, J c v ( θ ) J_{cv}(\theta) Jcv(θ)与 J t r a i n ( θ ) 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)的数量。
查准率:所有预测为正的样本中实际为正的样本所占的比例。
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
在
l
o
g
i
s
t
i
c
logistic
logistic回归中,增大阈值,则Precision增大,Recall减小;减小阈值,则Precision减小,Recall增大。
利用
F
1
F_1
F1值评估算法性能,
F
1
F_1
F1最大,算法性能越好。
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=2\frac{Precision\ast Recall}{Precision+Recall}
F1=2Precision+RecallPrecision∗Recall
5. 机器学习系统设计
- 使用最简单的算法,尽可能块得得出一个不完美的结果。
- 利用cv集,画出学习曲线,找到高偏差或者高防叉问题,进行模型完善。
- 利用test集进行误差分析,手动检查被误分类的样本,进行特征分析,完善样本。