常见的损失函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZZh1301051836/article/details/89414110

1 损失函数的一般形式

   通常机器学习每一个算法中都会有一个目标函数,算法的求解过程是通过对这个目标函数优化的过程。在分类或者回归问题中,通常使用损失函数(代价函数)作为其目标函数。损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的算法使用的损失函数不一样。
  损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。通常表示为如下:
θ = a r g m i n 1 N i = 1 N L ( y i , f ( x i ; θ i ) ) + λ Φ ( θ ) \theta ^{*}=argmin\frac{1}{N}\sum_{i=1}^{N}L(y_{i},f(x_{i};\theta_{i} ))+\lambda \Phi (\theta )
  其中,前面的均值项表示经验风险函数,L表示损失函数,后面的 λ Φ ( θ ) \lambda \Phi (\theta ) 是正则化项(regularizer)或惩罚项(penalty term),它可以是L1、L2或者其他正则函数。整个式子表示要找到使得目标函数最小的参数 θ \theta^* 值。

2 几种常用的损失函数

2.1 0-1损失函数

0-1损失是指,预测值和目标值不相等为1,否则为0:
L ( Y , f ( X ) ) = { 1 , Y f ( X ) 0 , Y = f ( X ) L(Y,f(X))=\left\{\begin{matrix} 1, Y\neq f(X)\\ 0, Y=f(X) \end{matrix}\right.
感知机就是用的这种损失函数。但是由于相等这个条件太过严格,因此我们可以放宽条件,即满足 |Y−f(X)|<T|Y−f(X)|<T 时认为相等。
L ( Y , f ( X ) ) = { 1 , Y f ( X ) T 0 , Y = f ( X ) &lt; T L(Y,f(X))=\left\{\begin{matrix} 1, |Y-f(X)|\geq T\\ 0, |Y=f(X)|&lt;T \end{matrix}\right.

2.2 绝对值损失函数

L ( Y , f ( X ) = Y f ( X ) L(Y,f(X)=|Y-f(X)|

2.3 平方损失函数

最小二乘法是线性回归的一种方法,它将回归的问题转化为了凸优化的问题。最小二乘法的基本原则是:最优拟合曲线应该使得所有点到回归直线的距离和最小。通常用欧几里得距离进行距离的度量。平方损失的损失函数为:
L ( Y , f ( X ) ) = N ( Y f ( X ) ) 2 L(Y,f(X)) = \sum_{N}(Y - f(X))^{2}

2.4 指数损失函数

AdaBoost就是一指数损失函数为损失函数的。
指数损失函数的标准形式:
L ( Y , f ( X ) ) = e x p [ y f ( x ) ] L(Y,f(X)) = exp[-yf(x)]

2.5 对数损失函数

2.5.1 对数损失函数原理

  对数损失, 即对数似然损失(Log-likelihood Loss), 也称逻辑回归损失(Logistic Loss)或交叉熵损失(cross-entropy Loss), 是在概率估计上定义的.它常用于(multi-nominal, 多项)逻辑斯谛回归和神经网络,以及一些期望极大算法的变体. 可用于评估分类器的概率输出。
  对数损失通过惩罚错误的分类,实现对分类器的准确度(Accuracy)的量化. 最小化对数损失基本等价于最大化分类器的准确度.为了计算对数损失, 分类器必须提供对输入的所属的每个类别的概率值, 不只是最可能的类别。对数损失函数的计算公式如下:
L ( Y , P ( Y X ) ) = l o g P ( Y X ) = 1 N i = 1 N j = 1 M y i j l o g ( p i j ) L(Y,P(Y|X))=-logP(Y|X)=-\frac{1}{N}\sum_{i=1}^N\sum_{j=1}^My_{ij}log(p_{ij})
  其中, Y Y 为输出变量, X X 为输入变量, L L 为损失函数. N N 为输入样本量, M M 为可能的类别数, y i j y_{ij} 是一个二值指标, 表示类别 j j 是否是输入实例 x i x_i 的真实类别。 p i j p_{ij} 为模型或分类器预测输入实例 x i x_i 属于类别 j j 的概率.
  如果只有两类 {0, 1}, 则对数损失函数的公式简化为
L ( Y , P ( Y X ) ) = 1 N i = 1 N [ y i l o g p i + ( 1 y i ) l o g ( 1 p i ) ] L(Y,P(Y|X))=-\frac{1}{N}\sum_{i=1}^N[y_ilogp_i + (1-y_i)log(1-p_i)]
  这时, y i y_i 为输入实例 x i x_i 的真实类别, p i p_i 为预测输入实例 x i x_i 属于类别 1 的概率. 对所有样本的对数损失表示对每个样本的对数损失的平均值, 对于完美的分类器, 对数损失为 0。

2.5.2 sklearn中的log_loss

sklearn中的对数损失函数方法:

from sklearn.metrics import log_loss
def unitest():
    y_true = [0, 0, 1, 1]
    y_pred = [0.1, 0.2, 0.7, 0.99]
    print (log_loss(y_true, y_pred))

    if __name__ == '__main__':
    	unitest()

参考网址:
对数损失函数(Logarithmic Loss Function)的原理和 Python 实现

2.6 Hinge损失函数

Hinge loss用于最大间隔(maximum-margin)分类,其中最有代表性的就是支持向量机SVM。
Hinge函数的标准形式:
在这里插入图片描述(与上面统一的形式:)
在这里插入图片描述
  其中,t为目标值(-1或+1),y是分类器输出的预测值,并不直接是类标签。其含义为,当t和y的符号相同时(表示y预测正确)并且|y|≥1时,hinge loss为0;当t和y的符号相反时,hinge loss随着y的增大线性增大。

参考网址:
常见的损失函数

猜你喜欢

转载自blog.csdn.net/ZZh1301051836/article/details/89414110