【人工智能原理自学】方差代价函数:知错

news2024/11/19 17:25:57

😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。
🔔本文讲解一元一次函数感知器:如何描述直觉,一起卷起来叭!

目录

  • 一、如何评估误差?
  • 二、概率和统计
  • 三、如何挪动到最低点?
  • 四、代码实现

一、如何评估误差?

你可能会想:

1、通过差值来评价误差 => 正负会抵消误差
在这里插入图片描述
2、机智如你,想到用绝对差 => 代码不好处理
在这里插入图片描述
3、使用平方误差,平方误差越小就说明偏离的事实就越小,小蓝的思考就越接近真相
在这里插入图片描述
于是我们将w和平方误差的关系画出来,发现图像是一个开口向上的一元二次方程

在这里插入图片描述
数学证明:

研究一组豆豆太复杂,我们先研究一个豆豆的误差:

在这里插入图片描述
在这里插入图片描述
一个豆豆的误差和w之间的关系确实是一元二次函数,那么如果是一组豆豆的误差会是怎样的呢?

我们继续分析:

在这里插入图片描述
我们发现:整体豆豆的误差就是将单个豆豆的误差加起来然后求平均值

在这里插入图片描述
整理公式发现误差e和w之间的关系仍然是一个标准开口向上的一元二次函数(a,b,c都是固定的值)
在这里插入图片描述
在这里插入图片描述

均方误差:将所有误差值累加起来,然后求平均值,这就是预测函数在整体样本上的误差

二、概率和统计

事物出现的频率收敛于它的概率

以下概念通过豆豆的栗子讲解:

回归分析:

一开始我们猜想一个w,然后统计出大量的数据(大小和毒性), 去评估我们的w合不合适,这个过程在数理统计里面称为:回归分析

在这里插入图片描述

最小二乘法:

而我们评估的标准是"均方误差",并试图让他最小,也就是回归分析的最小二乘法

在这里插入图片描述
代价函数:

代价函数(Cost Function) ——当参数w取不同值时,对环境中的问题数据预测时产生不同的误差error。反过来,利用代价函数最低点的w值,把它放回到预测函数中,这时候预测函数也就很好的完成了对数据的拟合。

此时此刻,如果我们把函数看作处理问题的机器,那么事情从原先的机器输入数据,得到结果变成了用很多观察的数据去评估这个函数机器到底在不在行。
原先的自变量x和因变量y变成了从环境中观测到的大量已知数,而我们把w是作为自变量,误差e作为因变量,也就形成一个新的函数叫做代价函数。

在这里插入图片描述

这个所谓的"代价函数"展现出,当参数w取不同值的时候,对于环境中的问题数据预测时产生的不同误差。
而利用这个"代价函数"的最低点的w值,把它放回到预测函数,这时候预测函数也就很好完成了对数据的拟合。

注意:
在预测函数中w作为参数,x是作为自变量输入,y作为因变量输出
这是我们最终要得到预测函数问题的函数
而在研究函数的时候,x和y都是观测统计出来的已知数,成为了代价函数的已知参数部分
而w成为了自变量,误差代价e是因变量
这是我们用来分析并改进预测函数的辅助函数

在这里插入图片描述

三、如何挪动到最低点?

那当然是:求最低点w_min(二次函数的最低点,-b/2a)
在这里插入图片描述

正规方程:

这种一次性求解出让误差最小的W取值的方法,我们称为正规方程
在这里插入图片描述
如果数据量不大的话,这很合适。不过实际应用中输入x往往不会是一个特征数值,更一般的情况是一个特征向量,比如1000个维度,那么运算次数就是10亿次,而在现代神经网络中为了加快运算的速度一般都会采用并行计算的方式,也就是一次性把它们都算出来。
在这里插入图片描述

四、代码实现

豆豆数据集模拟:dataset.py

import numpy as np

def get_beans(counts):
	xs = np.random.rand(counts)
	xs = np.sort(xs)
	ys = [1.2*x+np.random.rand()/10 for x in xs]
	return xs,ys

代价函数分析:code_function.py

