机器学习——损失函数

【说明】文章内容来自《机器学习——基于sklearn》,用于学习记录。若有争议联系删除。

1、简介

        损失函数(loss function)又称为误差函数(error function),是衡量模型好坏的标准,用于估量模型的预测值与真实值的不一致程度,是一个非负实值函数。损失函数的一般表示为L(y,f(x)),用以衡量真实值y与预测值f(x)不一致的程度,一般越小越好。

        损失函数对模型进行评估,并且为模型参数的优化提供了方向。损失函数的选取依赖于参数的数量、异常值、机器学习算法、梯度下降的效率、导数求取的难易和预测的置信度等。
        损失函数与代价函数(cost function)相似,可以互换使用。区别在于,损失函数用于单个训练样本。而代价函数是整个训练数据集的所有样本误差的平均损失。
        损失函数有回归损失(regression loss)和分类损失(classification loss)两类。

2、回归损失

2.1 MAE

        平均绝对误差(Mean Absolute Error, MAE)又称L1损失,是指预测值与真实值之间平均误差的大小,反映了预测值误差的实际情况,用于评估预测结果和真实数据集的接近程度。其值越小,说明拟合效果越好。
平均绝对误差的表达形式为

MAE=\frac{1}{n}\sum_{i=1}^{n}|\hat{y_{i}}-y_{i}|
        MAE 函数示例,其中,真实目标值为100,预测值为-10 000~10000。预测值(Predictions)为100时,MAE 损失(MAE Loss)达到其最小值。损失范围为[0,\infty]。

Sklearn提供了mean_absolute_error函数用于求平均绝对误差,格式如下:

sklearn.metrics.mean_absolute_error(y_true, y_pred)

【参数说明】

  • y_true:真实值。
  • y_pred:预测值。

2.2 MSE

        均方误差(Mean Squared Error,MSE)又称L2损失,是最常用的回归损失评估指标,反映了观测值与真值偏差的平方之和与观测次数的比值,是预测值与真实值之差的平方之和的平均值。其值越小,说明拟合效果越好。
        均方误差的表达形式为

MSE=\frac{1}{n}\sum_{i=1}^{n}(\hat{y_{i}}-y_{i})^{2}
        MSE 函数示例,其中,真实目标值为100,预测值为一10 000~10 000。预测值(Predictions)为100时,MSE 损失(MSE Loss)达到其最小值。损失范围为[0,\infty]。

Sklearn提供了mean_squared_error函数用于求均方误差,格式如下:

sklearn.metrics.mean_squared_error(y_true, y_pred)

【参数说明】

  • y_true:真实值。
  • y_pred:预测值。

2.3 RMSE

        RMSE 是根均方误差(Root Mean Square Error),其取值范围为[0,+\infty)。其表达为:

RMSE=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(\hat{y_{i}}-y_{i})^{2}}
        取均方误差的平方根可以使得量纲一致,这对于描述和表示有意义。

2.4 R2分数

        分类问题用F1_score进行评价。在回归问题中,相应的评价标准是决定系数(coefficient of determination),又称为R^{2}分数,简称R^{2}。使用同一算法模型解决不同的问题,由于数据集的量纲不同,MSE,RMSE 等指标不能体现模型的优劣。而R^{2}分数的取值范围是[0,1],越接近1,表明模型对数据拟合较好;越接近0,表明模型拟合较差。

Sklearn提供了r2_score函数用于表示决定系统,格式如下:

sklearn.metrics.r2_score(y_true, y_pred)

回归损失示例:

import numpy as np
from sklearn import metrics
from sklearn.metrics import r2_score
y_true = np.array([1.0,5.0,4.0,3.0,2.0,5.0,-3.0])
y_pred = np.array([1.0,4.5,3.5,5.0,8.0,4.5,1.0])
#mae
print("MAE:", metrics.mean_absolute_error(y_true, y_pred))
#MSE
print('MSE:', metrics.mean_squared_error(y_true, y_pred))
#RMSE
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_true, y_pred)))
#R Squared
print('R Square:', r2_score(y_true, y_pred))

