实验7 回归问题

news2024/9/21 20:37:03

1. 实验目的

①掌握一元线性回归模型的实现方法;
②掌握多元线性回归模型的实现方法;
③掌握三维数据可视化方法。

2. 实验内容

①使用TensorFlow建立一元线性回归模型,使用商品房销售数据训练模型,并使用训练好的模型预测房价;
②使用TensorFlow建立多元线性回归模型,使用商品房销售数据预测房价,并实现三维数据可视化。

3. 实验过程

题目一:

使用9.5小节中的“商品房销售记录表”作为样本数据,训练一元线性回归模型,根据商品房面积预测房价。
提示用户输入商品房面积,并进行输入校验。合理的输入为20~500之间的实数。如果输入正确,根据模型估计房价,并输出显示;如果输入数据类型错误,或者输入数据范围不合理,根据错误类型提示,并等待用户重新输入,输错3次,则程序结束。
要求:
⑴编写代码,实现程序功能;
⑵记录实验过程和结果:尝试调试超参数,使模型达到最优的性能,记录实验过程和结果。
① 代码

import  tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

#加载面积和房价
x = tf.constant([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])
y = tf.constant([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])


#求均值
meanX = tf.reduce_mean(x)
meanY = tf.reduce_mean(y)

#求权值
sumXY = tf.reduce_sum((x - meanX) * (y - meanY))
sumXX = tf.reduce_sum((x - meanX) * (x - meanX))

w = sumXY / sumXX

b = meanY - w * meanX

print("权值w为",w.numpy(),"\n偏置值b为",b.numpy())
print("线性模型:y=",w.numpy(),"*x + ",b.numpy())


for i in range(3):
    print("商品房面积和预测房价")
    x1 = input("请输入商品房面积")

    if(i == 3):
        print("错误过多,GameOver")

    else:

        if x1.isdigit():
            x1 = float(x1)
            if(x1 <= 500) & (x1 >= 20):
                y1= w * x1 + b
                print("面积%f的商品房价格为%f"%(x1,y1))
                break
            else:
                print("输入的面积大小错误,请重新输入")
        else:
            print("输入的面积类型错误,请重新输入")

② 实验结果

在这里插入图片描述

题目二:

使用9.5小节中的“商品房销售记录表”作为样本数据,使用房屋面积和房间数,训练多元线性回归模型,实现一个房价预测系统。
要求:
⑴尝试调试超参数,使模型达到最优的性能,记录实验过程和结果;
⑵创建3D绘图对象来绘制空间点集。x轴表示房屋面积,y轴表示房间数,z轴表示样本的销售价格;
⑶提示用户输入商品房面积和房间数,并进行输入校验。如果输入正确,根据模型预测房价。
合理的输入如下:
面积:20-500之间的实数
房间数:1-10之间的整数
如果输入数据类型错误,或者输入数据范围不合理,根据错误类型给出提示,并等待用户重新输入,输错3次,则程序结束。
(输入时,请注意房间面积对应房间数的合理性)
提示:
① TensorFlow中矩阵求逆函数tf.linalg.inv()
② 输入时,请注意房间面积对应房间数的合理性

① 代码

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

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 = np.array([3, 2, 2, 3, 1, 2, 3, 2, 2, 3, 1, 1, 1, 1, 2, 2])
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
])

fig = plt.figure()
#绘图
ax3d = fig.add_axes(Axes3D(fig))

ax3d.set_xlabel("square")
ax3d.set_ylabel("rooms")
ax3d.set_zlabel("price")
ax3d.scatter(x1, x2, y)
plt.show()



#计算
x0 = np.ones(len(x1))
#对叠
X = np.stack((x0,x1,x2),axis=1)
#将y变换为列向量
Y = np.array(y).reshape(-1,1)

Xt = np.transpose(X)
XtX_1 = np.linalg.inv(np.matmul(Xt,X))
XtX_1_Xt = np.matmul(XtX_1,Xt)
W = np.matmul(XtX_1_Xt,Y)

for i in range(3):
    print("商品房面积和预测房价")
    x1_test = input("请输入商品房面积")
    x2_test = input("请输入房间数")

    if(i == 3):
        print("错误过多,GameOver")

    else:

        if (x1_test.isdigit()) & (x2_test.isdigit()):
            x1_test = float(x1_test)
            x2_test = float(x2_test)
            if(x1_test <= 500) & (x1_test >= 20) & (x2_test <= 10) & (x2_test >= 1) :
                y_price = W[1] * x1_test + W[2] * x2_test + W[0]
                print("价格为%.2f"%y_price,"万元")
                break
            else:
                print("输入的面积或房间数大小错误,请重新输入")
        else:
            print("输入的面积或房间数类型错误,请重新输入")