import dataset
import matplotlib.pyplot as plt
import numpy as np
# 豆豆数量m
m = 100
xs, ys = dataset.get_beans(m)
# 配置图像
plt.title("Size-Toxicity Function", fontsize=12)
plt.xlabel("Bean Size")
plt.ylabel("Toxicity")
plt.scatter(xs, ys)

w = 0.1
y_pre = w * xs
plt.plot(xs, y_pre)
plt.show()

# 绘制代价函数的图像(w和方差e的图像)
es = []
ws = np.arange(0, 3, 0.1)
for w in ws:
    y_pre = w * xs
    # 平方误差、求和、平均得到误差
    e = (1 / m) * np.sum((ys - y_pre) ** 2)
    es.append(e)

plt.title("Cost Function", fontsize=12)
plt.xlabel("w")
plt.ylabel("e")
plt.plot(ws, es)
plt.show()

# 用抛物线顶点坐标求解最低点的w
w_min = np.sum(xs * ys) / np.sum(xs ** 2)
print("最小点的w:" + str(w_min))

# 把最低点的W值带回预测函数中,看看效果
y_pre = w_min * xs
plt.title("Size-Toxicity Function", fontsize=12)
plt.xlabel("Bean Size")
plt.ylabel("Toxicity")
plt.scatter(xs, ys)
plt.plot(xs, y_pre)
plt.show()

实验结果:

W调整前:

在这里插入图片描述
代价函数图:
在这里插入图片描述
W调整后:
在这里插入图片描述
相关代码仓库链接,欢迎Star:传送门

在这里插入图片描述

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

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

相关文章

[oeasy]python0037_字符画艺术_asciiview_自制小动物_imagick_asciiart

牛说(cowsay) 回忆上次内容 我们狂飙了一路 从用shell 直接执行 python程序到用shell 循环执行 python程序 循环体中 把 python的 输出结果 用管道 交给了 figlet 把 figlet的 输出结果 用管道 交给了 cowsay 把 cowsay的 输出结果 用管道 交给了 lolcat 最后 提权 直接运行 s…

课程设计 | 学生成绩管理系统

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

减小 Go 代码编译后的二进制体积

1 基线用例 减小编译后的二进制的体积,能够加快程序的发布和安装过程。接下来呢,我们分别从编译选项和第三方压缩工具两方面来介绍如何有效地减小 Go 语言编译后的体积。 我们采用同一个测试工程来测试不同方式的效果。 使用的测试工程如下&#xff0…

SQL全自动化检查神器

介绍 Yearning MYSQL 是一个SQL语句审核平台。提供查询审计,SQL审核等多种功能,支持Mysql,可以在一定程度上解决运维与开发之间的那一环,功能丰富,代码开源,安装部署容易! 功能介绍 SQL查询查询…

Prometheus配合 alertmanager 使用邮箱报警

部署Prometheus 和 Alertmanager略 安装包部署prometheusGrafananode_exporter_争取不加班!的博客-CSDN博客 prometheus监控报警部署Alertmanager_争取不加班!的博客-CSDN博客 编辑Alertmanager配置文件 vim alertmanager/alertmanager.yml global: res…

MySQL高可用之主备同步:MySQL是如何保证主备一致的

🏆今日学习目标: 🍀MySql是如何保证主备一致的 ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加入:…

【Java编程进阶】封装继承多态详解

推荐学习专栏:Java 编程进阶之路【从入门到精通】 文章目录 1. 封装2. 继承2.1 继承的语法2.2 子类重写父类的方法2.3 子类隐藏父类的方法2.4 super 关键字2.5 final 关键字2.6 父类子类类型转换3. 多态4. 总结Java 是一门面向对象程序设计语言,其具有封装,继承和多态三大特…

面向对象的特征之三:多态性

文章目录一、理解多态性二、什么是多态性三、多态性的使用——虚拟方法调用四、多态性使用前提五、适用范围六、虚拟方法调用详细介绍多态性是编译期的还是运行期的?举例每日一考七、instanceof关键字的使用引入:关于多态性的讨论向下转型:in…

