首页 > 其他分享 >吴恩达机器学习笔记(2-1到2-7)

吴恩达机器学习笔记(2-1到2-7)

时间:2024-10-13 23:43:50浏览次数:9  
标签:吴恩达 frac 函数 机器 qquad sum 笔记 delta theta

吴恩达机器学习笔记(2-1到2-7)

https://www.bilibili.com/video/BV164411b7dx?p=5
https://www.bilibili.com/video/BV164411b7dx?p=6
https://www.bilibili.com/video/BV164411b7dx?p=7
https://www.bilibili.com/video/BV164411b7dx?p=8
https://www.bilibili.com/video/BV164411b7dx?p=9
https://www.bilibili.com/video/BV164411b7dx?p=10
https://www.bilibili.com/video/BV164411b7dx?p=11

机器学习-吴恩达

二、一元线性回归拟合模型

数学基础:

1、方差

​ 描述数据集离散程度的数学量。

  • 一组数据有一个平均数,方差描述了这些数据与平均数的差距的平方的平均值

  • $$
    \begin{aligned}
    & 数据集: (x_1,y_1),(x_2,y_2),(x_3,y_3)...(x_n,y_n)\
    & 平均数:average = \frac{1}{n}\sum_{i=1}^{n}y_i\
    & 方差: variance = \frac{1}{n}\sum_{i=1}{n}(average-y_i)2
    \end{aligned} \
    $$

2、函数导数与偏导数

​ 略

3、复合函数求导

​ $u=f(x),g(u),则g'(x) = f'(x)*g'(u)$

  • $$
    \begin{aligned}
    例如对函数 & g(x) = (3x2+2x+1)2求导:\
    令u = f(x) & = 3x^2+2x+1 \quad,\quad g(u) = u^2\
    \therefore f'(x) & = 6x+2 \quad,\quad g'(u) = 2u\
    \therefore g'(x) & = (6x+2)
    2(3x^2+2x+1)\\

    即:内求 & 导乘以外求导\\
    注:如果 & 是复杂的多层嵌套函数,依旧遵循内求导*外求导,然后反复向最外层迭代即可
    

    \end{aligned} \
    $$

4、函数f(x)导数的含义与特性
  • 1、导数表示函数当前位置的斜率
  • 2、越陡峭的地方斜率越大,越平缓的地方斜率越小
  • 3、从某点(x, f(x))出发,向着 $x-\alpha f'(x)$ 处移动是向更小值处移动($\alpha>0时$)
5、凸函数
  • image-20240420210833524
  • 左侧碗状的开口向上的叫凸函数,右侧为非凸函数。

1、回归方程

​ 对数据集$(x_1,y_1),(x_2,y_2),(x_3,y_3)...(x_n,y_n)$进行拟合时,假设方程(预测函数,也叫回归方程)为 $h(x) = \theta_1 x + \theta_0$ 如下图所示。其中 $h$ 表示房价函数,$x$ 表示占地面积。$\theta_1与\theta_0$表示回归方程参数。(注,这种也叫一元线性回归,并不是说必须使用一元线性回归,而是入门使用它便于学习)

image-20240419192942852

​ 而这个学习算法的任务就是:输入一系列训练集,通过算法后,输出一个函数。这个函数$h$作用就是,当输入一个房屋占地面积后能够预测出房价。

image-20240419214634125

​ 既然是预测函数,这个函数就需要满足"每一个训练集数据的房价与其对应占地面积相同的预测房价平均偏差最小"。因为只有这样这个预测函数才是最拟合训练集的函数。

备注:需要说明的是,严格来说,在进行计算预测函数之前,虽然训练集数据是真实的,但是也需要排除极端值情况,个别数据可能因为其他因素会很极端高或者极端低。但因为刚入门,可以不用考虑这个。

