10个Python常用的损失函数及代码实现分享

10个Python常用的损失函数及代码实现分享

在机器学习中,损失函数是用于衡量模型预测结果与真实结果之间差异的函数。在Python中,有许多常的损失函数,下面是10个Python常用的损失及代码实现分享:

1. 均方误差(Mean Squared Error)

均误差是最常用的损失函数之一,它衡模型预测结果与真实结果之间的平均差异。均方误差越小,表示模型的预测结果越接近真实结果均方误差的公式如下:

$$MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y_i})^2$$

其中,$y_i$表示真结果,$\hat{y_i}$表示模型预测结果,$n$表示本数量。下是均方误差的Python代码实现:

import numpy as np

def mean_squared_error(y_true, y_pred):
    return np.mean(np.square(y_true - y_pred))

示例:

y_true = [1, 2, 3, 4, 5]
y_pred = [1.5, 2.5, 3.5, 4.5, 5.5]

mse = mean_squared_error(y_true, y_pred)
print(mse)  # 输出 0.25

在上述示例中,我们使用mean_squared_error()计算了y_true和y_pred`之间的均方误差。结果为0.25,表示模型的预测结果与真实结果之间的平均差异较小。

2. 平均绝对误差(Mean Absolute Error)

平均绝对差是另一种常用的损失,它衡量模型预测结果与真实结果之间的平均绝对差异。平均绝对误差越小,表示模型的预测结果越接近真实结果。平均绝误差的公式如下:

$$MAE = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y_i}|$$

其中,$y_i$表示真实结果,$\hat{y_i}$表示模型预测结果,$n$表示样本数量。下面是平均绝对误差的Python代码实现:

import numpy as np

 mean_absolute_error(y_true, y_pred):
    return np.mean(np.abs(y_true - y_pred))

示例:

y_true = [1, 2, 3, 4, 5]
y_pred = [1.5,2.5 3.5, 4.5, 5.5]

mae = mean_absolute_error(y_true, y_pred)
print(mae)  # 输出 0.5

在上述示例中,我们mean_absolute_error()函数计算了y_truey_pred之间的平均绝对差。结果为0.5,表示模型的预测结果与真实结果之间的平均绝对差异较小。

3. 交叉熵损失函数(Cross-Entropy Loss)

交叉熵损失函数是用于分类问题的一种常用损失函数,它衡量模型预测结果与真实结果之间的差异。交叉熵损失函数越小,表示模型预测结果越接近真实结果。交叉熵损失函数的公式如下:

$$CE = -\frac{1}{n}\sum_{i=1}^{n}(y_i\log(\hat{y_i}) + (1-y_i)\log(1hat{y_i}))$$

其中,$y_i$表示真实结果,$\hat{y_i}$表示模型预测结果,$n$表示样本。下面是交叉熵损失函数的Python代码实现:

import numpy as np

def cross_entropy_loss(y_true, y_pred):
    return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))

示例:

y_true = [0, 1, 0, 0, 1]
y_pred = [0.1, 0.9, 0.2, 0.3, 0.8]

ce_loss = cross_entropy_loss(y_true, y)
print(ce_loss)  # 输出 0.385

在上述示例中,我们使用cross_entropy_loss()函数计算了y_truey_pred之间的交叉熵损失。结果为0.385,表示模型的预测与真实结果之间的差异较小。

4. 对数损失函数(Log Loss)

对数损失函数是另一种用于分类问题的常用损失函数,它衡量模型预测与真实结果之间的差异。对数损失函数越小,表示模型的预测结果越接真实结果。对数损失函数的公式如下:

$$LogLoss = -\frac1}{n}\sum_{i=1}^{n}(y_i\log(\hat{y_i}) + (1-y_i)\log(1-\hat{y_i$$

其中,$y_i$表示真实结果,$\hat{_i}$表示模型预测结果,$n$表示样本数量。下面是对数损失函数的Python代码实现:

import numpy as np

def log_loss(y_true y_pred):
    -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))

示例:

y_true = [0, 1, 0, 0, 1]
_pred = [01, 0.9, 0.2, 0.3, 0.8]

log = log_loss(y_true, y_pred)
print(log_loss)  # 输出 0.385

在上述示例中,我们使用log_loss()函数计算了y_truey_pred之间的对数损失。结果0.385,表示模型的预测结果与真实结果之间的差较小。

5. Hinge损失函数

Hinge损失函数是用于支向量机(SVM)的一种常用损失函数,它衡量模型预测结果与真实结果之间的差异。Hinge损函数越小,模型的预测结果越接近真实结果。Hinge损失函数的公式如下:

$$HingeLoss = \max(0, 1 - y_i\hat{y_i})$$

其中,y_i$表示真实结果,$\hat{y_i}$表示模型预测结果。下面是Hinge损失函数的Python代码实现:

import numpy as np

def hinge_loss(y_true, y_pred):
    return np.mean(np.maximum(0, 1 - y_true * y_pred))

示例:

y_true = [1, 1, -1, -1]
y_pred = [0.5, 0.8, -0.3, -0.7]

hinge_loss = hinge_loss_true, y_pred)
print(hinge_loss)  # 输出 0.475

在上述示例中,我们使用hinge_loss()函数计算了y_truey_pred之间的Hinge损失。结果别为0.,表示模型的预测结果与实结果之间的差异较小。

6. Huber损函数

Huber损失函数是一种滑的损失函数,它可以同时处理离群值和非离群值。Huber损失函数的公式如下:

$$L_{\delta}(y_i, \hat{y_i}) = \begin{cases}
\frac{1}{2}(y_i - \hat{_i})^2, & |y_i \hat{y_i}| \leq \delta \
\delta(|y_i - \hat{y_i}| - \frac{1}{2}\delta), & |y_i - \hat{y_i}| > \delta
\end{cases}$$

其中,$y_i$表示实结果,$\hat{y_i}$表示模型预测结果,$\delta$是一个超参数,用于控制平滑程度。下面是Huber损失函数的Python代码实现:

import numpy as np

def huber_loss(y_true, y_pred, delta=1.0):
    error = y_true - y_pred
    abs_error = np.abs(error)
    quadratic = np.minimum(abs_error, delta)
    linear = abs_error - quadratic
    return np.mean(0.5 * quadratic ** 2 + delta * linear)

示例:

y_true = [1, 2, 3, 4, 5]
y_pred = [1.5, 2.5, 3.5, 4.5, 5.5]

huber_loss = huber_loss(y, y_pred, delta=1.0)
print(huber_loss)  # 输出 0.25
`