Linux-7 文本编辑vi/vim

Linux-7 文本编辑vi/vim vim介绍 什么是vim? vi和vim是Linux下的一个文本编辑工具。(可以李姐为Windows的记事本或word文档) 为什么要使用vim? 因为Linux系统一切皆为文件,而我们工作最多的就是修改某个服务的配置&a…

网络安全——投票系统缺陷(靶场实战)

我们需要利用漏洞来把投票信息刷到第一位 我们可以利用 HTTP_X_FORWARDED_FOR 来进行获取伪造 我们再次进行投票的时候,我们抓取数据包的格式 我们采用上述方法进行伪造 增加变量,我们采用多IP攻击 选中247点击send to Intruder 选中247和1点击 add&…

基于Xlinx的时序分析与约束(8)----关于时序路径、时钟悲观度和建立时间/保持时间的一些问题

写在前面 最近研究vivado里的时序分析路径时,发现了3个很有意思的问题。经过一番查找资料后,总算把问题搞明白了,在这里分享给大家。 1、为什么同一条时序路径在报表里的值不一样? 在如下文件建立的工程中: module te…

Window10下配置Maxim SDK

参考网址: 微信(中文):【嵌入式AI开发&Maxim篇一】美信Maxim78000Evaluation Kit AI部署流程初探 GitHub:MaximAI_Documentation/MAX78000_Feather at master MaximIntegratedAI/MaximAI_Documentation 下载地址…

【回答问题】ChatGPT上线了!如何安装python-ipopt?python-ipopt有哪些用法?

如何安装python-ipopt? 要安装 python-ipopt,你需要先安装 Ipopt 库。这个库是用 C 编写的,所以你还需要安装一些 C 编译器。 在 Linux 系统上,你可以使用下面的命令来安装 Ipopt 和相关的依赖项: 复制 sudo apt-g…

excel成本统计:如何进行区域筛选,多条件求和?

最近有位小伙伴被一个计算产品成本的问题难住了,要求是根据配件成本核算出成品的成本。这个问题看上去似乎有点复杂,感觉一下子想不出好的解决办法,实际上,却非常简单,而且仅用常见的求和函数,就能轻松解决…

Mybatis源码分析(四)Mapper文件的解析

目录一 Mapper的使用二 MapperElement的解析三 解析cache-ref节点四 解析Cache节点五 解析ParameterMap节点六 解析ResultMap节点七 解析Sql节点八 处理各个数据库操作语句官网:mybatis – MyBatis 3 | 简介 参考书籍:《通用源码阅读指导书:M…

【每日一题】【LeetCode】【第一天】三数之和

三数之和的解决之路 题干表述 测试案列(部分) 第一次思路 这种其实是最暴力的,也是我脑海里第一个想到的最简单的方法了。 思路就是三个循环,一个循环去一个数,然后当三个下标不同,且对应的三个数相加为…

FPGA设计CPU书籍

一直以来CPU内部是绝大多数IT工程师难以触及的领域。纵使学习过计算机架构相关课程,自己动手实现CPU也始终遥不可及,因为这涉及计算机系统的最底层——芯片设计。 而近年来FPGA芯片产品的发展与普及打破了这一阻碍,利用内部电路可重编程的FPG…

【C++进阶】IO流

🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…

Docker进阶(中)

docker 进阶(中)docker提交镜像等命令docker 镜像原理docker 私有库&推送到私有库容器数据卷docker 安装常规软件docker提交镜像等命令 再这个谈这个docker 提交这个镜像之前我们先补充一下上一篇博客没有谈到的命令。再这里说一下。我们之前谈到的…

代码随想录算法训练营第六天 java :242.有效的字母异位词 349. 两个数组的交集 ,1. 两数之和

文章目录哈希表理论基础哈希碰撞: 拉链法和线性探测法线性探测法Leetcode242.有效的字母异位词题目链接思路AC代码Leetcode349. 两个数组的交集题目链接思路AC代码Leetcode 1. 两数之和题目链接思路与难点AC代码收获今日收获哈希表理论基础 哈希函数如下图所示&…