​ 即相当于数学中对数据集求方差。对于数据集(假设m个数据)中的所有数据项 $x_{i}\ y_i$ ,使用方差公式:
$$
variance = \frac{1}{m}\sum_{i=1}{m}(h(x_i)-y_i)2
$$
​ 这个问题就变成 为了使得variance值最小,寻找到合适的 $\theta_1$ 与 $\theta_0$。现在定义这个函数叫做“代价函数 $J$ ”
$$
J(\theta_0,\theta_1) = \frac{1}{m}\sum_{i=1}{m}(h(x_i)-y_i)2=\frac{1}{m}\sum_{i=1}{m}((\theta_1x_i+\theta_0)-y_i)2
$$
​ 这个代价函数形状类似于下图(使用其他数学工具实现的绘图),可以明确的是上面的代价函数肯定有解(但不一定只有一个),图最底部或许有多个局部最优解。

image-20240420210833524
这种碗状的函数,也叫凸函数

总结下来,对于一元线性回归,有如下公式
$$
\begin{aligned}
& 回归方程: h(x) = \theta_1 x + \theta_0\
& 参数:\theta_1、\theta_0\
& 代价函数:J(\theta_0,\theta_1) = \frac{1}{m}\sum_{i=1}{m}((\theta_1x_i+\theta_0)-y_i)2\
& 目标:min\ \ J(\theta_0,\theta_1)

\\ \\ \\
&注:在解代价函数时,解\sum_{i=1}^{m}((\theta_1x_i+\theta_0)-y_i)^2的效果是一样的

\end{aligned} \
$$

2、"Batch"梯度下降法解代价函数

1、梯度下降法作用

​ 寻找局部最小值

2、梯度下降法思路
image-20240420210833524

​ 从出发点开始,不断寻找周围极小邻域内最小值的点,然后继续从最小值点出发,循环这个过程直到找不到更小值的点。那么最终找到的点就是局部最优点。如上图。

image-20240420210833524

​ 由上图所知,由于出发点的不同,最后的解也不一定相同,因此是局部最优解而非全局最优解。

这种梯度下降算法也叫“Batch”梯度下降法(中文:全批次梯度下降法),特征是要遍历所有的数据集,如果是内存有限,这种方法并不是很好。在后面章节会讲解其他方式解代价函数。

​ 需要特别说明的是,线性回归类的模型,代价函数都是碗状的凸函数,这是线性回归模型的性质之一,即线性回归模型的没有极值点,只有最值点(当然,最值也是一种极值),其实这里很好思考的:因为在一堆数据里拟合方差最小,那么这个拟合曲线(拟合方程)必然是唯一的,即结果唯一。

3、梯度下降法流程
a、代码流程

$$
\begin{aligned}
&// 假设有函数 J(\theta_0, \theta_1) \
&// 以下为伪代码 \\

&let\ θ1 = 0; \\
&let\ θ2 = 0; \\
&const\ accuracy = 0.000001; // 最终结果斜率\\
&let\ step = 1; // 梯度下降法的步长,依据情况取值,并非必须是1\\\\

&let\ der0= \frac{\delta J(\theta_0,\theta_1)}{\delta \theta_0};\ \\
&let\ der1= \frac{\delta J(\theta_0,\theta_1)}{\delta \theta_1};\ \\\\

&while(der0>accuracy \ \ || \ \ der1>accuracy)\{ \\
	&\qquad let\ θ_0\_temp\ =\ θ_0\ ;\\
	&\qquad if(der0>accuracy)\{ \\
	&\qquad \qquad θ_0\_temp = \ θ_0\ -\  step\ * \ der0\ ; \\
	&\qquad \qquad der0= \frac{\delta J(\theta_0,\theta_1)}{\delta \theta_0};\ \\
	&\qquad \} \\\\
	
	&\qquad let\ θ_1\_temp\ =\ θ_1\ ;\\
	&\qquad if(der1>accuracy)\{ \\
	&\qquad \qquad θ_1\_temp = \ θ_1\ -\  step\ * \ der1\ ; \\
	&\qquad \qquad der1= \frac{\delta J(\theta_0,\theta_1)}{\delta \theta_1};\ \\
	&\qquad \} \\\\
	
	&\qquad θ0 = θ_0\_temp; \\
	&\qquad θ1 = θ_1\_temp; \\
&\} \\
& console.log(^"最小值:\ ^"+J(θ1,θ2))

