机器学习中常见的损失函数
损失函数(Loss function)是用来估量你模型的预测值 f(x)f(x) 与真实值 YY 的不一致程度,它是一个非负实值函数,通常用 L(Y,f(x))L(Y,f(x)) 来表示。损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数的重要组成部分。
一,回归问题
1,MSE(均方误差)(Mean Square Error)
均方误差也叫方法损失函数或者最小二乘法
作为机器学习中常常用于损失函数的方法,均方误差频繁的出现在机器学习的各种算法中,但是由于是舶来品,又和其他的几个概念特别像,所以常常在跟他人描述的时候说成其他方法的名字。
均方误差的数学表达为:
M
S
E
=
1
n
∑
i
n
(
y
i
−
f
(
x
i
)
)
2
MSE=\frac{1}{n}\sum_{i}^{n}(y_i-f(x_i))^2
MSE=n1i∑n(yi−f(xi))2
如公式所示,通过计算每个预测值和实际值之间的差值的平方和再求平均,机器学习中它经常被用于表示预测值和实际值相差的程度。平方损失函数是光滑的,可以用梯度下降法求解,但是,当预测值和真实值差异较大时,它的惩罚力度较大,因此对异常点较为敏感。
2,RMSE(均方根误差)
即RMSE (均方根误差)(Root Mean Square Error)
对方差开平方就是均方差,而均方差又称标准差,即:
R
M
S
E
=
1
n
∑
i
n
(
y
i
−
f
(
x
i
)
)
2
RMSE=\sqrt{\frac{1}{n}\sum_{i}^{n}(y_i-f(x_i))^2}
RMSE=n1i∑n(yi−f(xi))2
与MSE一样对于异常点也是非常敏感。
3,MAE (平均绝对误差)
M
A
E
=
1
n
∑
i
=
0
n
∣
y
i
^
−
y
i
∣
MAE=\frac{1}{n}\sum_{i=0}^{n}|\hat{y_i}-y_i|
MAE=n1∑i=0n∣yi^−yi∣
4,MAPE(平均绝对百分比)
M
A
P
E
=
∑
i
=
1
n
∣
y
i
−
f
(
x
i
)
y
i
∣
∗
100
n
MAPE=\sum_{i=1}^{n}|\frac{y_i-f(x_i)}{y_i}|*\frac{100}{n}
MAPE=i=1∑n∣yiyi−f(xi)∣∗n100
MAPE不仅仅考虑预测值与真实值的误差,还考虑了误差与真实值之间的比例,在某些场景下,比如房价从0.5w到5w之间,将0.5预测成1.0与将5.0预测成4.5,实际上预测差距是非常大的,如果用RMSE的话两者效果相同,而用MAPE的后者要比前者好一些。
二,分类问题
1,0-1损失函数
f
(
x
)
=
{
0
y=f(x)
1
y!=f(x)
f(x)= \begin{cases} 0& \text{y=f(x)}\\ 1& \text{y!=f(x)} \end{cases}
f(x)={01y=f(x)y!=f(x)
或者是:
f
(
x
)
=
I
(
y
(
x
)
)
f(x)=I(y(x))
f(x)=I(y(x))
2,logLoss (对数损失函数,也叫binary cross entropy,二元交叉熵损失,LR)
log loss function表达式:
l
o
g
l
o
s
s
=
−
1
m
∑
i
=
0
m
(
y
i
l
o
g
(
p
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
p
i
)
)
logloss=-\frac{1}{m}\sum_{i=0}^{m}(y_ilog(p_i)+(1-y_i)log(1-p_i))
logloss=−m1i=0∑m(yilog(pi)+(1−yi)log(1−pi))
其中
y
i
y_i
yi是个样本的真实标签,
p
i
p_i
pi是第i个样本预测为正样本的概率。
3,Cross-Entropy损失函数
交叉熵刻画的是两个概率分部之间的距离,或可以说其刻画的是通过概率分布q来表达概率分布p的困难程度,p代表正确答案,q代表的是预测值,交叉熵越小,两个概率的分布越接近。
交叉熵损失函数通常使用在softmax上,而softmax通常使用在神经网络的末端,使其预测结果以概率的形式输出。
交叉熵损失函数的数学表达如下所示:
H
(
p
,
q
)
=
−
∑
i
=
0
m
∑
j
=
1
n
p
(
x
i
j
)
l
o
g
(
q
(
x
i
j
)
)
H(p,q)=-\sum_{i=0}^{m}\sum_{j=1}^{n}p(x_{ij})log(q(x_{ij}))
H(p,q)=−i=0∑mj=1∑np(xij)log(q(xij))
m为样本数量,n为样本所属的不同类别个数。
p
(
x
i
j
)
p(x_{ij})
p(xij)表示样本i所属类别j,
q
(
x
i
j
)
q(x_{ij})
q(xij)表示预测样本i属于类别j的概率。
logloss与交叉熵的对比
对数损失函数(Log loss function)和交叉熵损失函数(Cross-entroy loss funtion)在很多文献内是一致的,因为他们的表示式的本质是一样的。但是两种损失函数所对应的上一层结构不同,log loss经常对应的是Sigmoid函数的输出,用于二分类问题;而cross-entropy loss经常对应的是Softmax函数的输出,用于多分类问题。
所以在神经网络中经常使用cross-entropy作为评判参数优化的函数,而在二分类的场景下经常使用log loss作为评判参数优化的函数。
4,Hinge损失函数(SVM)
用于svm,svm通过间隔最大化方式,通过拉格朗日乘子法转化成对偶问题进行建模求解的。
Hinge-loss的数学表达如下:
L
(
y
)
=
m
a
x
(
0
,
1
−
f
(
x
)
)
L(y) = max(0,1-f(x))
L(y)=max(0,1−f(x))
5,指数损失函数(exp-loss)
应用于AdaBoost。
指数损失(exp-loss)函数的标准形式为:
L
(
y
,
f
(
x
)
)
=
e
x
p
(
−
y
∗
f
(
x
)
)
L(y,f(x))=exp(-y*f(x))
L(y,f(x))=exp(−y∗f(x))
在Adaboost算法学习的过程中,经过m轮迭代之后,可以得到
f
m
(
x
)
f_m(x)
fm(x) :
f
m
(
x
)
=
f
m
−
1
(
x
)
+
a
m
∗
G
m
(
x
)
f_m(x)=f_{m-1}(x)+a_m*G_m(x)
fm(x)=fm−1(x)+am∗Gm(x)
在给定n个样本的情况下,Adaboost的损失函数为:
L
(
y
,
f
(
x
)
)
=
1
n
∑
i
=
0
n
e
x
p
(
−
y
i
∗
f
(
x
i
)
)
L(y,f(x))=\frac{1}{n}\sum_{i=0}^{n}exp(-y_i*f(x_i))
L(y,f(x))=n1i=0∑nexp(−yi∗f(xi))