【运行结果】

2.5 Huber损失

        均方损失(MSE)对于异常点进行较大惩罚,不够健壮。平均绝对损失(MAE)对于较多异常点表现较好,但在y-f(x)=0处不连续可导,不容易优化。
        L1损失函数与L2损失函数对比如表所示。

L1损失函数L2损失函数
健壮不够健壮
不稳定解稳定解
可能多个解总是一个解

        Huber 损失是对MSE 和MAE 缺点的改进。

当|y-f(x)|小于指定的\delta值时,Huber 损失变为平方损失;

当大于\delta值时,Huber 损失类似于绝对值损失。回归损失函数对比如图所示。

sklearn.linear_model提供了HuberRegressor函数用于Huber损失,格式如下:

huber = HuberRegressor()

示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import HuberRegressory_train = np.array([368, 340, 376, 954, 331, 856])
x_train = np.array([1.7, 1.5, 1.3, 5, 1.3, 2.2])
plt.scatter(x_train, y_train, label = 'Train Samples')
x_train = x_train.reshape(-1,1)#reshape(-1,1)转换成1列:
#L2损失函数
lr = LinearRegression()
lr.fit(x_train, y_train)
a = range(1,6)
b = [lr.intercept_ + lr.coef_[0] * i for i in a]#.intercept_截距;.coef_权重
plt.plot(a, b, 'r', label = "Train Samples")
#Huber 损失函数
huber = HuberRegressor()
huber.fit(x_train, y_train)
a = range(1,6)
b = [huber.intercept_ + huber.coef_[0] * i for i in a]
plt.plot(a, b, 'b', label = 'Train Samples')print('L2损失函数:y = {:.2f} +{:.2f} * x'.format(lr.intercept_, lr.coef_[0]))print("huber 损失函数:y = {:.2f} +{:.2f} * x".format(huber.intercept_, huber.coef_[0]))

【运行结果】

3、分类损失

3.1常见损失函数

  1. 平方损失函数。
  2. 绝对误差损失函数。
  3. 0-1损失函数。
  4. 对数损失函数。
  5. 铰链损失函数。

3.2 平方损失函数

        平方损失(squared loss)函数计算实际值和预测值之差的平方,又称为L2损失函数,一般用在线性回归中,可以理解为最小二乘法。其表达形式为

L = (y-f(x))^{2}
相应的成本函数是这些平方误差的平均值(MSE)。

3.3 绝对误差损失函数

        绝对误差损失(absolute error loss)函数计算预测值和实际值之间的距离,用在线性回归中。绝对误差损失函数也称为L1损失函数。绝对误差损失函数的表达形式为

L = |y-f(x)|
相应的成本函数是这些绝对误差的平均值(MAE)。

3.4 0-1损失函数

        0-1损失(zero-one loss)函数当预测标签和真实标签一致时返回0,否则返回1。0-1损失函数的表达形式为


Sklearn 提供了zero_one_loss函数,格式如下:

sklearn.metrics.zero_one_loss(y_true, y_pred, normalize)

【参数说明】

  • y_true:真实值。
  • y_pred:预测值。
  • normalize:取值为True,返回平均损失;取值为 False,返回损失之和。

示例:

from sklearn.metrics import zero_one_loss
import numpy as np
#二分类问题
y_pred = [1,2,3,4]
y_true = [2,2,3,4]
print(zero_one_loss(y_true, y_pred))
print(zero_one_loss(y_true, y_pred, normalize = False))
#多分类问题
print(zero_one_loss(np.array([[0,1],[1,1]]), np.ones((2,2))))
print(zero_one_loss(np.array([[0,1],[1,1]]), np.ones((2,2)), normalize = False))

3.5 对数损失函数

        当预测值和实际值的误差符合高斯分布,使用对数损失(logarithmic loss)函数,其主要应用在逻辑回归中。对数损失函数的数学表达式是如下分段函数:


        当y=1时,表示真实值属于这个类别;

        当y=0时,表示真实值不属于这个类别。
