首页 > 其他分享 >机器学习--损失函数

机器学习--损失函数

时间:2024-06-08 20:29:17浏览次数:20  
标签:yi 机器 函数 -- 损失 MSE hat log

损失函数(Loss Function),也称为代价函数(Cost Function)或误差函数(Error Function),是机器学习和统计学中的一个重要概念。它用于量化模型预测值与真实值之间的差异。损失函数的值越小,表示模型的预测越准确。
在这里插入图片描述

损失函数的定义

损失函数根据具体的任务和目标会有所不同。常见的损失函数包括:

  1. 均方误差(Mean Squared Error, MSE)
    适用于回归问题,计算预测值与真实值之间的平方差的平均值。
    M S E {MSE} MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 n1​∑i=1n​(yi​−y^​i​)2

    其中, ( y i ) ( y_i ) (yi​)是真实值, ( y ^ i ) ( \hat{y}_i) (y^​i​)是预测值, ( n ) ( n ) (n) 是样本数量。

  2. 均方根误差(Root Mean Squared Error, RMSE)
    MSE 的平方根,用于回归问题,更直观地反映误差的尺度。
     RMSE \ \text{RMSE}  RMSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} n1​∑i=1n​(yi​−y^​i​)2

  3. 平均绝对误差(Mean Absolute Error, MAE)
    计算预测值与真实值之间绝对差的平均值。

    MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| MAE=n1​∑i=1n​∣yi​−y^​i​∣

  4. 交叉熵损失(Cross-Entropy Loss)
    适用于分类问题,特别是二分类和多分类问题

    • 二分类交叉熵损失:

    Binary Cross-Entropy = − 1 n ∑ i = 1 n [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] \text{Binary Cross-Entropy} = - \frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] Binary Cross-Entropy=−n1​∑i=1n​[yi​log(y^​i​)+(1−yi​)log(1−y^​i​)]

    • 多分类交叉熵损失:
      Categorical Cross-Entropy = − 1 n ∑ i = 1 n ∑ c = 1 C y i , c log ⁡ ( y ^ i , c ) \text{Categorical Cross-Entropy} = - \frac{1}{n} \sum_{i=1}^{n} \sum_{c=1}^{C} y_{i,c} \log(\hat{y}_{i,c}) Categorical Cross-Entropy=−n1​∑i=1n​∑c=1C​yi,c​log(y^​i,c​)
      其中, ( C ) (C) (C)是类别数,(( y i , c y_{i,c} yi,c​) 是样本 ( i ) 在类别 ( c ) 的真实标签(通常为0或1), ( y ^ i , c ) ( \hat{y}_{i,c} ) (y^​i,c​) 是预测概率。

如何定义合理的损失函数

定义合理的损失函数需要考虑以下几个方面:

  1. 任务目标

    • 根据具体任务选择合适的损失函数。例如,回归任务通常使用MSE或MAE分类任务则使用交叉熵损失
  2. 误差特性

    • 考虑误差的性质和分布。MSE 对异常值(outliers)较为敏感,因为平方误差会放大大误差值的影响,而MAE 对异常值较为鲁棒。
  3. 模型的可解释性

    • 选择容易解释和调试的损失函数。MAE 的物理意义更容易理解,因为它直接反映了平均预测误差的大小。
  4. 优化难度

    • 选择优化过程中梯度计算和收敛性较好的损失函数。例如,MSE 的梯度是线性的,优化相对简单,而有些复杂损失函数可能导致优化过程中的梯度不稳定。
  5. 应用场景

    • 根据具体应用场景选择损失函数。例如,在推荐系统中,可以使用带权重的损失函数,来更关注某些重要用户或物品的预测准确性。

举例说明

例子1:房价预测(回归问题)

假设我们在做房价预测,可以选择MSE作为损失函数:
MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1​∑i=1n​(yi​−y^​i​)2
选择MSE是因为它在回归问题中广泛使用,计算简单且误差放大效果有助于模型尽量减少大误差。

例子2:图片分类(分类问题)

假设我们在做手写数字识别,可以选择多分类交叉熵损失:
Categorical Cross-Entropy = − 1 n ∑ i = 1 n ∑ c = 1 C y i , c log ⁡ ( y ^ i , c ) \text{Categorical Cross-Entropy} = - \frac{1}{n} \sum_{i=1}^{n} \sum_{c=1}^{C} y_{i,c} \log(\hat{y}_{i,c}) Categorical Cross-Entropy=−n1​∑i=1n​∑c=1C​yi,c​log(y^​i,c​)
选择交叉熵损失是因为它能够很好地处理分类概率分布,帮助模型最大化正确分类的概率。

总结

损失函数是评估和优化机器学习模型的重要工具。定义合理的损失函数需要结合具体任务、误差特性、模型的可解释性、优化难度和应用场景等多个因素。选择合适的损失函数能够帮助我们构建更准确和有效的机器学习模型。

标签:yi,机器,函数,--,损失,MSE,hat,log
From: https://blog.csdn.net/weixin_42367888/article/details/139550626

相关文章

  • python 多任务之多进程
    多任务优势多个任务同时执行可以大大提高程序执行效率,可以充分利用CPU资源,提高程序的执行效率概念是指在同一时间内执行多个任务多进程概念进程(process)是资源分配的最小单位,他是操作系统进行资源分配和调度运行的基本单位,比如:一个正在运行的程序就是一个进程,如QQ,微信等......
  • Docker与银河麒麟的兼容性问题
    Docker与银河麒麟的兼容性问题背景大过节的出差.客户想迁移环境,优先使用银河麒麟的系统.有一个需要使用容器docker运行nginx的的需求结果发现被坑的很惨.所以记录一下问题以及解决方案安装完docker后发现dockerrun提示没有权限.docker:Errorresponsefr......
  • WPF ListBox ListBox.ItemTemplate DataTemplate
    <Windowx:Class="WpfApp144.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • [方法论]再论如何读书——对过去阅读的总结与对未来的要求
    前言陆爻齐在以前曾花心思读了不少关于“如何阅读”这个主题的书,有时对某条表示“顿悟”,然后做了几次就往在一边,什么笔记法啊,阅读法啊,大多十分的繁杂,连把整个流程走完一边都十分繁琐无聊,坚持下去于陆爻齐而言就是天方夜谭。在偶然瞥见某篇文章时,突然又有所顿悟,希望能把这个简单的......
  • WPF master detail view
    <Windowx:Class="WpfApp143.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • Vue 3 的 <teleport> 组件封装为自定义指令
    <Teleport>是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的DOM结构外层的位置去。https://cn.vuejs.org/guide/built-ins/teleport.html为了更加简便灵活,可以将Vue3的<teleport>组件类似的功能封装为自定义指令。当然,但在某些情况下,直接使用<telepo......
  • 快速使用 ThreadPoolExecutor 并行加速
    总览一般的Python脚本只会用上单线程。对于IO密集型任务,用多线程加速会快得多。本文会给出一个模板,使用ThreadPoolExecutor进行并行加速。注意,由于GIL的存在,对于CPU密集型任务ProcessPoolExecutor是更好的选择。快速使用ThreadPoolExecutor请看以下模板。fro......
  • tools maven引入 maven tools.jar
    怎么用javadoc和Doclet配合解析自己想要的注释(链接)。既然是一个工具,自然就要生成可执行的jar包。这貌似是一个很合理的要求,然后坑就来了。我上篇说的是直接复制的tool.jar到lib包下面,添加进资源包就可以了,但是maven项目肯定不能这样做的,这样不规范。我在网上去搜索了tools.jar的......
  • 【leetcode 1510 石子游戏】【记忆化搜索】
    存在和对于一切的语言importjava.util.Arrays;classSolution{publicbooleanwinnerSquareGame(intn){dp=newBoolean[n+1];dp2=newBoolean[n+1];Arrays.fill(dp,null);Arrays.fill(dp2,null);dp[0]=fa......
  • 功效系数法
    功效系数法(EfficacyCoefficientMethod)是一种综合评价方法,它根据多目标规划的原理,对每个评价指标确定一个满意值和不允许值,以满意值为上限,以不允许值为下限。计算各指标实现满意值的程度,并以此确定各指标的分数,再经过加权平均进行综合,从而评价被研究对象的综合状况。这种方......