IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 多元线性回归模型可视化 -> 正文阅读

[数据结构与算法]多元线性回归模型可视化

绘制平面图

绘制 房价房价面积房间数量 之间关系的散点图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 第一步:加载样本数据
# x1 是商品房面积
x1 = np.array([137.97, 104.50, 100.00, 124.32, 79.20, 99.00, 124.00, 114.00,
               106.69, 138.05, 53.75, 46.91, 68.00, 63.02, 81.26, 86.21])
# x2 是商品房房间数
x2 = np.array([3, 2, 2, 3, 1, 2, 3, 2,
               2, 3, 1, 1, 1, 1, 2, 2])
# y 是房价
y = np.array([145.00, 110.00, 93.00, 116.00, 65.32, 104.00, 118.00, 91.00,
              62.00, 133.00, 51.00, 45.00, 78.50, 69.65, 75.69, 95.30])

# 创建Figure对象
fig = plt.figure(figsize=(8, 6))
# 创建3D对象
ax3d = Axes3D(fig)

# 绘制散点图
# 指定x、y、z坐标,并用蓝色的‘*’标记
ax3d.scatter(x1, x2, y, c='b', marker='*')

# 这里也可以使用plt中的设置标签的方法来进行设置
ax3d.set_xlabel('Area', color='r', fontsize=16)
ax3d.set_ylabel('Room', color='r', fontsize=16)
ax3d.set_zlabel('Price', color='r', fontsize=16)

# 设置y轴的坐标轴刻度, 这里的y轴对应我们的房间数
# 因为房间数最大数是3, 所以这里将刻度设置为整数123
# 要注意的是这个函数是设置坐标轴上刻度的显示方式, 而不是设置坐标轴范围
ax3d.set_yticks([1, 2, 3])
# set_zlim3d是设置坐标轴的范围,将 z 轴的范围设置为30-160之间
ax3d.set_zlim3d(30, 160)

# 将创建好的3D对象显示出来
plt.show()

这是运行结果:
在这里插入图片描述
除此之外,还可以使用

view_init(elev,azim)

来改变视角,其中,参数 elev 表示视角的水平高度,第二个参数表示水平旋转的角度。

将上面的程序中添加代码:

# 创建3D对象
...
ax3d.view_init(elev=0, azim=-90)
...

运行如下:
在这里插入图片描述
再换个角度:

# 创建3D对象
...
ax3d.view_init(elev=0, azim=0)
...

在这里插入图片描述
因为第一个图是三维图,左右两边存在一定的角度。所以两边的点好像没有完全落在坐标1和3上,这是视觉的偏差。

绘制平面图

绘制 房价房价面积房间数量 之间关系的平面图

下面,来绘制平面图。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# x1 是商品房面积
x1 = np.array([137.97, 104.50, 100.00, 124.32, 79.20, 99.00, 124.00, 114.00,
               106.69, 138.05, 53.75, 46.91, 68.00, 63.02, 81.26, 86.21])
# x2 是商品房房间数
x2 = np.array([3, 2, 2, 3, 1, 2, 3, 2,
               2, 3, 1, 1, 1, 1, 2, 2])

# 生成网格点的坐标矩阵
X1, X2 = np.meshgrid(x1, x2)

W = np.array([11.96729093, 0.53488599, 14.33150378])
# 使用模型估计出房价
Y_PRED = W[1] * X1 + W[2] * X2 + W[0]

# 创建Figure对象
fig = plt.figure()
# 创建3D对象
ax3d = Axes3D(fig)

# 绘制平面图
ax3d.plot_surface(X1, X2, Y_PRED, cmap='coolwarm')

# 这里也可以使用plt中的设置标签的方法来进行设置
ax3d.set_xlabel('Area', color='r', fontsize=16)
ax3d.set_ylabel('Room', color='r', fontsize=16)
ax3d.set_zlabel('Price', color='r', fontsize=16)

# 设置y轴的坐标轴刻度, 这里的y轴对应我们的房间数
# 因为房间数最大数是3, 所以这里将刻度设置为整数123
# 要注意的是这个函数是设置坐标轴上刻度的显示方式, 而不是设置坐标轴范围
ax3d.set_yticks([1, 2, 3])

# 将创建好的3D对象显示出来
plt.show()

运行结果如下:
在这里插入图片描述
在房间数这个轴上,样本中的数字只有1、2、3,因此只有两格。而在面积这个轴上,样本的分布是不均匀的。因此,图中这些网格的划分也是不均匀的。

绘制线框图、预测房价和实际房价

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# x1 是商品房面积
x1 = np.array([137.97, 104.50, 100.00, 124.32, 79.20, 99.00, 124.00, 114.00,
               106.69, 138.05, 53.75, 46.91, 68.00, 63.02, 81.26, 86.21])
# x2 是商品房房间数
x2 = np.array([3, 2, 2, 3, 1, 2, 3, 2,
               2, 3, 1, 1, 1, 1, 2, 2])

# y 是房价
y = np.array([145.00, 110.00, 93.00, 116.00, 65.32, 104.00, 118.00, 91.00,
              62.00, 133.00, 51.00, 45.00, 78.50, 69.65, 75.69, 95.30])

# 生成网格点的坐标矩阵
X1, X2 = np.meshgrid(x1, x2)

W = np.array([11.96729093, 0.53488599, 14.33150378])
# 使用模型估计出的房价
y_pred = W[1] * x1 + W[2] * x2 + W[0]
Y_PRED = W[1] * X1 + W[2] * X2 + W[0]

# 创建Figure对象
fig = plt.figure()
# 创建3D对象
ax3d = Axes3D(fig)

# 绘制散点图
# 指定x、y、z坐标,并用蓝色的‘*’标记
ax3d.scatter(x1, x2, y, c='b', marker='*', label="销售记录")
ax3d.scatter(x1, x2, y_pred, c='r', label="预测房价")
ax3d.plot_wireframe(X1, X2, Y_PRED, color="c", linewidth=0.5, label="拟合平面")

# 这里也可以使用plt中的设置标签的方法来进行设置
ax3d.set_xlabel('Area', color='r', fontsize=14)
ax3d.set_ylabel('Room', color='r', fontsize=14)
ax3d.set_zlabel('Price', color='r', fontsize=14)

# 设置y轴的坐标轴刻度, 这里的y轴对应我们的房间数
# 因为房间数最大数是3, 所以这里将刻度设置为整数123
# 要注意的是这个函数是设置坐标轴上刻度的显示方式, 而不是设置坐标轴范围
ax3d.set_yticks([1, 2, 3])

plt.suptitle("商品房销售回归模型", fontsize=20)
plt.legend(loc="upper left")

# 将创建好的3D对象显示出来
plt.show()

运行代码如下:
在这里插入图片描述
这些红色的点就是预测出来的房价,它们既在线框图的网格点上,也在平面图上。这些蓝色的点是实际的房价,它们与预测出来的房价之间存在一定的偏差。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 12:01:51  更:2022-04-26 12:02:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:28:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码