Python损失函数完全指南:从理论到实战实现

在Python中,损失函数是任何机器学习模型中不可或缺的一部分。这些函数告诉我们模型的预测输出与实际输出的差异程度有多大。

有多种计算这个差异的方法。在本教程中,我们将介绍一些较为常见的损失函数。

在本教程中,我们将讨论以下四种损失函数:

  1. 均方差
  2. 均方根误差
  3. 平均绝对误差
  4. 交叉熵损失

在这四种损失函数中,前三种适用于回归模型,而最后一种适用于分类模型。

在Python中实施损失函数

让我们来看看如何在Python中实现这些损失函数。

1. 均方误差(Mean Square Error,简称MSE)

均方误差(MSE)是通过预测值与实际观察值之差的平方的平均值来计算的。数学上可以表示如下:

Python中的均方误差损失函数

以下是用Python实现均方误差(MSE)的代码:

import numpy as np
def mean_squared_error(act, pred):

   diff = pred - act
   differences_squared = diff ** 2
   mean_diff = differences_squared.mean()
   
   return mean_diff

act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])

print(mean_squared_error(act,pred))

输出:

0.04666666666666667

您还可以使用sklearn中的mean_squared_error来计算MSE。该函数的工作原理如下:

from sklearn.metrics import mean_squared_error
act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])
mean_squared_error(act, pred)

输出结果:

0.04666666666666667

2. 均方根误差(Root Mean Square Error, RMSE)

均方根误差(RMSE)是以均方误差的平方根计算而得。从数学上讲,我们可以表示为以下形式:

Python中的均方根误差损失函数

RMSE的Python实现如下:

这是文章《Python中的损失函数 – 简单实现》的第2部分(共4部分)。

import numpy as np
def root_mean_squared_error(act, pred):

   diff = pred - act
   differences_squared = diff ** 2
   mean_diff = differences_squared.mean()
   rmse_val = np.sqrt(mean_diff)
   return rmse_val

act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])

print(root_mean_squared_error(act,pred))

输出结果:

0.21602468994692867

你也可以使用sklearn库中的mean_squared_error函数来计算均方根误差(RMSE)。下面我们来看看如何使用该函数实现RMSE计算。

from sklearn.metrics import mean_squared_error
act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])
mean_squared_error(act, pred, squared = False)

输出结果:

0.21602468994692867

如果将参数’squared’设置为True,则该函数返回均方误差(MSE)值。如果设置为False,则该函数返回均方根误差(RMSE)值。

3. 平均绝对误差(MAE)

平均绝对误差(MAE)是预测值与实际观测值之间绝对差异的平均值。从数学角度可以表示为:

Python中的MAE损失函数

下面是MAE的Python实现:

import numpy as np
def mean_absolute_error(act, pred):
    diff = pred - act
    abs_diff = np.absolute(diff)
    mean_diff = abs_diff.mean()
    return mean_diff

act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])
mean_absolute_error(act,pred)

输出结果:

0.20000000000000004

您还可以使用sklearn库中的mean_absolute_error函数(平均绝对误差函数)来计算MAE。

from sklearn.metrics import mean_absolute_error
act = np.array([1.1,2,1.7])
pred = np.array([1,1.7,1.5])
mean_absolute_error(act, pred)

输出结果:

0.20000000000000004

4. Python 中的交叉熵损失函数

交叉熵损失函数也被称为负对数似然函数。它最常用于分类问题。分类问题是指将一个示例归类为两类以上之一的问题。

让我们来看看如何计算在二元分类问题中的错误率。

让我们考虑一个分类问题,模型试图对狗和猫进行分类。

以下是用Python编写的查找错误的代码。

from sklearn.metrics import log_loss
log_loss(["狗", "猫", "猫", "狗"],[[.1, .9], [.9, .1], [.8, .2], [.35, .65]])

输出:

0.21616187468057912

我们正在使用scikit-learn库中的log_loss方法。

函数调用中的第一个参数是每个输入样本的正确类别标签列表。第二个参数是模型预测的概率分布列表。

概率分布的格式如下:

[P(狗), P(猫)]

结论

本教程介绍了Python中的损失函数相关知识。我们详细讲解了用于回归和分类问题的各种损失函数。希望您在学习过程中有所收获!

bannerAds