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

yizhihongxing

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 Django做网页

    以下是使用Python Django做网页的完整攻略: 什么是Python Django? Python Django是一个开源的Web应用程序框架,它使用Python编程语言编写。Django提供了一组工具和库,使得开发人员可以轻松地创建、测试和部署Web应用程序。 Python Django的安装和使用 以下是Python Django的安装和使用步骤:…

    python 2023年5月14日
    00
  • Python字符串详细介绍

    Python字符串详细介绍 在Python中,字符串是一种常见的数据类型,它用于表示文本数据。在本文中,我们将详细介绍Python字符串的各种操作和方法。 创建字符串 在Python中,我们可以使用单引号、双引号或三引号来创建字符串。以下是一些示例: # 使用单引号创建字符串 string1 = ‘hello world’ # 使用双引号创建字符串 stri…

    python 2023年5月14日
    00
  • Pycharm下载pyinstaller报错:You should consider upgrading via the ‘python -m pip install –upgrade pip’ command的解决方法

    解决PyCharm下载PyInstaller报错You should consider upgrading via the ‘python -m pip install –upgrade pip’ command可以按照如下步骤进行: Step 1:在 PyCharm 中打开终端 首先,我们需要在 PyCharm 中打开终端,方法是依次点击菜单栏中的“Vi…

    python 2023年5月13日
    00
  • python操作mysql中文显示乱码的解决方法

    当我们在使用 Python 连接 MySQL 时,有时候会遇到中文显示乱码的问题。这个问题比较常见,但是只要我们正确设置编码,就能轻松解决。下面就是详细的解决方法: 步骤一:创建数据库时设置字符集 创建数据库时要设置字符集为 utf8mb4,以保证支持所有的中文字符。示例代码如下: CREATE DATABASE IF NOT EXISTS mydataba…

    python 2023年5月20日
    00
  • python调试器中的所有变量都未定义

    【问题标题】:all variables are undefined in python debuggerpython调试器中的所有变量都未定义 【发布时间】:2023-04-03 06:54:01 【问题描述】: 我在 Python 3.6 上遇到了一个非常奇怪的问题。在我的代码中间,我调用import pdb; pdb.set_trace() 来调试一些…

    Python开发 2023年4月8日
    00
  • 在Python中分别打印列表中的每一个元素方法

    当我们需要遍历一个列表,打印出每一个元素时,可以使用以下两种方法: 方法一:使用for循环和索引(index) 使用for循环和索引是最基本的遍历列表的方法,我们可以通过循环打印出列表中的每个元素。如下所示的代码: list1 = [‘apple’, ‘banana’, ‘orange’] for i in range(len(list1)): print(…

    python 2023年6月5日
    00
  • python通过opencv实现图片裁剪原理解析

    下面我将为你详细讲解“Python通过OpenCV实现图片裁剪原理解析”的完整攻略。 一、前言 在进行图片处理中,图片裁剪是一项很基础的操作,也是一项非常常见的操作。Python作为一门语言,拥有着大量的优秀的库,其中OpenCV就是一款广泛应用于图片处理的库。本文将通过OpenCV实现图片裁剪,首先我们需要了解裁剪的原理。 二、原理解析 图片裁剪是一种从图…

    python 2023年5月18日
    00
  • Python3实现计算两个数组的交集算法示例

    下面将详细讲解如何使用Python3实现计算两个数组的交集算法,具体步骤如下: 1. 确定算法思路 计算两个数组的交集,一般可以采用哈希表或者双指针的方法。对于哈希表方法,首先将其中一个数组的元素全部存入哈希表中,然后遍历另一个数组,检查其中的元素是否存在哈希表中,如果存在则将其加入到结果集中。对于双指针方法,首先将两个数组排序,然后使用两个指针分别指向两个…

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