当前课程知识点:计算思维与人工智能基础 > 第三部分:python基础 > 第十章:实例分析与实践 > 10.1认识回归问题
大家好
下面我们给大家介绍第十章实例
这章呢
我们主要给大家介绍几个实例
比如房价的预测
手写数字识别
和服饰图片的分类
那么在这些案例中呢
我们用到了神经网络的搭建
以及训练和最后的预测
主要大家需要掌握的是
全连接神经网络的搭建与应用
以及卷积神经网络的搭建与应用
下面我们和大家一起来认识一下回归问题
如果我们给定一些离散的点
那么通过调整若干的参数
来去拟合一个函数
那么这样的一个过程
其实就是一个拟合的过程
那么这个
我们主要的目的就是
使这个函数与已知点的这个差别是最小
那么就说我们拟合的比较准确
那么有的时候可以拟合成什么呀
一个线性的关系
也可以拟合成一个非线性关系
如果是线性的回归的话
那如果是一个单变量的
我们就称之为单变量线性回归
多变量的时候就是多变量线性回归
比如说我们可以看的到房间的这个面积大小
跟我们这个房价之间的
那么这个它有这样的一些离散点
我们可以把他拟合成一条什么呀
直线
那么这个就是一个单变量的线性回归
那么如果我们把它表示成一个数学表达式的话
我们很熟悉就是一个什么呀
y=w *x+b
那么我们X
就常说和这个b就是我们这两个参数来进行什么啊
寻优的
或者说我们
这个w就是我们的斜率
b就是我们截距
那么这个模型定了以后
那么我们说是如何求到这个最优的w和b值呢
那么这个呢其实它就是转化的
也就说我们已经知道了一些值和预测的值
他们之间什么呀
如果差距越来越小的话
那么就说我们拟合的就越来越好
这个去描述的话
那我们预测值和我们这个标签的这个值
它的之差的平方能把它称之为叫损失
那损失是一个数值
它表示用于什么呀
单个样本而言呢是模型预测的一个准确的程度
如果模型的预测完全准确
这个损失当然是零了啊
否则呢
它这个损失呢
总会是一个值
那么训练的目标呢
就是从所有的样本中找到一个平均损失最小的
这个刚才我们说的那个w权重和这个b偏差
那么一样
我们可以来可以看的到
这是我们给定的这几个点
那么给定这几个点
我们可以拟合出来这样一个曲线
也可以拟合出来这样的一个曲线
我们可以看到这个点到这个线之间的距离
距离其实就可以描述他损失
那么只不过我们的均方把这个损失给它扩大了
可以看的到
当然这条曲线比这条曲线拟合的可能要更好一点
也就是它的损失更小一些
那么这个里面呢
线性回归模型我们使用了一种称之为平方损失
又称为L2损失的损失函数
那就是我们均方误差MSE。
那么这个是指的是每个样本的平均平方损失
这个公式呢就是这样子的
我们可以看得到
这是我们的给的这个点的值
标签的值
那么这个是我们预测出来值
这是他的一个均方误差
那么这个它跟这个权值之间的关系呢是一个
我们可以看的到这是这样的一个
是一个二次函数
那么这个二次函数呢是一个什么啊
是个凸函数
那么我们可以找到斜率为0
那么也是它拟合最好的一个值
那么如何降低这个损失呢
在这里呢我们通常用的就是梯度下降法
那么什么是梯度呢
相对所有自变量偏导的这个具有方向和大小的一个矢量
就是梯度
梯度的方向指出了函数在给定点的上升最快的一个方向
那么梯度这个矢量值
在单变量的函数中
梯度其实就是我们的函数的一个微分
代表着函数在某个给定点了一个期限的一个斜率
那么多变量时呢
其实计算的就分别对每个变量进行微分
梯度下降法是一种通过计算并且减小梯度
将损失降至最低的一个技术
它主要是以这个训练数据为条件
来计算损失相对于模型参数的梯度
那么通俗的来说呢
梯度下降法是以迭代方式来调整参数
那么逐渐找到我们的这个w和b的一个最佳的组合
从而让我们这个损失降到最低的一个过程
那么梯度下降法一般的就是我们实现的时候
就是通过这个梯度乘一个学习率
那么来确定下一个位置
那么这样的话就可以不断地
我们找到这个最小值这样一个过程
那么在这个学习率的设置的时候呢
它的大小呢是对我们的学习速度是有影响的
如果我们太小的话
他的学习速度就比较慢
也就说他需要更多的时间
训练速度比较慢
但如果太大的时候
他会就有个震荡
这样呢也会有影响我们的什么呀
影响我们的这个学习的时间
那么每一个回归问题都存在一个合适的学习率
那么与损失函数的平坦程度是相关的
对于模型的训练呢
其实这个过程就是通过有标签的样本学习
来确定所有的这个我们的w和b的这个理想值
那么这是一种有监督式的学习呢
在这个学习的过程呢
是这样子的
我们首先我们给定了一个预测模型
也就是我们的一个y=wx+b
那么这个里面初始我们给了一个w和b的一个值
这样的话我们就可以预测出来
预测出来我们的这个预测点y的一些值
标签也有y的值
那么预测y值和标签y值就可以计算出损失函数
计算出损失函数啊
那我们再通过什么呀
再通过我们的梯度啊
那么通过我们的梯度下降法
来去下更新我们的参数
更新参数我们得到了新的模型里面的参数
来再得到预测值
跟我们这个实际的标签值来再计算损失
那我们这是一个不断优化这个参数
那么参数的优化
我们的梯度损失也是在不断的减小的
是这样的一个过程
那么具体的过程的描述我们可以是这样
初始化w、b的值
并且我们说要给一个学习率啊
那么根据当前的W值和B值就可以
算出我们前面讲的均方MSE
均方差损失
那么然后我们根据这个梯度下降法先计算我们什么呀
W的梯度
然后再计算b的梯度
然后再通过我们学习率 来去进行更新新的梯度
然后新的这个权重W的梯度和这个偏差b的梯度
然后再去计算损失
那么这就是一个迭代寻优的一个过程
下面呢我们可以通过一段代码
来观察一下我们一个线性模型的一个寻优的一个过程
我们来看一下
这是我们已知的一组x值和y值啊
一共有什么呀
有一百个这样的散点值啊
首先我们把这个值通过我们的图像把它什么呀
把它画出来啊
我们导入一下我们的numpy
我们这个数据呢
就放在我们这个是以csv的方式啊
放在这个文件里面
我们把它读出来
然后我们通过散点图
把它展示出来
我们可以看到
刚才看到那组数据呢
我们用散点图把它表示出来的话
它就是这样子的啊
一百个点
我们如何去用线性规划来去找到这个
我们的最佳的这条直线呢
那么这里面就要去找到这个w和b的值
那从上面的介绍过程我们首先我们来看
首先我们第一步呢
需要初始化我们的w值和b值
以及我们的学习率
初始化
那下面一步呢
其实我们就是一个什么如何去从这个初始的w、b值啊
然后拟合到我们损失最小的这样的一个过程
这个里面的我们迭代过程
我们假设给迭代什么呀
一定的次数
我们迭代是十次啊
下面这个跟刚上面一样
我们首先把这个散点图什么画出来
然后呢
这是我们定了一个迭代的次数
十次
这个是用来放我们的损失值的
那么放我们的损失
我们可以看到我们对于这个我们给定的数据
获得每一个x每一个y
然后我们求它的什么呀
每一个X+的什么
根据我们y等于什么呀
给定的w、b来去取这个预测值y
然后我们求出了损失的和
这是我们的什么呀
均方差
这是均方损失求和
然后我们再除以它就是均方差的损失
我们最后把它输出来啊
这个下面的就是我们按照现在的w、b
把这条这个函数得到这个预测值然后把我们这个什么呀
这个这条线把它画出来啊
这是第一步
也就说我们第一个给了一个的w和b的值
我们画出这条线
那下面是怎么样去我们去优化我们的w和b呢
通过梯度下降法
那么梯度w和b的梯度初值是
我们给了一个0
然后呢按照我们按照我们这个数据
这里面是我们的数据的长度
其实是一百个
那么每一个x值y值读进来
读进来以后我们求
我们前面已经有了损失函数嘛
在损失函数下的什么呀
w梯度
b的梯度
也就是我们这个损失函数对于这个它
wx加b减去y括号的平方
那么他对于我们这个w求导
这个求偏导
然后我们这个是对b的求导函数
那么这是一个啊
那么这个里面的我们可以循环
那么就是说每一个数据都来去求他的什么呀
w的梯度值求和
b的梯度值求和
最后呢我们可以得到它一个平均的w的梯度和b的梯度
然后我们去要更新的值
按照梯度下更新的值
我们前面讲过新的值就等于什么呀
我们原来的值
减去我们这个学习率乘以我们这个新的梯度值w
b的值也是同理
那么这就是我们得到了新的w和b
然后我们再到什么循环上面来去计算它的损失
然后按照我们现在这个梯度来画这样一部线
应该循环里画到什么
画到十条线
我们画到十条线
那么可以执行一下可以看
那么这个值呢其实就是我们这个地方有一个输出
就是我们这个把他的一个损失
均方差损失
那么均方差MSE的值可以看得到
它是不断的在什么呀
不断的在变小、变小、变小
到这个地方它的变化已经不是特别明显了
十次以后
那么这个曲线的变化的过程也是
我们看第一个是什么呀
w和b都等于0
w=0 b=0其实就是这条线
然后它在不断的优化优化
那么到最后这样的一个过程
那么这个就是我们
线性拟合通过我们梯度下降法来去寻优把w和b的
这样的一个过程
-章测试
-章测试
-第一章:python简介
--章测试
-第二章:编码规范
--2.2常量和变量
--章测试
-第三章:数据类型
--章测试
-第四章:基本运算
--4.2比较运算符
--4.3逻辑运算符
--4.4位运算符
--章测试
-第五章:程序控制结构
--5.1顺序结构
--5.2条件结构
--5.3循环结构
--5.4跳转结构
--5.5异常处理
--章测试
-第六章:函数、模块与面向对象
--6.2面向对象
--6.4模块与包
--章测试
-第七章:文件操作
--7.2文件的写入
--章测试
-第八章:python生态库
--章测试
-第九章:TensorFlow基础
--章测试
-第十章:实例分析与实践
--章测试
-第十一章:人工智能在自然语言中的应用
--章测试