机器学习中10种损失函数大梳理!建议收藏,你一定用得到

接上篇:机器学习中10种损失函数大梳理!建议收藏,你一定用得到-CSDN博客

8、希尔伯特-施密特口袋

希尔伯特-施密特口袋(Hinge-Schmidt Pocket)是一种用于支持向量机训练的损失函数。它是一种改进的希尔伯特-施密特损失函数,旨在更好地处理线性可分和线性不可分问题。

在解释希尔伯特-施密特口袋之前,我们先来了解一下标准的希尔伯特-施密特损失函数。

希尔伯特-施密特损失函数

希尔伯特-施密特损失函数是SVM中常用的损失函数之一,用于二分类问题的训练。其主要思想是要找到一个超平面,将两个类别的数据分开,并最大化这个超平面与最近的数据点(支持向量)之间的间隔。

损失函数的公式: 

下面我们将演示如何使用Python和Scikit-Learn来执行一个简单的二分类问题,使用交叉熵损失函数来训练一个逻辑回归模型,并绘制决策边界的图形。

首先,我们需要导入必要的库和生成一些模拟数据。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression# 生成模拟数据
X, y = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=42)# 创建逻辑回归模型
model = LogisticRegression()# 训练模型
model.fit(X, y)# 用于绘制决策边界的辅助函数
def plot_decision_boundary(X, y, model):xx, yy = np.meshgrid(np.linspace(X[:, 0].min() - 1, X[:, 0].max() + 1, 100),np.linspace(X[:, 1].min() - 1, X[:, 1].max() + 1, 100))Z = model.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.8)plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k')plt.xlabel('Feature 1')plt.ylabel('Feature 2')plt.show()# 绘制决策边界
plot_decision_boundary(X, y, model)

这段代码生成了一个二维的模拟数据集,使用Scikit-Learn的逻辑回归模型进行训练,并绘制了决策边界的图形。决策边界将两个类别的数据分开。

交叉熵损失在逻辑回归模型中是默认的损失函数,它在模型训练过程中最小化损失来找到最佳的参数(权重和偏置)。

9、Huber损失

Huber损失是一种用于回归问题的损失函数,它对异常值不敏感,相比于均方误差(MSE),它对异常值的惩罚较小。Huber损失的主要思想是在距离真实值较近的情况下采用均方误差,而在距离较远的情况下采用绝对误差,这种权衡可以有效减少异常值的影响。

Huber损失的公式:

import numpy as np
import matplotlib.pyplot as plt# 定义Huber损失函数
def huber_loss(y_true, y_pred, delta):error = np.abs(y_true - y_pred)if error <= delta:return 0.5 * error**2else:return delta * error - 0.5 * delta**2# 生成一些样本数据
np.random.seed(0)
X = np.linspace(0, 10, 100)
y_true = 2 * X + 1 + np.random.normal(0, 1, 100)# 定义模型预测值
y_pred = 2 * X + 1# 计算不同delta值下的损失
deltas = [1.0, 2.0, 5.0]
losses = []for delta in deltas:loss = [huber_loss(y_true[i], y_pred[i], delta) for i in range(len(X))]losses.append(loss)# 绘制损失曲线
plt.figure(figsize=(10, 6))
for i, delta in enumerate(deltas):plt.plot(X, losses[i], label=f'Huber Loss (delta={delta})')plt.xlabel('X')
plt.ylabel('Loss')
plt.title('Huber Loss for Different Delta Values')
plt.legend()
plt.grid(True)
plt.show()

代码中,首先定义了Huber损失函数,然后生成了一些样本数据,包括真实的目标值和模型的预测值。接下来,我们计算了不同delta值下的损失,并绘制了损失曲线。从图中可以清晰地看出,随着delta值的增大,Huber损失在异常值处的惩罚逐渐减小,这是Huber损失相对于均方误差的一个重要特点。

以上示例说明了Huber损失如何在不同情况下平衡均方误差和绝对误差,以减少异常值对损失的影响。

10、 感知器损失

感知器损失函数,也称为0-1损失函数,是一种用于二元分类任务的损失函数。

它的原理非常简单:它将分类问题的输出与真实标签进行比较,如果预测正确则损失为0,否则损失为1。

感知器损失函数的公式:

import numpy as np
import matplotlib.pyplot as plt# Generate random binary classification dataset
np.random.seed(0)
X = np.random.rand(100, 2)  # 100 samples with 2 features each
y = (X[:, 0] + X[:, 1] > 1).astype(int)  # Labels: 1 if sum of features > 1, else 0# Assume our model always predicts 1 for demonstration
y_pred = np.ones_like(y)# Calculate perceptron loss
loss = np.mean(np.abs(y - y_pred))# Print the loss value
print(f"Perceptron Loss: {loss}")# Plot data points and decision boundary
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("Binary Classification Dataset and Decision Boundary")# Plot the decision boundary (a simple straight line here)
x_line = np.linspace(0, 1.2, 100)
y_line = 1 - x_line
plt.plot(x_line, y_line, 'k--', label="Decision Boundary")
plt.legend()
plt.show()

