以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏
如果你已经训练了一个神经模型,你该如何评估这个模型的性能呢?你将会发现,采取系统的方法来评估模型将会给你指出一条更清晰的道路。让我们看看该怎么做吧。
评估房价预测模型
上图是一个房价预测模型,可以看出它采用的是一个线性回归。其中特征向量一开始仅仅包含房屋大小。很明显,这个模型与训练集拟合得很好,但是你也应该看出,以上拟合并不能很好地适应新的训练示例,有些过拟合了。
但是如果我们增加特征的数量,例如卧室的数量,房屋的层数,房屋的年龄等。那么对于曲线的绘制将因为特征的增多而更加困难。同时这也使得评估模型的性能更加困难以下是你可以使用的技术。
模型评估
我们采取的方法是,将训练数据拆分为两个部分,训练集trainset和验证集test set,其中训练集占大部分(例如70%),验证集占小部分(例如30%),我们可以先利用训练集训练数据,然后在验证集进行验证。
对于训练集,我们表示数据用
(
x
(
1
)
,
y
(
2
)
)
(x^{(1)},y^{(2)})
(x(1),y(2))的方式,在本例中训练集的样本为7;对于验证集,我们用
(
x
t
e
s
t
(
1
)
,
y
t
e
s
t
(
1
)
)
(x_{test}^{(1)},y_{test}^{(1)})
(xtest(1),ytest(1))来表示,样本数为3。
线性回归模型评估步骤(具有平方误差的成本回归)
首先,通过最小化代价函数来拟合参数:
J
(
w
,
b
)
=
m
i
n
w
,
b
[
1
2
m
t
r
a
i
n
∑
(
f
(
x
)
−
y
)
2
+
λ
2
m
t
r
a
i
n
∑
w
j
2
]
J(w,b)=min_{w,b}[\frac{1}{2m_{train}}\sum (f(x)-y)^2+\frac{\lambda}{2m_{train}}\sum w_j^2]
J(w,b)=minw,b[2mtrain1∑(f(x)−y)2+2mtrainλ∑wj2]
然后为了说明这个模型的性能如何,你可以测试下拟合后的参数在验证集下的代价函数为多少:
J
t
e
s
t
(
w
,
b
)
=
1
2
m
t
e
s
t
[
∑
(
f
(
x
)
−
y
)
2
]
J_{test}(w,b)=\frac{1}{2m_{test}}[\sum(f(x)-y)^2]
Jtest(w,b)=2mtest1[∑(f(x)−y)2]
然后再在训练集计算一次(注意,这里不包含正则化项):
J
t
r
a
i
n
(
w
,
b
)
=
1
2
m
t
r
a
i
n
[
∑
(
f
(
x
)
−
y
)
2
]
J_{train}(w,b)=\frac{1}{2m_{train}}[\sum(f(x)-y)^2]
Jtrain(w,b)=2mtrain1[∑(f(x)−y)2]
利用以上的方法分析房价预测的例子
可以得到J_train会很低,而J_test会很高(因为已经过拟合了)。通过J的检验可以得出结论,尽管模型在训练集表现出色,但是并不擅长将新示例泛化到不在训练集的新数据点。
如何应用于分类问题
同样还是利用代价函数:
J
(
w
,
b
)
=
−
1
m
∑
[
y
(
I
)
l
o
g
(
f
(
x
)
)
+
(
1
−
y
(
i
)
)
(
1
−
f
(
x
)
)
]
+
λ
2
m
∑
w
j
2
J
(
w
,
b
)
=
−
1
m
t
e
s
t
∑
[
y
t
e
s
t
(
I
)
l
o
g
(
f
(
x
t
e
s
t
)
+
(
1
−
y
t
e
s
t
(
i
)
)
(
1
−
f
(
x
t
e
s
t
)
)
]
J
(
w
,
b
)
=
−
1
m
t
r
a
i
n
∑
[
y
t
r
a
i
n
(
I
)
l
o
g
(
f
(
x
t
e
s
t
)
)
+
(
1
−
y
t
e
s
t
(
i
)
)
(
1
−
f
(
x
t
e
s
t
)
)
]
J(w,b)=-\frac{1}{m}\sum[y^{(I)}log(f(x))+(1-y^{(i)})(1-f(x))]+\frac{\lambda}{2m}\sum w_j^2\\ J(w,b)=-\frac{1}{m_{test}}\sum[y_{test}^{(I)}log(f(x_{test})+(1-y^{(i)}_{test})(1-f(x_{test}))]\\ J(w,b)=-\frac{1}{m_{train}}\sum[y_{train}^{(I)}log(f(x_{test}))+(1-y^{(i)}_{test})(1-f(x_{test}))]
J(w,b)=−m1∑[y(I)log(f(x))+(1−y(i))(1−f(x))]+2mλ∑wj2J(w,b)=−mtest1∑[ytest(I)log(f(xtest)+(1−ytest(i))(1−f(xtest))]J(w,b)=−mtrain1∑[ytrain(I)log(f(xtest))+(1−ytest(i))(1−f(xtest))]
原理和线性回归是一样的。
对于分类问题,相比计算误差,还有另一种方法来评估模型,就是计算模型分类错误的次数:
上图的意思是,分别计算下训练集和验证集中预测错误的个数,并把这个个数作为代价函数。如果概率大于0.5,关于这里示例预测就为1,反之为0,然后再判断预测与样本实际y是否相符,不相符就计数+1,最后看count了多少个,越多说明模型效果越差。
为了给读者你造成不必要的麻烦,博主的所有视频都没开仅粉丝可见,如果想要阅读我的其他博客,可以点个小小的关注哦。