本文作者将常用的损失函数分为了两大类:分类和回归。然后又分别对这两类进行了细分和讲解,其中回归中包含了一种不太常见的损失函数:平均偏差误差,可以用来确定模型中存在正偏差还是负偏差。

机器通过损失函数进行学习。这是一种评估特定算法对给定数据建模程度的方法。如果预测值与实际结果偏离较远,损失函数会得到一个非常大的值。在一些优化函数的辅助下,损失函数逐渐学会减少预测值的误差。本文将介绍几种损失函数及其在机器学习和深度学习领域的应用。

没有一个适合所有机器学习算法的损失函数。针对特定问题选择损失函数涉及到许多因素,比如所选机器学习算法的类型、是否易于计算导数以及数据集中异常值所占比例。

从学习任务的类型出发,可以从广义上将损失函数分为两大类——回归损失和分类损失。在分类任务中,我们要从类别值有限的数据集中预测输出,比如给定一个手写数字图像的大数据集,将其分为 0~9 中的一个。而回归问题处理的则是连续值的预测问题,例如给定房屋面积、房间数量以及房间大小,预测房屋价格。

NOTE n        - Number of training examples.i        - ith training example in a data set.y(i)     - Ground truth label for ith training example.y_hat(i) - Prediction for ith training example.
复制代码

回归损失

均方误差/平方损失/L2 损失

数学公式:

顾名思义,均方误差(MSE)度量的是预测值和实际观测值间差的平方的均值。它只考虑误差的平均大小,不考虑其方向。但由于经过平方,与真实值偏离较多的预测值会比偏离较少的预测值受到更为严重的惩罚。再加上 MSE 的数学特性很好,这使得计算梯度变得更容易。

import numpy as np
y_hat = np.array([0.000, 0.166, 0.333])
y_true = np.array([0.000, 0.254, 0.998])
def rmse(predictions, targets):differences = predictions - targetsdifferences_squared = differences ** 2mean_of_differences_squared = differences_squared.mean()rmse_val = np.sqrt(mean_of_differences_squared)return rmse_val
print("d is: " + str(["%.8f" % elem for elem in y_hat]))
print("p is: " + str(["%.8f" % elem for elem in y_true]))
rmse_val = rmse(y_hat, y_true)
print("rms error is: " + str(rmse_val))
复制代码

平均绝对误差/L1 损失

数学公式:

平均绝对误差(MAE)度量的是预测值和实际观测值之间绝对差之和的平均值。和 MSE 一样,这种度量方法也是在不考虑方向的情况下衡量误差大小。但和 MSE 的不同之处在于,MAE 需要像线性规划这样更复杂的工具来计算梯度。此外,MAE 对异常值更加稳健,因为它不使用平方。

import numpy as np
y_hat = np.array([0.000, 0.166, 0.333])
y_true = np.array([0.000, 0.254, 0.998])print("d is: " + str(["%.8f" % elem for elem in y_hat]))
print("p is: " + str(["%.8f" % elem for elem in y_true]))def mae(predictions, targets):differences = predictions - targetsabsolute_differences = np.absolute(differences)mean_absolute_differences = absolute_differences.mean()return mean_absolute_differences
mae_val = mae(y_hat, y_true)
print ("mae error is: " + str(mae_val))
复制代码

平均偏差误差(mean bias error) 与其它损失函数相比,这个函数在机器学习领域没有那么常见。它与 MAE 相似,唯一的区别是这个函数没有用绝对值。用这个函数需要注意的一点是,正负误差可以互相抵消。尽管在实际应用中没那么准确,但它可以确定模型存在正偏差还是负偏差。
数学公式:

分类损失

Hinge Loss/多分类 SVM 损失

简言之,在一定的安全间隔内(通常是 1),正确类别的分数应高于所有错误类别的分数之和。因此 hinge loss 常用于最大间隔分类(maximum-margin classification),最常用的是支持向量机。尽管不可微,但它是一个凸函数,因此可以轻而易举地使用机器学习领域中常用的凸优化器。

数学公式:

思考下例,我们有三个训练样本,要预测三个类别(狗、猫和马)。以下是我们通过算法预测出来的每一类的值:

计算这 3 个训练样本的 hinge loss:

## 1st training example
max(0, (1.49) - (-0.39) + 1) + max(0, (4.21) - (-0.39) + 1)
max(0, 2.88) + max(0, 5.6)
2.88 + 5.6
8.48 (High loss as very wrong prediction)
## 2nd training example
max(0, (-4.61) - (3.28)+ 1) + max(0, (1.46) - (3.28)+ 1)
max(0, -6.89) + max(0, -0.82)
0 + 0
0 (Zero loss as correct prediction)
## 3rd training example
max(0, (1.03) - (-2.27)+ 1) + max(0, (-2.37) - (-2.27)+ 1)
max(0, 4.3) + max(0, 0.9)
4.3 + 0.9
5.2 (High loss as very wrong prediction)
复制代码

交叉熵损失/负对数似然:

这是分类问题中最常见的设置。随着预测概率偏离实际标签,交叉熵损失会逐渐增加。

数学公式:

注意,当实际标签为 1(y(i)=1) 时,函数的后半部分消失,而当实际标签是为 0(y(i=0)) 时,函数的前半部分消失。简言之,我们只是把对真实值类别的实际预测概率的对数相乘。还有重要的一点是,交叉熵损失会重重惩罚那些置信度高但是错误的预测值。