Sklearn提供了log_loss函数,语法如下:

sklearn.metrics.log_loss(y_true,y_pred)

示例:

from sklearn.metrics import log_loss
y_true = [0,0,1,1]
y_pred = [[0.9, 0.1], [0.8, 0.2], [0.3, 0.7], [0.01, 0.99]]
print(log_loss(y_true, y_pred))

3.6 铰链损失函数

        铰链损失函数(hinge Loss)函数用于评价支持向量机。Sklearn 提供了hinge_loss函数,格式如下:

sklearn.metrics.hinge_loss(y_true,y_pred)

示例:

from sklearn import svm
from sklearn.metrics import hinge_loss
x = [[0],[1]]
y = [-1, 1]
est = svm.LinearSVC(random_state = 0)
print(est.fit(x, y))
pred_decision = est.decision_function([[-2], [3], [0.5]])
print(pred_decision)
print(hinge_loss([-1, 1, 1], pred_decision))

【运行结果】

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

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

相关文章

基于SVM的冷却剂流量预测,基于支持向量机SVM的冷却剂流量预测

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接: 基于SVM的冷却剂流量预测,基于支持向量机SVM的冷却剂流量预测(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835…

java itext5 生成PDF并填充数据导出

java itext5 生成PDF并填充数据导出 依赖**文本勾选框****页眉**&#xff0c;**页脚****图片**实际图 主要功能有文本勾选框&#xff0c;页眉&#xff0c;页脚&#xff0c;图片等功能。肯定没有专业软件画的好看&#xff0c;只是一点儿方法。仅供参考。 依赖 <!--pdf-->&…

12.18构建哈夫曼树(优先队列),图的存储方式,一些细节(auto,pair用法,结构体指针)

为结构体自身时&#xff0c;用.调用成员变量&#xff1b;为结构体指针时&#xff0c;用->调用成员变量 所以存在结构体数组时&#xff0c;调用数组元素里的成员变量&#xff0c;就是要用. 结构体自身只有在new时才会创建出来&#xff0c;而其指针可以随意创建 在用new时&…

Android Security PIN 相关代码

开发项目遇到一个问题&#xff0c;具体描述及复制步骤如下&#xff1a; 就是开启"Enhanced PIN privacy"(增强的PIN隐私)的时候输入秘密的时候还是会显示数字 如下图&#xff0c;应该是直接是“.” 不应该出现PIN 密码 想要的效果如下图&#xff1a; 设置的步骤如下图…

RabbitMQ 和 Kafka 对比

本文对RabbitMQ 和 Kafka 进行下比较 文章目录 前言RabbitMQ架构队列消费队列生产 Kafka本文小结 前言 开源社区有好多优秀的队列中间件&#xff0c;比如RabbitMQ和Kafka&#xff0c;每个队列都貌似有其特性&#xff0c;在进行工程选择时&#xff0c;往往眼花缭乱&#xff0c;不…

Flask 账号详情展示

Flask 账号详情展示 这段代码是一个基于Flask框架的Python应用程序。 它包含了两部分代码&#xff1a;Python代码和HTML代码。 web/templates/common/tab_account.html <div class"row border-bottom"><div class"col-lg-12"><div cla…

多态-多态的基本概念-类和对象

多态的基本 #include<iostream> using namespace std; //动物类 class Animal { public:virtual void Speak(){cout << " 动物在噢噢叫" << endl;} }; //猫类 class Cat :public Animal { public:void Speak(){cout << "小猫在噢噢叫&…

C++系列-第3章循环结构-26-认识do-while语句

C系列-第3章循环结构-26-认识do-while语句 在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 对于 while 语句而言&#xff0c;如果不满足条件&#xff0c;则不能进入循环。但有时候我们需要即使不满足条件&#xff0c;也至少执行一次。 do-while循环…

CORS靶场安装测试记录

目录 环境 搭建 源码地址 环境 kali 搭建 1. 源码存放 /var/www/html 2. 创建数据库 mysql create database ica_lab; show databases; 3. SQL命令创建一个名为“billu”的新用户 create user admin@% identified by gesila; flush privileges; 4. 设置用户可远程登…

深入理解技术内容运营

技术内容营销 营销是一种商业策略&#xff0c;涉及识别客户需求并确定如何最好地满足这些需求。换句话说&#xff0c;它旨在确保企业或产品以吸引目标受众的方式定位&#xff0c;鼓励他们购买。该策略包含多个方面&#xff0c;包括市场研究、品牌建设、产品开发、销售、促销和…

购买腾讯云服务器需要多少钱?购买腾讯云服务器方法教程

腾讯云轻量应用服务器购买指南&#xff0c;有两个入口&#xff0c;一个是在特价活动上购买&#xff0c;一个是在轻量应用服务器官方页面购买&#xff0c;特价活动上购买价格更便宜&#xff0c;轻量2核2G3M带宽服务器62元一年起&#xff0c;阿腾云atengyun.com分享腾讯云轻量应用…

LeetCode 之算法篇(1)

本篇文章做leetcode top 100的的一些内容总结&#xff0c;以供后面复习使用 文章目录 题目41. 缺失的第一个正数 &#xff08;未掌握&#xff09;合并区间轮转数组238. 除自身以外数组的乘积 题目 41. 缺失的第一个正数 &#xff08;未掌握&#xff09; 这道题的关键点在于对桶…

Leetcod面试经典150题刷题记录 —— 区间篇

Leetcod面试经典150题刷题记录 —— 区间篇 1. 汇总区间2. 合并区间3. 插入区间4. 用最少数量的箭引爆气球 1. 汇总区间 题目链接&#xff1a;汇总区间 - leetcode 题目描述&#xff1a; 给定一个 无重复元素 的 有序 整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序…

算法导论复习纲要

函数 1. 上界下界&#xff0c;紧确界的定义 2. 求解递推式&#xff0c;代入法&#xff0c;递归树法&#xff0c;主方法 分治算法 动态规划 1. 切割钢条&#xff1a;递归方法&#xff0c;动态的自上而下&#xff0c; 2. 矩阵乘法&#xff1a;最优子结构性的证明&#xff0c…

Go语言学习

1、运行和解析 go run 命令已包含了编译和运行。它会先在一个临时目录编译程序&#xff0c;然后执行完后清理掉. 如果在run的后面加上 --work参数来查看临时目录。 go run --work main.go也可以通过go build命令来编译代码&#xff0c;执行后会生成一个可以执行文件&#xff…

HIVE笔记

表关联 内连接&#xff08;INNER JOIN&#xff09; 返回两个表中满足关联条件的记录。 SELECT * FROM t1 INNER JOIN t2 ON t1.col1 t2.col2;左连接&#xff08;LEFT JOIN&#xff09; 返回左表中的所有记录&#xff0c;以及右表中满足关联条件的记录。 SELECT * FRO…

如何本地部署Nextcloud结合cpolar搭建专属私有云盘远程访问(内网穿透)

文章目录 摘要1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文件共享服…

如何用matlab制作游戏?

在MATLAB中制作游戏可以采用图形用户界面&#xff08;GUI&#xff09;或使用MATLAB的绘图和交互功能。以下是一些制作游戏的基本步骤&#xff1a; 使用 MATLAB GUI 制作游戏 打开 GUIDE&#xff08;GUI 开发环境&#xff09; 打开 MATLAB 并在命令行中输入 guide 打开 GUIDE。…

使用Rollup 搭建开发环境

1 什么是Rollup Rollup 是一个用于 JavaScript 的模块打包工具&#xff0c;它将小的代码片段编译成更大、更复杂的代码&#xff0c;例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式&#xff0c;而不是以前的 CommonJS 和 AMD 等特殊解决方案。(开…

算法设计与分析 | 矩阵连乘

题目描述 一个n*m矩阵由n行m列共n*m个数排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵&#xff0c;运算量为nmp。 矩阵乘法满足结合律&#xff0c;A*B*C可以表示成(A*B)*C或者是A*(B*C)&#xff0c;两者的运算…