在此可能大部分人都会遇到的两个问题,其中问题一我已经在上方程序中给予解决。
问题一:“matplotlib使用Axes3D绘3D图像时,没有内容”的解决方法
问题二:pycharm pycharm中用matplolib的ax3.plot_surface画出的3D(三维图)(三维函数)不能旋转怎么办?
② 实验结果
在这里插入图片描述

说明:以上程序矩阵运算部分采用TensorFlow实现,数据加载、输入、输出等可以根据需要采用Python/NumPy来实现。
4. 实验小结&讨论题
① 实验过程中遇到了哪些问题,你是如何解决的?
没有问题。

② 分别使用Numpy和TensorFlow进行数据的加载和数组的堆叠,你习惯使用哪种方式,为什么?
Numpy,因为Numpy的函数库我觉得相对来说处理数据更加方便,功能更加齐全。

③ 题目一和题目二在代码实现过程中,有重复的代码段,请设计函数优化代码。
重复的部分为判断输入数据的类型,错误三次退出部分,可以在题目一的基础上增加,商品房数量数据类型判断即可。

④ 在题目基本要求的基础上,你对每个题目做了哪些扩展和提升?或者你觉得在编程实现过程中,还有哪些地方可以进行优化?
没有扩展和提升,完全按照题目要求编写。我觉得在编程实现过程中可以对于ui界面进行优化,还有用户的体验也可以。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】17.map和set的模拟实现

1.红黑树中的迭代器 operator是关键 迭代需要走中序 如何走中序? _node从左子树的最左结点开始遍历走中序 分两类情况: 如果右树不为空 那么中序的下一个就是右子树的最左结点 如果右树为空 那么表示_node所在的子树已经完成 在一个结点的祖先去找 沿着路径往上孩子是它的…

【Linux】网络基础(网络层与链路层)

网络层与链路层典型协议网络层IP 地址地址管理网络号的划分&#xff08;五种&#xff09;特殊的网络以及IP地址路由选择链路层MAC 地址ARP 协议MTU 最大传输单元其他典型协议&#xff1a;ICMP、DNS 、NAT技术ICMP协议DNS 协议NAT & NAPT 技术代理网络层 功能&#xff1a;负…

算法设计与分析阶段考总结

前言&#xff1a;基本是为了我自己看的一些我容易忘记的东西&#xff0c;为考试作准备把 第一章 算法中的基本概念 程序设计数据结构算法 算法特性 1.有穷性 2.确定性 3.可行性 4.输出 5.输入 算法复杂性分析 算法复杂性依赖于&#xff1a;问题规模N&#xff0c;输入I&#xff…

TCP 的可靠传输

目录 可靠传输有啥用确认应答超时重传总结 可靠传输有啥用 我们知道相比于 UDP, TCP 的传输是可靠的, 啥意思呢? 就是 UDP 发送的数据, 它自己不知道发送的数据对方是否接收到. 而 TCP 发送的数据, 它知道对方是否接收到, 也就是说对方会给个应答. 假设一个场景 : 甲要付款给…

全网最详细,Jmeter性能测试-性能基础详解,接口关联与编写Java脚本(三)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 接口关联 接口关联…

Vector - CAPL - CAN x 总线信息获取(续1)

继续.... 目录 OverLoadFrameCount -- 过载帧数量 代码示例 OverLoadFrameRate -- 过载帧速率 代码示例 StandardFrameCount -- 标准帧数量 代码示例 StandardFrameRate -- 标准帧速率 代码示例 StandardRemoteFrameCount -- 标准远程帧数量 代码示例 StandardRemote…

Java注解编译期处理AbstractProcessor详解

文章目录概述注解处理器注解处理流程AbstractProcessorgetSupportedOptions()getSupportedAnnotationTypesgetSupportedSourceVersioninit初始化process 处理方法如何注册注解处理器如何调试编译期代码Maven相关配置(指定生效的Processor)注意事项自定义注解处理器范例范例一&a…

多线程小知识

多线程 多线程环境使用哈希表HashMapHashtableConcurrentHashMap 死锁死锁是什么两者之间的死锁多人之间的死锁 死锁产生的四个必要条件:互斥使用不可抢占请求和保持循环等待 不同的锁ReentrantLockSynchronized和ReentrantLock之间的区别:具体选择Synchronized加锁工作过程偏向…

using namespace std 是什么意思——C++命名空间

目录 namespace命名空间局部域和全局域namespace展开命名空间指定命名空间 命名空间的嵌套不同文件中的同名命名空间 using namespace std 是什么意思 我们先看一段C代码&#xff1a; #include <stdio.h> #include <stdlib.h>int rand 0;int main() {printf(&quo…