\end{aligned}
$$

​ 依据 $\underline{当\alpha > 0时f(x)一定比f(x-\alpha f'(x))大}$ 的数学原理,让函数$J(\theta_0,\theta_1)$自动的向着局部最小值不断的逼近,直到斜率为0到达局部最优解处。

​ 之所以在伪代码处设置最终斜率为0.000001,是因为越靠近极值处斜率越小,斜率越小$step\ *\ \frac{\delta J(\theta_0,\theta_1)}{\delta \theta_0}$ 值越小,就会导致越靠近极值处逼近越慢。因此为了防止无穷无尽的算下去,刻意优化了结果斜率。此外还优化了步骤,但原理是一样的。

​ 在视频2-6中有讲解step的取值过大过小会导致的后果,也说明了为什么step不用自动调节的原因,同时也讲了越靠近极值逼近的速度越慢的原因。

​ 若要实现上面的伪代码编程,难点为如何实现$\frac{\delta J(\theta_0,\theta_1)}{\delta \theta}$的计算。

b、偏导函数

$$
\begin{aligned}
已知代价函数\ J(\theta_0,\theta_1) &= \frac{1}{m}\sum_{i=1}{m}((\theta_1x_i+\theta_0)-y_i)2 \
①对 \theta_0 求偏导数:\qquad \qquad &\
\frac{\delta J(\theta_0,\theta_1)}{\delta \theta_0} &= \frac{1}{m}\sum_{i=1}^{m}{2*((\theta_1 x_i+\theta_0)-y_i)} \
&= \frac{2}{m}\sum_{i=1}^{m}((\theta_1 x_i+\theta_0)-y_i)\\

②对 \theta_1 求偏导数:\qquad \qquad &\\
\frac{\delta J(\theta_0,\theta_1)}{\delta \theta_1} &= \frac{1}{m}\sum_{i=1}^{m}\{2*((\theta_1 x_i+\theta_0)-y_i)*x_i\} \\
&= \frac{2}{m}\sum_{i=1}^{m}((\theta_1 x_i+\theta_0)-y_i)*x_i\\\\

\end{aligned}
$$

附件

代价函数演示代码:

import matplotlib.pyplot as plt
import numpy as np



# 生成随机的 x 数据,范围在 0 到 10 之间,共 100 个点
np.random.seed(42)  # 设置随机种子以确保结果可重复
x = np.random.uniform(0, 1, 100)
# 生成符合 y = 2x + 2 的 y 数据,加上一定的噪声
true_a = 2.0  # 设定真实的斜率 a
true_b = 2.0  # 设定真实的截距 b
# noise = np.random.normal(0, 1, 100)  # 添加较小的随机噪声
# y = true_a * x + true_b + noise
# 去除噪声效果更明显
y = true_a * x + true_b + 0

# 绘制数据点的散点图
plt.figure(figsize=(10, 7))
plt.scatter(x, y, color='blue', label='Data points')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Scatter plot of data points')
plt.legend()
plt.show()



# 定义 t =  sum((a * x_i + b - y_i)^2) 的函数并绘制 3D 图
A = np.linspace(1, 3, 200)  # 定义 a 参数的范围
B = np.linspace(1, 3, 200)  # 定义 b 参数的范围
A_mesh, B_mesh = np.meshgrid(A, B)
# 计算 T 值
T = np.zeros_like(A_mesh)
for i in range(len(x)):
    T +=  ((A_mesh * x[i] + B_mesh - y[i])**2)



# 创建 3D 图
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
# 绘制等高线
ax.contour(A_mesh, B_mesh, T, levels=[0, 0.1, 1, 4, 7], colors=['black'], linewidths=1, linestyles='solid', zorder=10)
# 绘制曲面
ax.plot_surface(A_mesh, B_mesh, T, cmap='viridis', zorder=1)
# 设置坐标轴标签
ax.set_xlabel('a')
ax.set_ylabel('b')
ax.set_zlabel('T')

plt.title('3D plot of T(a, b)')
plt.show()

image-20240420210833524

其中a、b是θ参数,T是代价函数值,中间圆圈处有明显的局部最优解

image-20240420210833524

标签:吴恩达,frac,函数,机器,qquad,sum,笔记,delta,theta
From: https://www.cnblogs.com/MCMonkey/p/18463283

相关文章

  • 【C++学习】核心编程之类和对象(上)黑马学习笔记—超详细
    目录(一)封装1.1封装的意义:意义一:在设计类的时候,属性和行为写在一起,表现事物意义二:类在设计时,可以把属性和行为放在不同的权限下,加以控制1.2struct和class区别 1.3成员属性设置为私有(二)对象的初始化和清理2.1构造函数和析构函数2.2构造函数的分类及调用两种分类......
  • 24/10/13 ABC375补题笔记
    A典,属于显而易见的水题,这数据范围直接暴力做就行了。#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; cin>>n; strings; cin>>s; intcnt=0; if(n<2)returncout<<0<<endl,0; for(inti=0;i<s.size()-2;i++)......
  • 笔记本中vscode设置
    笔记本中的vscode设置修改界面的隐藏和显示时,会提示Unabletowriteintousersettingsbecausethefilehasunsavedchanges.Pleasesavetheusersettingsfilefirstandthentryagain.就把第二段删除了问题暂时解决{"terminal.integrated.commandsToSkipSh......
  • 2024年软件设计师中级(软考中级)详细笔记【5】软件工程基础知识下(分值10+)
    第5章软件工程目录前言第5章软件工程基础知识(下)5.5系统测试5.5.1系统测试与调试5.5.2传统软件的测试策略5.5.5测试方法5.5.5.1黑盒测试5.5.5.2白盒测试白盒测试+McCabe度量法伪代码+白盒测试+McCabe5.6运行和维护知识【以背为主】5.6.2系统维护概述5.6.2.1......
  • Web前端开发入门学习笔记之CSS 43-47 --新手超级友好版-复合选择器+css特性篇
         Foreword写在前面的话: 大家好,我是一名刚开始学习HTML的新手。这篇文章是我在学习html过程中的一些笔记和心得,希望能和同样在学习HTML的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确的地方,欢迎大家在评论区提出建议和指正。我非常期待大家的反馈,以便......
  • 深度学习神经网络笔记--卷积神经网络
    为什么要用卷积捕捉特征,如文末的图)不受位置影响(左右,前后,上下)可以参考下图:卷积操作可移动的小窗口与图像数据逐元素相乘后相加小窗口是滤波器,卷积核,(权重矩阵)需要注意的问题:stride:步长卷积核的个数:决定输出的depth,卷积核个数填充值zerp-padding:外圈补0......
  • 【2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,其影响力标志的未来是
    (目录)欢迎关注微信公众号:数据科学与艺术*近日,2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家,如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种......
  • DAY3 MySQL学习笔记
    DAY3MySQL学习笔记DDL-表操作-数据类型MySQL中数据类型主要分为三类:数值型、字符串型、日期时间类型数值类型分类类型大小有符号(SIGNED)范围无符号(UNSIGNED)范围描述TINTING1byte(-128,127)(0,255)小整数值SMALLINT2bytes(-32768,32767)(0,65536)大整数值MEDIUMINT3bytes......
  • 高性能计算学习笔记-优化(2)
    一、Loop循环优化有以下几种循环合并:两个循环合并到一个循环中循环展开:循环内的并行技术循环交换:改变多维数组的空间访问顺序,改善空间局部性,提高cache命中率循环分布:将一个循环拆分为多个循环,使编译器可以进行向量化优化循环不变:循环中不发生变化的量提到循环外面,避免重......
  • 在启智AI平台实践ChatGLM4-9B聊天机器人@MindSpore
    前段时间在昇思训练营发现一个好东西,就是昇思AI实验室:昇思大模型平台在官方提供的jupyterAI编程实践样例中,发现了这个项目:ChatGLM4-9B实践样例GLM-4-9B是智谱AI推出的最新一代预训练模型GLM-4系列中的开源版本。在语义、数学、推理、代码和知识等多方面的数据集测评中,......