设为首页 - 加入收藏 黄南站长网 (http://www.0973zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 2019 3000 2018 只要
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Python机器学习中七种损失函数的科学指南

发布时间:2019-11-11 22:54 所属栏目:[优化] 来源:CDA数据分析师
导读:损失函数实际上是我们经常使用的这些技术的核心,本文介绍了多种损失函数,他们的工作位置以及如何在Python中进行编码 前言 首先想象一下一个场景你已经在给定的数据集上训练了一个机器学习模型,并且已经准备将其放在客户面前。但是,这个时候你应该如何

损失函数实际上是我们经常使用的这些技术的核心,本文介绍了多种损失函数,他们的工作位置以及如何在Python中进行编码

Python机器学习中七种损失函数的科学指南

前言

首先想象一下一个场景–你已经在给定的数据集上训练了一个机器学习模型,并且已经准备将其放在客户面前。但是,这个时候你应该如何确定该模型会给出很好的结果呢?是否有一种度量标准或技术可以帮助你快速评估数据集中的模型?

当然有了—简单的说,这就是损失函数在机器学习中发挥作用的地方。

损失函数是我们喜欢使用的机器学习算法的核心。但是可以看到大多数初学者和爱好者对如何使用损失函数们以及在哪里使用损失函数感到非常困惑。

损失函数并不是那么的难以理解,并且如果掌握了它将无限地增强你对机器学习算法的理解。那么,损失函数是什么,我们应该如何把握损失函数的意义呢?

在本文中,我们将讨论机器学习中使用的7种常见的损失函数,并说明每个函数中在什么地方使用。 我们将在本文中介绍很多内容,所以让我们现在开始吧!

什么是损失函数?

假设你现在在山顶上,这个时候需要往下走。你应该怎么决定你往哪个方向走?

假如是我的话,我会这么做:

  • 首先环顾四周,看看所有有可能的道路
  • 然后拒绝那些向上的路。这是因为这些路径实际上会消耗我更多的精力,并使我的任务更加困难
  • 最后,选择我认为最容易下坡的那条路

我刚刚只是凭借我的直接来判断我的决定的么?当然不是,这些决定正是损失函数所提供的。

损失函数将决策映射到相关的成本上。

决策认为上坡会浪费我们的精力和时间。决定认为向下对我们来说更有利。因此,它具有负成本。

在有监督的机器学习算法中,我们希望在学习过程中将每个训练样本的误差最小化。这可以通过一些优化策略(例如梯度下降)来完成。这个误差就来自损失函数。

损失函数和成本函数有什么区别?

首先需要在这里强调一下,尽管成本函数和损失函数是同义词,可以互换使用,但是它们是不同的。

损失函数仅用于单个训练样本。有时也称为错误函数。另一方面,成本函数是整个训练数据集的平均损失。优化策略的目标是最小化成本函数。

回归损失函数

此时,你应该非常熟悉线性回归了。它涉及对因变量 Y和几个自变量 X_i 之间的线性关系建模。因此,我们实际上在这些变量上在空间上拟合了一条空间线。

我们将使用给定的数据点来找到系数a0,a1,...,an。

Python机器学习中七种损失函数的科学指南

我们将使用着名的波士顿住房数据集来理解这一概念。为了简单起见,我们将只使用一个特征- 每个住宅的平均房间数(X),来预测因变量,以1000美元为单位的房屋的中位数价值(Y)。

Python机器学习中七种损失函数的科学指南

我们将使用“ 梯度下降”作为一个优化策略来找到回归线。我不会详细介绍有关“梯度下降”的复杂细节,但是这里有一个关于权重更新规则的提示”:

在这里,theta_j是要更新的权重,alpha是学习率,J是成本函数。成本函数由theta参数化。我们的目标是找到产生最小总成本的theta值。

我已经定义了以下每个损失函数要遵循的步骤:

  1. 为我们的预测函数f(X)编写表达式,并确定我们需要查找的参数
  2. 确定每个训练样本要使用的损失函数
  3. 查找成本函数的表达式–所有样本的平均损失
  4. 查找成本函数相对于每个未知参数的梯度
  5. 确定学习率并对固定次数的迭代运行权重更新规则

1.平方误差损失

每个训练样本的平方误差损失(也称为L2损失)是实际值与预测值之差的平方:

相应的成本函数是这些平方误差(MSE)的均值

我觉得在你参考下面的这些代码之前,先自己尝试找到梯度下降的梯度。

def update_weights_MSE(m, b, X, Y, learning_rate): m_deriv = 0 b_deriv = 0 N = len(X) for i in range(N): # Calculate partial derivatives # -2x(y - (mx + b)) m_deriv += -2*X[i] * (Y[i] - (m*X[i] + b)) # -2(y - (mx + b)) b_deriv += -2*(Y[i] - (m*X[i] + b)) # We subtract because the derivatives point in direction of steepest ascent m -= (m_deriv / float(N)) * learning_rate b -= (b_deriv / float(N)) * learning_rate return m, b

我在波士顿数据上使用了这段代码,以获取500次迭代中不同的学习率值:

Python机器学习中七种损失函数的科学指南

接下来你可以尝试以0.1的学习率再次运行该代码500次迭代。

让我们再多谈一下MSE损失函数。它是一个二次函数

其中a> 0),还记得它的是什么样子么?

Python机器学习中七种损失函数的科学指南

二次函数仅具有全局最小值。由于没有局部最小值,因此我们永远不会陷入局部最小值的困境。因此,它始终可以确保“梯度下降”收敛(如果它完全收敛)到全局最小值。

MSE损失函数通过对错误进行平方来惩罚模型,以免产生大的错误。平方大会使它更大,对吗?但是在这里有一个警告。此属性使MSE成本函数对异常值的鲁棒性(Robust)降低。因此,如果我们的数据容易出现异常值,则不应使用此方法。

2.绝对误差损失

每个训练样本的绝对误差是预测值与实际值之间的距离,而与符号无关。绝对误差也称为L1损失:

正如我之前提到的,代价是这些绝对误差(MAE)的均值。

与MSE相比,MAE成本对于异常值更为稳健。但是,在处理数学方程中的绝对或模运算并不容易。我相信你们中的很多人都会同意这一点!我们可以认为这是MAE的一个缺点。

这是带有MAE成本的update_weight函数的代码:

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章