6.2 统计量与抽样分布

学习目标&#xff1a; 我的理解: 统计量是从一个样本中计算得到的数值&#xff0c;用于描述样本的某种特征或性质。统计量可以用来推断总体的特征或性质&#xff0c;因为样本是总体的一部分。 通常&#xff0c;统计量是通过对样本中的数据进行计算得到的&#xff0c;例如平均…

3年轻人20万开店日营业额79.2元,年轻人开店还能赚到钱吗?

最近&#xff0c;河南郑州的蔡先生和2个朋友合伙开一家汉堡店&#xff0c;生意很惨淡&#xff0c;日营业额79.2元。 蔡先生表示&#xff0c;他们开店失败的最大原因就是没有做好前期准备工作&#xff0c;产品没有吸引人的特色&#xff0c;导致正式营业后吸引不到客户。 蔡先生用…

Python 实现海康机器人工业相机 MV-CU060-10GM 的实时显示视频流及拍照功能

一、背景介绍 1、最近项目中需要给客户对接海康机器人工业相机 MV-CU060-10GM&#xff1b; 2、客户要求通过部署的管理平台&#xff0c;可以在页面上实现如下功能&#xff1a; 1&#xff09;相机视频流开始预览&#xff1b; 2&#xff09;相机视频流停止预览&#xff1b; 3&am…

三月份跳槽了,历经阿里测开岗4轮面试,不出意外,被刷了...

大多数情况下&#xff0c;测试员的个人技能成长速度&#xff0c;远远大于公司规模或业务的成长速度。所以&#xff0c;跳槽成为了这个行业里最常见的一个词汇。 前几天&#xff0c;我看到有朋友留言说&#xff0c;他在面试阿里的测试开发工程师的时候&#xff0c;灵魂拷问三小…

NIO非阻塞式网络通信实例

一、概述 1、NIO有三大核心部分&#xff1a;Channel(通道)&#xff0c;Buufer(缓存区)&#xff0c;Selector(选择器) Buffer缓存区 缓冲区本质上是一块可以写入数据&#xff0c;然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象&#xff0c;并提供了 一组方法&am…

❤Linux文件、目录与磁盘格式总结❤

文章目录 Linux文件、目录与磁盘格式总结Linux文件权限chgrpchmodchown文件种类Linux文件扩展名 Linux文件与目录管理常用的目录解释目录树绝对路径与相对路径cd(切换目录)pwd(显示当前目录)mkdir(建立一个新目录)rmdir(删除空目录)执行文件路径变量$PATHls(文件与目录的查看)c…

青藤首提“业安融合”理念,正式发布先进云安全方案CNAPP

4月18日&#xff0c;以“云时代&#xff0c;安全变了”为主题的2023年云安全高峰论坛在北京举行。会上&#xff0c;青藤首次提出“业安融合”理念&#xff0c;正式发布先进云安全方案CNAPP。 中国全面进入云和数字化时代 当前&#xff0c;全球已进入数字经济时代&#xff0c;…

物联感知产品如何助力企业实现智能化转型?

如果您的企业想要实现设备全生命周期管理、设备信息管理、设备监控和数据处理等功能&#xff0c;想要进行智能化数字转型&#xff0c;不妨了解一下物联感知。 物联感知产品是利用物联网技术&#xff0c;实现对物理世界的感知、联接和智能化。物联感知产品一般由四个部分组成&a…

python中的pyc文件了解一下?

基本说明 pyc 文件是 Python 编译过的字节码文件。当你运行一个 Python 程序时&#xff0c;Python 解释器首先将源代码&#xff08;通常是 .py 文件&#xff09;编译成字节码。这个字节码是一种低级的、与平台无关的代码&#xff0c;它可以被 Python 虚拟机&#xff08;Python…

TCP的连接管理机制(三次握手与四次挥手)

目录为啥要三次握手与四次挥手三次握手syn 与 ack三次握手具体流程四次挥手注意为啥要三次握手与四次挥手 相比于UDP, TCP是有连接的, 这个连接就体现在这了. 三次握手就是TCP建立连接, 四次挥手就是TCP断开连接. 三次握手 握手是指通信双方进行网络交互. 三次握手就相当于…

记录上传文件异常 /tmp/tomcat... (No space left on device)

一&#xff0c;问题描述 用postman调用上传接口&#xff0c;基本每两次调用会有一次报错&#xff0c;如下 {"timestamp": "2023-04-11T03:00:15.4690000","status": 500,"error": "Internal Server Error","exceptio…