2-方差代价函数:知错

本文介绍了基于《小白也能听懂的人工智能原理》课程的内容,主要讨论了均方误差的概念、如何通过统计方法和代价函数优化预测函数,以及编程实验中的代价函数图像绘制和最小化过程。
摘要由CSDN通过智能技术生成

声明

本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》仅供学习记录、分享,严禁他用!!如有侵权,请联系删除

目录

一、内容讲解

3、均方误差

5、统计方法得到概率

6、代价函数

7、实际计算

8、正规方程

二、编程实验

(一)编写并绘制代价函数图像

1、编写代价函数

2、不同的w取值下预测函数的误差是多少

3、绘制图像

(二)利用代价函数调整预测函数


一、内容讲解

1、绝对差:用绝对值处理误差。面对误差,比标准大a or 小a都算是与标准相差了a,并不关心正负。

2、平方误差:将差值取平方,消除负号的影响。

3、均方误差

(1)权值参数w决定了预测函数(预测直线)的样子,每次权值w取不同的值,产生的误差也会不同权值与误差的曲线恰是一个抛物线,即开口向上的一元二次函数

(2)证明:

  • 探讨一个豆豆时的情况:
  • 探讨一组豆豆时的情况:
    • 将豆豆与毒性一般化:x0表示豆豆大小,y0表示对应的实际毒性
    • 对于任意一个豆豆来说,它的预测误差和参数w的关系都是一个开口向上的抛物线
    • 一组豆豆的情况:整体误差 = 把单个豆豆的预测误差加起来再求平均
    • xn表示豆豆大小,yn表示豆豆的实际毒性

(2)将上述公式变得简洁:面对许多个数据,我们只需报单个的误差求出来,再全部加在一起平均一下,这就是预测函数在整体样本上的误差。依旧是一个开口向上的抛物线。

4、让机器自己去寻找抛物线的最低点,此处恰是误差最小的点。

5、统计方法得到概率

(1)事物出现的频率,收敛于它的概率 。

(2)设计小蓝的大脑时,其实也是在干抛掷一枚不确定的硬币这件事,一开始猜想出一个w,然后统计出来的大量数据(大小和毒性)去评估w到底合不合适,这就是数理统计学中的--回归分析。而我们评估的标准是均方误差,并试图让他最小,也就是回归分析中的最小二乘法

6、代价函数

  • 权值w作为自变量,误差e作为因变量,展现出当参数w取不同的值时,对环境中问题数据预测时产生不同的误差e。

  • 参数x和y都是通过观测统计而来的已知数,成为代价函数中的已知参数部分

  • 是用来分析并改进预测函数的辅助函数

  • 用样本的均方误差得到的代价函数,习惯称之为“方差代价函数”。(注意,此处的方差 ≠ 数学意义上的方差)

  • 利用代价函数的最低点的w值放回预测函数,这时预测函数也就很好地完成了对数据的拟合。

7、实际计算

(1)根据中学数学知识,抛物线的最低点为:w = -b / 2a

(2)一个豆豆的简单情况

(3)多个豆豆的一般情况

8、正规方程

二、编程实验

  • 一次性求解出让误差最小的w取值的方法。
  • 当样本数量较少时,其实很合适。但机器学习往往需要处理海量的数据,这种一步到位的方式就意味着巨大的计算量和存储量。这时,就发生了变化

(一)编写并绘制代价函数图像

1、编写代价函数

import dataset
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
# 首先要知道 matplotlib 的 backend 使用的是默认配置 agg (agg不能显示绘制的图),要想显示绘制的图需要更改 agg 为 TkAgg
matplotlib.use('TkAgg')

# 获取100个豆豆的数据
xs, ys = dataset.get_beans(100)

# 编写预测函数
# 给定一个权值
w = 0.1
# xs是一个numpy库中的array数组,具有广播特性,会把xs数组中的每个值都和w相乘,最后形成一个新的数组
y_pre = w * xs

# 编写代价函数
es = (ys - y_pre) ** 2 # a ** b:表示a的b次方
# ys和ys_pre 都是numpy库中的array类型的数组(np.array),是将数组对应位置上的元素直接数据运算
# python中的普通数组:直接做数组的相加运算实际上实现的是将两个数组拼接为1个数组,a+b是将b拼接在a的后面
# numpy中的sum函数可以直接对数组中的每个元素求和
sum_e = np.sum(es)
# 求和结果取平均,整体样本上的平均误差
sum_e = (1 / 100) * sum_e

2、不同的w取值下预测函数的误差是多少

# np.arange()函数用来生成数组,用来取得不同的w值
# 第一个参数表示起始值 ; 第二参数表示结束值 ; 第三个参数表示递进大小
ws = np.arange(0, 3, 0.1)
# 绘制w和方差e的图像(即代价函数图像)
es = [] # 创建空列表用来接收不同w对应的误差值
for w in ws:
    y_pre = w * xs
    e = (1 / 100) * np.sum((ys - y_pre) ** 2)
    es.append(e) # 将每一个w对应的豆豆的误差大小传入列表

3、绘制图像

# 绘图
plt.title("cost function", fontsize = 12)
plt.xlabel("Weight-W")
plt.ylabel("Error-E")
plt.plot(ws, es)
plt.show()

(二)利用代价函数调整预测函数

# 用抛物线的顶点坐标公式求解最低点的w
w_min = np.sum(xs * ys) / np.sum(xs * xs)
# 将最低点带入预测函数中,即为误差最小值,预测最准确的情况
y_pre = w_min * xs
# 绘图
plt.title("Size-Toxicity Function", fontsize = 12)
plt.xlabel("Bean Size")
plt.ylabel("Bean Toxicity")
# 豆豆是一个一个离散的数据,所以要利用绘制散点图,传入自变量和因变量
plt.scatter(xs, ys)
plt.plot(xs, y_pre)
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star_KeyW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值