在上述示例中,我们使用`huber_loss()`函数计算了`y_true`和`y_pred`之间的Huber损失。结果为0.25,表示模型的预测结果与真实结果之间的差异较小。

 7. Kullback-Leibler散度(KL散度)

Kullback-Leibler散度是一种用于衡量两个概率分布间差异的函数。在机器学习中,KL散度常用于衡量模型预测结果与真实结果之间的差异。KL散度越小,表示模型的预测结果越接近真实结果。KL散度的公式如:

$$KL(p||q) = \sum_{i}p(i)\log\frac{p(i)}{q(i)}$$

其中,$p$表示真实布,$q$表示模型预测分布。下面是散度的Python代码实现:

```python
import numpy as np

def kl_divergence(p, q):
    return np.sum(p * np.log(p / q))

示例:

p = [0.2, 0.3, 0.5]
q = [.3, 0.3, 0.4]

kl_div = kl_divergence(p, q)
print(kl_div)  # 输出 0.020

在上述示例中,我们使用_divergence()函数计算了$p$和$q$之间的KL散度。结果0.020,表示模型的预测结果与真实结果之间的差异较小。

8. Wasserstein距离

Wasserstein距离是一种用于衡量两个概率分布之间差异的函数。在机器学习中,Wasserstein距离用于衡量生成模型生成的样本分布真实分布之间的差异。Wasserstein距离越小,表示生成模型生成的样本分布越接近真实分布。Wstein距离的公式如下:

$$W(p, q) = \inf_{\gamma \in \Pi(p, q)}\mathbb{E}_{(x, y) \sim \gamma}[|x - y|]$$

其中,$p$表示真实分布,$q$表示生成模型生成的样本分布,$\Pi(p, q)$表示$p$和$q$的联合分布。下面是Wasserstein距离的Python代码实现:

import numpy as np
from scipy.stats import wasserstein_distance

def wasserstein_distance(p, q):
    return wasserstein_distance(p, q)

示例:

p = [0.2, 0.3, 0.5]
q = [0.3, 0.3, 0.4]

w_distance =asserstein_distance(p, q)
print(w_distance)  # 输出 0.100

在上述示例中,我们使用wasserstein_distance()函数计算了$p$和$q$之间的Wasserstein距离。结果为0.100,表示生成模型生成的样本分布与真实分布之间的差异较小。

9.AN损失函数

GAN(生成对抗网络)是一种常用的生成模型,它包含一个生成和一个判别器。生成器用于生成样本,判别器

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:10个Python常用的损失函数及代码实现分享 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 一篇文章带你了解python标准库–math模块

    一篇文章带你了解Python标准库–math模块 简介 math 模块是 Python 标准库中的一个数学模块,提供了许多数学函数,如三角函数、幂函数、对数函数等等,很多时候我们在处理数据或进行科学计算时会用到这些数学函数。本文将以实例的方式,介绍 math 模块中一些比较常用的函数。 函数 acos(x) 返回 x 的反余弦值,其中参数 x 的取值范围在…

    python 2023年5月14日
    00
  • python实现监听键盘

    下面是详细讲解“python实现监听键盘”的攻略,分为以下几个步骤: 步骤一:安装必要的库 使用Python实现监听键盘需要安装pynput库。可以通过以下命令进行安装: pip install pynput 步骤二:创建监听器 需要创建一个函数用于监听键盘输入,以下是一个示例: from pynput.keyboard import Key, Listen…

    python 2023年6月2日
    00
  • python爬取微信公众号文章

    Python爬取微信公众号文章是一个非常有用的应用场景,可以帮助用户快速获取自己或他人的公众号文章。本攻略将介绍Python爬取微信公众号文章的完整攻略,包括数据获取、数据处理、数据存储和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取网页数据。以下是获取微信公众号文章页面的示例: import requests url = ‘…

    python 2023年5月15日
    00
  • pycharm自动生成文件注释和函数注释

    当我们在PyCharm中编写Python代码时,编写规范的代码注释是非常有用的。它可以帮助其他程序员更容易地理解我们的代码,并且可以为后续修改和维护带来许多便利。在PyCharm中,我们可以通过自动添加代码注释的方式来提升编码效率。 下面是关于如何在PyCharm中自动生成文件注释和函数注释的完整攻略: 1. 自动生成文件注释 文件注释就是指在Python代…

    python 2023年6月6日
    00
  • pip报错“ValueError: invalid literal for int() with base 10: ‘3.6’”怎么处理?

    当使用 pip 安装 Python 包时,可能会遇到 “ValueError: invalid literal for int() with base 10: ‘3.6’” 错误。这个错误通常是由于 Python 版本号格式不正确导致的。以下是详细讲解 pip 报错 “ValueError: invalid literal for int() with ba…

    python 2023年5月4日
    00
  • 把vgg-face.mat权重迁移到pytorch模型示例

    把VGG-Face.mat权重迁移到PyTorch模型需要经过以下步骤: 步骤1:下载VGG-Face.mat文件 可以在官方网站(http://www.robots.ox.ac.uk/~vgg/software/vgg_face/)上下载VGG-Face.mat权重文件。 步骤2:使用scipy.io加载VGG-Face.mat文件 要加载VGG-Face…

    python 2023年6月3日
    00
  • tesseract-ocr使用以及训练方法

    Tesseract-OCR使用指南 Tesseract-OCR 是一款OCR字符识别工具,可用于将印刷或手写文字转换为文本或数字字符。本文旨在介绍 tesseract-ocr 的基本使用方法及训练方法。 安装 Tesseract-OCR Linux bashsudo apt-get install tesseract-ocr MacOS bashbrew i…

    python 2023年5月19日
    00
  • python实现处理Excel表格超详细系列

    我来为您详细讲解“Python实现处理Excel表格超详细系列”的完整实例教程。 概述 本系列教程将介绍如何使用Python处理Excel表格。这可能是每个数据科学家和分析师的必修课,因为Excel表格是我们处理数据的常见工具之一。在本系列教程中,我们将介绍Python在Excel数据处理中的作用,包括读取、写入、操作和分析Excel表格的能力。我们将使用一…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部