当然,在特定的场景和条件下,很大情况下需要自定义损失函数~

最后

今天介绍了10种常见损失函数的原理以及案例。

喜欢的朋友可以收藏、点赞、转发起来!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/705109.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen 开源标杆

Qwen的博客 在线体验Qwen开源版本、非常丝滑 不算量化、已经开源的Qwen1.5 版本有9个&#xff1a; 0.5B、1.8B、4B、7B、14B、32B、72B、110B、MoE-A2.7B 闭源已经发展到 Qwen-Max-0428、网页端从2.1升级到2.5 Qwen API详情 一些记录&#xff1a; 1、Qwen1.5 110B&#x…

echart树状图图表

根据后端返回的树状结构&#xff0c;渲染echart树状图&#xff0c;并且默认二级节点后是折叠的 父级引入组件 .tree_chart {width: 100%;height: calc(100% - 30px);}<div class"tree_chart"><EachartTree :treeData"allData.treeData" /><…

机试:字符串相关简单问题

字符移动问题 这道题的描述是这样的&#xff1a;输入一个字符串&#xff0c;将其中的数字字符移动到非数字字符之后&#xff0c;并保持数字字符和非数字字符输入时的顺序。例如&#xff1a;输入字符串“ab4f35gr#a6”,输出为“abfgr#a4356”。 以下使我试着敲的代码&#xff…

STK中的光照计算模型

本文简要阐述STK中光照计算的模型。 在航天任务中&#xff0c;通常需要分析地面站、飞行器在一定时间内的光照情况&#xff0c;具体包括&#xff1a; 地面站处在光照区和阴影区的具体时间范围&#xff1b;考虑地形遮挡后&#xff0c;地面站的光照区和阴影区的变化情况&#x…

SketchUp Pro 2024 mac草图大师 激活版 专业的3D建模软件

对于追求专业、高效的设计师们来说&#xff0c;SketchUp Pro 2024 for Mac无疑是最佳的选择。它提供了线条、形状、曲线、文本和图像等多种建模元素&#xff0c;让您能够根据需求自由创作。同时&#xff0c;软件还支持智能标注和尺寸功能&#xff0c;让建模过程更加精确、高效。…

加盟商小程序运用线上渠道的作用是什么

很多行业都有头部品牌&#xff0c;为了满足市场需要和品牌发展、提升营收&#xff0c;加盟模式很常见&#xff0c;通过不断宣传/品牌影响力&#xff0c;获得更多有意向的人&#xff0c;而有意向的用户也需要找到靠谱的品牌及清晰流程等。 在【雨科】平台可制作加盟商信息服务展…

通俗易懂讲乐观锁与悲观锁

浅谈乐观锁与悲观锁 乐观锁和悲观锁是Java并发编程中的两个概念。使用乐观锁和悲观锁可以解决并发编程中数据不一致性、死锁、性能差等问题&#xff0c;乐观锁与悲观锁的实行方式不同&#xff0c;所以其特性也不近相同&#xff0c;下文将详细介绍两者的特性与适用场景。 《熊…

MinIO学习笔记

MinIO学习笔记 MinIO简介Springboot整合MinioMinIO中的Bucket、ObjectMinioClient的常用API&#xff1a;操作bucketMinioClient的常用API&#xff1a;操作对象 MinIO集群部署纠删码模式部署单机多磁盘的纠删码模式部署分布式集群部署 Nginx 视频学习地址 MinIO简介 MINIO干什…

机器人非线性系统反馈线性化与解耦

机器人非线性系统的反馈线性化和解耦是控制理论中的两个重要概念&#xff0c;它们分别用于简化系统分析和设计过程&#xff0c;提高控制系统的性能。 首先&#xff0c;反馈线性化是一种将非线性系统转化为线性系统的技术。在机器人控制中&#xff0c;由于机器人本身是一个强耦…

什么是最大路径?什么是极大路径?

最近学习中&#xff0c;在这两个概念上出现了混淆&#xff0c;导致了一些误解&#xff0c;在此厘清。 最大路径 在一个简单图G中&#xff0c;u、v之间的距离 d ( u , v ) min ⁡ { u 到 v 的最短路的长度 } d(u,v) \min \{ u到v的最短路的长度 \} d(u,v)min{u到v的最短路的…

20231911 2023-2024-2 《网络攻防实践》实践九报告

1.实践内容 1.1 缓冲区 缓冲区是内存空间的一部分&#xff0c;在内存中预留了一定的存储空间&#xff0c;用来暂时保存输入和输出等I/O操作的一些数据&#xff0c;这些预留的空间就叫做缓冲区。 1.2 shellcode shellcode是一段用于利用软件漏洞而执行的代码&#xff0c;也可以…

第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组 数三角

//枚举顶点。 //不存在等边三角形 #include<bits/stdc.h> using namespace std; #define int long long const int n2e311; int a,b,c,l[n],r[n]; signed main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>a;for(int i1;i<a;i){cin>>…