import numpy as np
predictions = np.array([[0.25,0.25,0.25,0.25],[0.01,0.01,0.01,0.96]])
targets = np.array([[0,0,0,1],[0,0,0,1]])
def cross_entropy(predictions, targets, epsilon=1e-10):predictions = np.clip(predictions, epsilon, 1. - epsilon)N = predictions.shape[0]ce_loss = -np.sum(np.sum(targets * np.log(predictions + 1e-5)))/Nreturn ce_loss
cross_entropy_loss = cross_entropy(predictions, targets)
print ("Cross entropy loss is: " + str(cross_entropy_loss))
复制代码

相关阅读:机器学习入门概览

入门|机器学习中常用的损失函数你知多少?相关推荐

  1. 【AI初识境】深度学习中常用的损失函数有哪些?

    这是专栏<AI初识境>的第11篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 今天来说说深度学习中常见的损失函数(loss),覆盖分类,回归任务以及生成对抗网络,有了目 ...

  2. 机器学习百页书:机器学习中常用到的一些数学符号

    一本精简的机器学习入门手册.机器学习百页书<机器学习精讲>,人工智能的核心是机器学习,本书囊括机器学习的精髓,系统而精炼地讲解机器学习的基本原理.本书英文版一经推出,就长期位于亚马逊机器学 ...

  3. 机器学习中常见的损失函数_机器学习中最常见的损失函数

    机器学习中常见的损失函数 现实世界中的DS (DS IN THE REAL WORLD) In mathematical optimization and decision theory, a los ...

  4. 机器学习中常用的基本概念

    目录 1. 机器学习定义 2. 机器学习中的属性与特征 3.误差 4.过拟合与欠拟合 4.1 过拟合 4.2欠拟合 5.交叉验证 5.1交叉验证基本思想 5.2 交叉验证训练过程 6.调参 7. 机器 ...

  5. 机器学习中的常见问题—损失函数

    机器学习中的常见问题--损失函数 一.分类算法中的损失函数 在分类算法中,损失函数通常可以表示成损失项和正则项的和,即有如下的形式: J(w)=∑iL(mi(w))+λR(w)J(w)=∑iL(mi( ...

  6. AI:人工智能概念之机器学习中常用算法的思维导图集合(非常经典、建议收藏)之详细攻略

    AI:人工智能概念之机器学习中常用算法的思维导图集合(非常经典.建议收藏)之详细攻略 目录 机器学习算法的思维导图集合 1.ML算法思维图 2.ML算法思维导图 相关文章:ML/DL:关于算法模型的选 ...

  7. 机器学习中常用的优化算法:

    http://blog.csdn.net/losteng/article/details/50993911 有知识点和代码的实现过程. 机器学习中常用的优化算法: 1.梯度下降法 2.牛顿法和拟牛顿法 ...

  8. 机器学习中的各种损失函数(Hinge loss,交叉熵,softmax)

    机器学习中的各种损失函数 SVM multiclass loss(Hinge loss) 这是一个合页函数,也叫Hinge function,loss 函数反映的是我们对于当前分类结果的不满意程度.在 ...

  9. Dataset:机器学习中常用数据集下载链接集合之详细攻略

    Dataset:机器学习中常用数据集下载链接集合之详细攻略 目录 机器学习中常用数据集下载链接集合之详细攻略 sklearn.datasets数据集所有csv文件集合 seaborn-data数据集所 ...

最新文章

  1. 二十世纪最伟大的10大算法
  2. 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★
  3. linux服务器su之后变成bash-4.1#
  4. 前端面试每日 3+1 —— 第32天
  5. css3轮播不用jpuery_15款效果很酷的最新jQuery/CSS3特效
  6. codeforces229 D. Towers(dp+贪心)
  7. python求素数算法_Python程序最多可计算n个质数(使用不同算法)
  8. 第 132 章 Example
  9. php redis 投票_高可用Redis服务架构分析与搭建
  10. 21天Jenkins打卡Day14-maven服务
  11. virtualbox安装增强功能时【未能加载虚拟光盘】
  12. Lingo建模基础入门
  13. 中文版modbus测试软件,Modbus调试工具
  14. 科研伦理与学术规范2021秋期末考答案|网课期末考答案|学堂在线|北京师范大学印波副教授
  15. 善用佳软站长:畅谈大数据时代的知识管理
  16. GD32与STM32区别
  17. 服务器怎么ghost备份系统,最详细的ghost备份系统图解
  18. docker安装gamit_科学网-基于Ubuntu18.04安装Gamit10.71-郭若成的博文
  19. 计算机四级数据库工程师考什么,计算机四级《数据库工程师》考试大纲
  20. [爬虫]requests+正则表达式爬取猫眼电影TOP100

热门文章

  1. linux ubuntu无法登陆,新手入门求解答!ubuntu命令创建用户无法登入问题!
  2. oracle上浮下浮分析函数_Oracle SQL高级编程——分析函数(窗口函数)全面讲解...
  3. python的语法结构_Python特点、语法结构、编码知识
  4. Verilog HDL 使用规范(一)
  5. 正交频分复用(OFDM)初步(原理)
  6. 读《高效程序员的45个习惯——敏捷开发修炼之道》
  7. 1.5 Kali Linux策略
  8. [MySQL FAQ]系列 -- 为何innodb表select count(*)很慢
  9. 【MongoDB】5.MongoDB与java的简单结合
  10. 教你如何反编译Android安装文件apk来偷窥源代码