1 损失函数的一般形式
通常机器学习每一个算法中都会有一个目标函数,算法的求解过程是通过对这个目标函数优化的过程。在分类或者回归问题中,通常使用损失函数(代价函数)作为其目标函数。损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的算法使用的损失函数不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。通常表示为如下:
其中,前面的均值项表示经验风险函数,L表示损失函数,后面的
是正则化项(regularizer)或惩罚项(penalty term),它可以是L1、L2或者其他正则函数。整个式子表示要找到使得目标函数最小的参数
值。
2 几种常用的损失函数
2.1 0-1损失函数
0-1损失是指,预测值和目标值不相等为1,否则为0:
感知机就是用的这种损失函数。但是由于相等这个条件太过严格,因此我们可以放宽条件,即满足 |Y−f(X)|<T|Y−f(X)|<T 时认为相等。
2.2 绝对值损失函数
2.3 平方损失函数
最小二乘法是线性回归的一种方法,它将回归的问题转化为了凸优化的问题。最小二乘法的基本原则是:最优拟合曲线应该使得所有点到回归直线的距离和最小。通常用欧几里得距离进行距离的度量。平方损失的损失函数为:
2.4 指数损失函数
AdaBoost就是一指数损失函数为损失函数的。
指数损失函数的标准形式:
2.5 对数损失函数
2.5.1 对数损失函数原理
对数损失, 即对数似然损失(Log-likelihood Loss), 也称逻辑回归损失(Logistic Loss)或交叉熵损失(cross-entropy Loss), 是在概率估计上定义的.它常用于(multi-nominal, 多项)逻辑斯谛回归和神经网络,以及一些期望极大算法的变体. 可用于评估分类器的概率输出。
对数损失通过惩罚错误的分类,实现对分类器的准确度(Accuracy)的量化. 最小化对数损失基本等价于最大化分类器的准确度.为了计算对数损失, 分类器必须提供对输入的所属的每个类别的概率值, 不只是最可能的类别。对数损失函数的计算公式如下:
其中,
为输出变量,
为输入变量,
为损失函数.
为输入样本量,
为可能的类别数,
是一个二值指标, 表示类别
是否是输入实例
的真实类别。
为模型或分类器预测输入实例
属于类别
的概率.
如果只有两类 {0, 1}, 则对数损失函数的公式简化为
这时,
为输入实例
的真实类别,
为预测输入实例
属于类别 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的增大线性增大。
参考网址:
常见的损失函数