【机器学习300问】8、为什么要设计代价函数(损失函数)?它有什么用?

一、先介绍一下线性回归模型

(1)基本概念理解

        文字解释:线性回归模型顾名思义,他处理的回归问题,是监督学习的一种。线性回归模型是一种预测模型,其基础是假设目标值和输入值之间存在线性关系。通过一条最佳拟合线(或者在多维情况下的一个超平面)对某些数据点进行拟合的过程。

        数学公式(最简单的一元线性方程):

        y=wx+b 

        其中的w是权重b是偏置,他们在机器学习中就是要学习的参数y是目标值x是输入值或者叫做特征量。线性回归模型的有效性基于一个关键假设,即输入变量与目标变量之间真实存在线性关系。如果这个假设不成立,那么模型的预测效果可能就会受到影响。

(2)实际应用举例

  • 商品销量预测:可以把销量设定为目标值,将价格、促销、节假日等因素设定为输入值,建立线性回归模型进行预测。
  • 房价预测:将房价设为目标值,将房屋的面积、位置、装修等级等因素设定为输入值,建立模型进行预测。
  • 股票价格预测:可以基于过往的股价、交易量等信息(输入值),建立线性回归模型,预测未来的股票价格(目标值)。

(3)线性回归模型中的名词或符号解释

名词或符号 解释
x 输入值、输入变量、特征值、特征量
y 目标值、目标变量、真实值
\widehat{y} 模型的预测值
m 训练集样本总数
(x, y) 某一个训练样本
模型

线性回归模型,其实就是一个函数,用符号f表示

损失函数

损失函数也可以叫代价函数,用符号J表示。模型在训练过程中用于度量预测输出与真实目标值之间差异的函数。通过优化这个函数(通常是使其最小化),机器学习算法得以调整其参数以获得更好的预测性能。

参数 就是w和b,“学习”的目标就是找出能让预测最准确的w和b

(4)怎么得到最拟合数据的线呢?

        “线”就是线性回归模型,就多项式函数,这个问题其实也可以换成,怎么判断我找到的函数预测效果最好?如果有一种指标能将预测值和真实目标值之前的差距表示出来,就能作为判断预测好坏的标准。

二、从线性回归模型中理解代价函数

        让预测值减去真实值不就是误差了嘛!但是误差应该始终是一个正数才好让人理解,所以公式可以写成这样,其中平方就是为了让误差是正的。

        (\widetilde{y} - y)^{2}

        但这只有一个点的误差,我要是能在整体上把握这个线与所有点的误差,也就是说我要让我的所有样本点对于这个线都有最小的差距,这样就能真的判断是否真的预测精准了,于是可以用累加和处理。

        \sum_{i=1}^{m}(f(x^{i})-y^{i})^{2}

        这样我就得到了总误差,但我只是想预测下一个具体的x,他对应的y,所以还得除上m变成平均误差,这就是均方误差。

        \frac{1}{m}\sum_{i=1}^{m}(f(x^{i})-y^{i})^{2}

        我们给他取一个名字J函数,为了后面梯度下降求导计算方便,给他添加除个2,于是线性回归模型的损失函数最常用的均方误差 (Mean Squared Error, MSE)就是如下形式

        J(w,b) = \frac{1}{2m}\sum_{i=1}^{m}(f_{w,b}(x^{i})-y^{i})^{2}

y = wx的线性回归模型拟合示意图

三、代价函数的作用

        代价函数(也叫损失函数或成本函数)在机器学习模型中起着至关重要的作用。它用来衡量模型预测的准确性。

        换句话说,代价函数可以帮助我们理解模型的性能如何,模型的预测值与真实值相比差距有多大。代价函数有两个主要的作用:

(1)性能衡量

        代价函数为我们提供了一种方法来衡量预测值和真实值之间的差距。如果模型的预测值与实际值很接近,代价函数的值会很小,反之则很大。

(2)参数优化

        在训练机器学习模型的过程中,我们希望找到一组参数使得代价函数达到最小值。这通常通过优化算法(如梯度下降等)来实现。根据代价函数对参数的梯度,我们可以调整参数,使得模型的预测结果更接近真实值。

        因此,代价函数是机器学习中模型评估和优化的关键,它帮助我们量化模型的误差,并引导我们如何调整模型的参数以改进其性能。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-19 20:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-19 20:10:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-19 20:10:02       82 阅读
  4. Python语言-面向对象

    2024-01-19 20:10:02       91 阅读

热门阅读

  1. layui laydate选择时间的回调方法

    2024-01-19 20:10:02       48 阅读
  2. SpringMVC mss整合

    2024-01-19 20:10:02       36 阅读
  3. 【蓝桥杯/动态规划】数的计算

    2024-01-19 20:10:02       53 阅读
  4. SpringMVC下半篇之文件上传

    2024-01-19 20:10:02       43 阅读
  5. 【git】解决网络连接问题

    2024-01-19 20:10:02       50 阅读
  6. OpenHarmony基于HDF简单驱动开发实例

    2024-01-19 20:10:02       42 阅读
  7. LeetCode.82 删除排序链表中的重复元素 二

    2024-01-19 20:10:02       59 阅读
  8. leetcode-杨辉三角

    2024-01-19 20:10:02       65 阅读
  9. CSS中的特效-详解

    2024-01-19 20:10:02       44 阅读
  10. Flutter PageView 参数介绍及使用

    2024-01-19 20:10:02       52 阅读