凸损失函数比较

Beginner

This tutorial is from open-source community. Access the source code

简介

在机器学习中,损失函数用于衡量预测输出与实际输出之间的差异。scikit-learn 库为分类问题提供了各种凸损失函数。在本实验中,我们将可视化并比较其中一些损失函数。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到笔记本标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

导入库并定义函数

我们首先导入必要的库,并定义修改后的 Huber 损失函数。

import numpy as np
import matplotlib.pyplot as plt

def modified_huber_loss(y_true, y_pred):
    z = y_pred * y_true
    loss = -4 * z
    loss[z >= -1] = (1 - z[z >= -1]) ** 2
    loss[z >= 1.0] = 0
    return loss

定义决策函数的范围

我们定义决策函数 f(x) 的取值范围。

xmin, xmax = -4, 4
xx = np.linspace(xmin, xmax, 100)

绘制损失函数

我们使用 matplotlib 库绘制 scikit-learn 支持的各种凸损失函数。

lw = 2
plt.plot([xmin, 0, 0, xmax], [1, 1, 0, 0], color="gold", lw=lw, label="Zero-one loss")
plt.plot(xx, np.where(xx < 1, 1 - xx, 0), color="teal", lw=lw, label="Hinge loss")
plt.plot(xx, -np.minimum(xx, 0), color="yellowgreen", lw=lw, label="Perceptron loss")
plt.plot(xx, np.log2(1 + np.exp(-xx)), color="cornflowerblue", lw=lw, label="Log loss")
plt.plot(xx, np.where(xx < 1, 1 - xx, 0) ** 2, color="orange", lw=lw, label="Squared hinge loss")
plt.plot(xx, modified_huber_loss(xx, 1), color="darkorchid", lw=lw, linestyle="--", label="Modified Huber loss")
plt.ylim((0, 8))
plt.legend(loc="upper right")
plt.xlabel(r"Decision function $f(x)$")
plt.ylabel("$L(y=1, f(x))$")
plt.show()

解读图表

我们解读该图表并分析每个损失函数的行为。

总结

在本实验中,我们可视化并比较了 scikit-learn 支持的一些凸损失函数。理解损失函数在机器学习中至关重要,因为它们在训练过程中用于优化模型参数。