当前课程知识点:计算思维与人工智能基础 > 第三部分:python基础 > 第十章:实例分析与实践 > 10.2房价的预测
下面我们给大家介绍一下多元回归的例子
房价的预测
前面我们给大家介绍了单元线性回归
单元线性回归是利用一个自变量来去
估计因变量的一个回归
构建这样的一个回归方程
那么多变量的线性回归
也称之为多元线性回归
那么他就是利用多个自变量
去估计因变量这样的一个
构建这样的一个回归方程
那么从而来去解释和预测因变量的值
那么多元线性回归模型中的
这个因变量和大多数的自变量都是定量的值
某些特定指标呢需要转化为定量值
才能应用到回归方程中
事物的联系是多方面的
而影响事物发展的因素也是多样的
那么由多个自变量最优组合共同来估计因变量
比单一的自变量预测更有效
更符合实际情况
比如说像消费水平预测模型中的
比如说用通过工资水平
受教育程度
职业
地区
家庭负担等因素
都会去影响到这个消费水平
而这些影响因素的单位和量级肯定也是不同的
虽然不会影响自变量的重要程度
但对回归系数大小还是有影响
所以呢我们在后期都要做一些什么呀
归一化的处理对这样的数据啊
那么来看我们有这样的一个数据集
就是波士顿的房价的这样的一个数据集
那么这里面的有13列组成
前面的12例都是这些特征的属性
那么第13列呢
是自住的平均房价啊
那么这里面啊
比如说第一列他是
人均犯罪率
第二列呢
就是占地面积超过两万五平方米的这个住房的这个占的比例
以及他的每个城镇非零售业我的一个比例
那么第四列就是一个
是否有大片土地这样的一个虚拟的参数
有还是没有
那么有就是1
没有就是0
第五列可以看的到他是一个氮氧化物浓度
也可以看作是一个污染的参数
那么第六个呢
就是平均每人所住的房间数
那么第七个是
1940年前业主所占这个比例
下面一个是到达波士顿中心区域的这个加权指数
那么再看我们的第九个呢
是到达径向公路的系数
那么第十个是所有财产价值在每一万元他的一个税率
另外的话就是第十一个是我们的什么呀
城镇师生比
城镇的师生比
那么第十二个呢
就是人口中地位低下者的这个比例的一个情况
那么最后一列是自住房的这个平均的价格
那么也就说这些的因素
其实都会影响这个住房的这个平均价格
那么这样的一个数据集
那么这个数据集呢
一共有506条
我们刚才可以看到他有13个数据
前面12个为特征属性
那么最后一个我们其实要他就是我们的什么呀
因变量那么就是其实要去预测
通过前面的这些特征属性来与预测最后一个房价的值啊
那么因为每一列的属性的取值的范围都是不一样啊
所以我们对我们刚才这个数据呢
是要做一些归一化的处理
否则的话那个他本身的
像这个数值里面他有今天像这个有零点几的
有8点12点几的
那我们还有
不一样
那么有还有这个有几十的
还有几百的
那么这个他对后面的这个影响的就变的不同
让我们这些都影响是一样的
那么要做每一列做一个归一化的处理
归一化的处理就是
我们可以看到他的是一个
就是当前值与这个最小值的差距
比上我们最大值与最小值的这个差
通过代码去实现的话那么每一列通过一个循环来去写
每一列它的值呢都是用什么呀
当前的值与最小值与我们最大值与最小值的比
是这样去来去实现
恩对于模型的构建
我们可以看到
多元线性回归模型的可以用不同的特征值的输入
与相应的这个权值相乘
他的求和来加上偏置而来去得到
通过这个图的描述呢
就是这样
原来是一个x
现在是多个x
权值加上偏置来去 获得我们的这个因变量y
那么这里面的多元变量的损失的函数
和前面的单变量的模型的是一样
我们用这个均方差
那么在我们遇到最小损失函数的过程中
我们也是通过梯度下降法来去获得
那么这个里面因为多元变量的梯度下降
应该对每一个变量进行求导
所以呢
我们可以看到,
如果有这样一个表达式
这样一个表达式
那么有三个变量
分别要对每一个变量来进行求导
或是对每个变量来进行备份
来获得一个梯度的一个向量
那么不断的迭代让我们的损失最小
来获得我们的最后什么呀
最优的模型
那么在这个实现的过程中呢
是要通过这样几步来完成的
首先呢
我们要去加载数据
波士顿数据集呢是一个CSV文件
所以我们可以引入pd.read_CSV这样的一个函数
来把它读进来
下面的一步要做一些归一化的处理
然后那么分X是我们的特征集
y是我们说标签集
把它分开
再下一步呢就是构建我们的模型
构建模型是用线性模型
刚才我们说可以通过keras.Sequential
做这样的一个线性模型
然后呢
我们要对它定义它的优化的方式
那么优化我们通过梯度下降法SGD
学习率是0.01
我们的损失函数的一个设定
下面就是训练
训练通过model.fit来去训练
我们训练多少epochs
一百给定义
那么训练好了以后我们就可以去预测
预测我们可以看得到预测值
跟我们的实际的值它的差距
来去确定我们这个模型的好坏
那这个就是我们波士顿数据集
来实现一个房价预测这样的一个模型
下面我们可以在jupyter下看一下我们具体的实现
下面我们利用多元线性回归的模型来实现
波士顿房价的预测
首先呢我们来看
需要导进我们需要的TensorFlow
numpy
pandas
matplotlib
以及TensorFlow下面的keras
导进来以后呢
第二步呢我们就需要读入我们的数据
那么数据文件是在我们指定的目录下
我们通过pd.read_CSV这样的函数把它读进来
读进来我们看一下我们的数据
这是十列
那下面呢是我们的三列
共十三例
506行啊
再下面,我们需要做一些数据准备
是把我们的列标号把他保存起来
然后把我们的数据转换成numpy的格式
再下面呢我们对我们的数据可以做一个图形的展示
那么这个里面我们可以把前面的每一列
跟我们的最后一列
做一个散点图来观察一下
也就是我们前面的12列的特征
每一列的特征
跟我们房价的
平均房价的一个关系
我们可以看的到第一个这个图就是
这个是我们这个犯罪率
跟我们的住房的平均价格之间的一个关系
下面这个呢
就是我们在两万五千平方英尺以上的这个住宅地的这个比例
与我们平均房价之间的关系啊
再下面一个就是每个城镇的非零售业务的这个比例
跟房价之间的关系
那么以及这个我们说的有大片土地CHAS这个虚拟数
虚拟参数的0和1
这个也看不出来什么
然后这是一个氮氧化物这个浓度和我们的房价的比例
我们可以看到这个房价其实比较低的这一段啊
你可以看它的氧化物浓度还是比较高的
另外话人均房间数啊
来跟我们房价之间以及1940年前的业主单位所占的比例
这也是低房价这个业主所占的比例比较高一些
另外就是我们这个
到达波士顿市中心区域加权距离我们房价之间的关系
再下面一个是到达径向公路之间的
和我们房价之间的关系
以及后面的所有财产一万美元的一个税率啊
再下面这个就是师生比和房价之间的关系
以及最后一个就是我们这个人口地位低下的这个比例
跟房价之间的关系
那么这个房价比较低的时候这块比较密集
这是我们这个每一列的数据
跟我们最后的标签数据之间的关系
我们从图上可以了解一下
得到一个直观的感受
下面我们可以对它进行归一化的处理
那么这时我们做归一化的处理
另外的话我们把我们的数据集进行拆分
那么把我们前面的特征呢给x
然后标签的给y
最后我们可以看我们x的形状和y的形状是一样的
可以看到x呢是506行12列
y呢就是506行1列
这是他的一个情况
我们也可以看一下第一条数据
那么第一条数据x呢是有这样12个数组成的
那么y呢是他的实际的平均房价是24
下面我们就可以进行构建模型
通过keras.Sequential这个建立一个序列模型
首先我们建一个什么呀序列模型
建立好序列模型对我们这个优化器损失函数啊
以及学习率要进行一下确定啊
那么这里面的我们用的SDG
梯度下降法然后我们学习率是0.01
那么这么损失函数都做一下指定
那么指定以后呢
下面就可以对模型进行训练
训练我们的数据集
那么就是训练数据是x
然后标签是y
那么训练是什么
100epochs
那么可以看到
每次从1训练到什么呀
506
那么训练一百次
我们可以看到是训练的过程中大家可以观察一下
我们这个损失
那么损失值他是在不断减小的过程
那么一百批次以后他的损失可以减小到29点多
那么它的准确率可以达到70%多
那么这个损失出来以后
我们就可以看了下我们这个训练以后
我们对这个模型里面的参数
整个的看一下
那么模型的那么输入层输出层
那么它的参数
然后就可以预测
因为x是一个两维的
所以我们在预测的时候
我们给的时候
我们可以看的到只能切片
不能只是给一个下标
所以切片我们是第0第1其实是第一个
第一个X也就是实有12
一行12列这个数据预测出来
这个我们的平均房价应该是多少呢
我们可以看到这个预测出来是28
跟我们的标签是有差异的
另外我们再看
如果我们可以预测多个
那我们这里面也是需要切片
这里面y的值也是二维的
只不过他是由506行
1列组成
所以切片以后我们可以看得到
那么这是十个
从第一条到第十条
我们可以这里面缺
比如说我们只要一到六
那么就是从第二个到什么呀
那么2345啊
那么这是从这样子的来
运行一下我们可以看到啊
2345
那么这是第一28
那么从25这个下面的预测的结果是什么呀
是不是一样的
另外的话我们也可以看一下我们刚才模型建立以后他的那个参数
那么这个参数呢
我们看着这个
我们多元线性回归y的值来自于什么呀
是每一个X
那每一个X跟他带一个权值
所以我们12列有12个权值
然后呢会有一个偏置
我们可以看一下我们的参数运行一下
那么输出来以后可以看
这是我们权值
一共有什么呀
12个
然后这是我们的什么呀
这是我们的是偏置
偏置是这样子的
那么也可以通过这样子的方式
我们如果看这个
他这个通过model.trainable_variables来可以看
那么第0是可以看得到我们的前面的权值
我们跟上面的一样
如果我们看另外一个是一个什么呀
最后的另外一个参数偏置
偏置的值可以看到这两个是一样的
那么这就是一个
多元线性回归模型的一个构建
以及它的预测啊
就给大家介绍到这
-章测试
-章测试
-第一章: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基础
--章测试
-第十章:实例分析与实践
--章测试
-第十一章:人工智能在自然语言中的应用
--章测试