机器学习算法中的7个损失函数的详细指南( 二 )

在波士顿住房数据上,在不同的学习率中分别迭代了500次得到下图:

机器学习算法中的7个损失函数的详细指南

文章插图
 
让我们再谈谈MSE损失函数,它是一个二次函数(形式为ax^2+bx+c),并且值大于等于0 。二次函数的图形如下图所示:
机器学习算法中的7个损失函数的详细指南

文章插图
 
二次函数仅具有全局最小值 。由于没有局部最小值,所以我们永远不会陷入它 。因此,可以保证梯度下降将收敛到全局最小值(如果它完全收敛) 。
MSE损失函数通过平方误差来惩罚模型犯的大错误 。把一个比较大的数平方会使它变得更大 。但有一点需要注意,这个属性使MSE成本函数对异常值的健壮性降低 。因此,如果我们的数据容易出现许多的异常值,则不应使用这个它 。
2.2. 绝对误差损失
每个训练样本的绝对误差是预测值和实际值之间的距离,与符号无关 。绝对误差也称为L1 Loss:
机器学习算法中的7个损失函数的详细指南

文章插图
 
正如我之前提到的,成本是这些绝对误差的平均值(MAE) 。
与MSE相比,MAE成本对异常值更加健壮 。但是,在数学方程中处理绝对或模数运算符并不容易 。我们可以认为这是MAE的缺点 。
以下是MAE成本更新权重的代码
def update_weights_MAE(m, b, X, Y, learning_rate): m_deriv = 0 b_deriv = 0 N = len(X) for i in range(N): #计算偏导数 # -x(y - (mx + b)) / |mx + b| m_deriv += - X[i] * (Y[i] - (m*X[i] + b)) / abs(Y[i] - (m*X[i] + b)) # -(y - (mx + b)) / |mx + b| b_deriv += -(Y[i] - (m*X[i] + b)) / abs(Y[i] - (m*X[i] + b)) #我们减去它,因为导数指向最陡的上升方向 m -= (m_deriv / float(N)) * learning_rate b -= (b_deriv / float(N)) * learning_rate return m, b在不同学习速率中分别迭代500次后,我们得到以下图:
机器学习算法中的7个损失函数的详细指南

文章插图
 
2.3. Huber损失
Huber损失结合了MSE和MAE的最佳特性 。对于较小的误差,它是二次的,否则是线性的(对于其梯度也是如此) 。Huber损失需要确定 δ 参数:
机器学习算法中的7个损失函数的详细指南

文章插图
 
def update_weights_Huber(m, b, X, Y, delta, learning_rate): m_deriv = 0 b_deriv = 0 N = len(X) for i in range(N): # 小值的二次导数,大值的线性导数 if abs(Y[i] - m*X[i] - b) <= delta: m_deriv += -X[i] * (Y[i] - (m*X[i] + b)) b_deriv += - (Y[i] - (m*X[i] + b)) else: m_deriv += delta * X[i] * ((m*X[i] + b) - Y[i]) / abs((m*X[i] + b) - Y[i]) b_deriv += delta * ((m*X[i] + b) - Y[i]) / abs((m*X[i] + b) - Y[i]) #我们减去它,因为导数指向最陡的上升方向 m -= (m_deriv / float(N)) * learning_rate b -= (b_deriv / float(N)) * learning_rate return m, b我们以0.0001的学习速率分别对 δ 参数的不同值进行500次权重更新迭代得到下图:
机器学习算法中的7个损失函数的详细指南

文章插图
 
Huber损失对于异常值比MSE更强 。它用于稳健回归(robust regression),M估计法(M-estimator)和可加模型(additive model) 。Huber损失的变体也可以用于分类 。
3. 二分类损失函数
意义如其名 。二分类是指将物品分配到两个类中的一个 。该分类基于应用于输入特征向量的规则 。二分类的例子例如,根据邮件的主题将电子邮件分类为垃圾邮件或非垃圾邮件 。
我将在乳腺癌数据集^2上说明这些二分类损失函数 。
我们希望根据平均半径,面积,周长等特征将肿瘤分类为"恶性(Malignant)"或"良性(Benign)" 。为简化起见,我们将仅使用两个输入特征(X_1和X_2),即"最差区域(worst area)"和"平均对称性(mean symmetry)"用于分类 。Y是二值的,为0(恶性)或1(良性) 。
这是我们数据的散点图:
机器学习算法中的7个损失函数的详细指南

文章插图
cancer
3.1. 二元交叉熵损失
让我们从理解术语"熵"开始 。通常,我们使用熵来表示无序或不确定性 。测量具有概率分布p(X)的随机变量X:
机器学习算法中的7个损失函数的详细指南

文章插图
 
负号用于使最后的结果为正数 。
概率分布的熵值越大,表明分布的不确定性越大 。同样,一个较小的值代表一个更确定的分布 。
这使得二元交叉熵适合作为损失函数(你希望最小化其值) 。我们对输出概率p的分类模型使用二元交叉熵损失 。
元素属于第1类(或正类)的概率=p元素属于第0类(或负类)的概率=1-p


推荐阅读