【神经网络】tensorflow实验7--回归问题

news/2024/4/24 3:59:31/文章来源:https://blog.csdn.net/qq_53869058/article/details/130371137

1. 实验目的

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

2. 实验内容

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

3. 实验过程

题目一:

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

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 / sumXXb = meanY - w * meanXprint("权值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 + bprint("面积%f的商品房价格为%f"%(x1,y1))breakelse:print("输入的面积大小错误,请重新输入")else:print("输入的面积类型错误,请重新输入")

在这里插入图片描述

题目二:

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

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
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.00,2.00,2.00,3.00,1.00,2.00,3.00,2.00,2.00,3.00,1.00,1.00,1.00,1.00,2.00,2.00])
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])
x0 = np.ones(len(x1))
ty_x0 = tf.constant(x0) #创建常数张量
ty_x1 = tf.constant(x1)
ty_x2 = tf.constant(x2)
ty_y = tf.constant(y)ty_X = tf.stack((ty_x0,ty_x1,ty_x2), axis=1) #将全1数组与x1x2数组堆叠构造16行3列的属性矩阵
ty_y = tf.reshape(ty_y, [16,1]) #十六和一的一维数组Xt = tf.transpose(ty_X) # X的转置
XtX_1 = tf.linalg.inv(tf.matmul(Xt,ty_X)) #对结果求逆
XtX_1_Xt = tf.matmul(XtX_1,Xt) #求逆后乘以x的转置
W = tf.matmul(XtX_1_Xt,ty_y) #继续乘以yW = tf.reshape(W,[-1]) #转化为一维数组# 绘制3D图形
fig = plt.figure()
ax3d = Axes3D(fig)
ax3d.scatter(x1,x2,y)
ax3d.set_xlabel('Area',color = 'r',fontsize = 14)
ax3d.set_ylabel('Room',color = 'r',fontsize = 14)
ax3d.set_zlabel('Price',color = 'r',fontsize = 14)plt.show()
j = 0
while (True):print("请输入房屋面积和房间数,预测房屋销售价格:")x1_test = input("商品房面积(20-500):")x2_test = input("房间数(1-10):")if x1_test.isdigit() and x2_test.isdigit():x1_test = float(x1_test)x2_test = int(x2_test)if (x1_test < 20 or x1_test > 500):print("对不起,您输入的房屋面积超出范围")j += 1elif(x2_test < 1 or x2_test > 10):print("对不起你输入的房间数超出范围")j += 1else:y_pred = W[1] * x1_test+ W[2] * x2_test + W[0]y_float = float(y_pred)print(y_float)print("预测价格:", round(y_float, 2), "万元")else:print("对不起,您的输入无效")j += 1if j>= 3:print("对不起,您已经3次输入错误,程序退出")exit()

在这里插入图片描述

4.实验小结

① 实验过程中遇到了哪些问题,你是如何解决的?
在实验中用到的方法还不熟悉,在网上进行查找,看ppt
② 分别使用Numpy和TensorFlow进行数据的加载和数组的堆叠
hstac沿水平方向堆叠数组(numpy array)
vstack沿垂直方向堆叠数组(numpy array)
预加载数据:用一个constant常量将数据集加载到计算图中(主要用于小数据集)
placehold feed_dict:从内存中读取数据,占位符填充数据
queue队列:基于队列的输入通道(在计算图计算前从队列中读取数据)
③ 题目一和题目二在代码实现过程中,有重复的代码段,你知道该如何精简自己的代码吗?请进行简要的描述。
重复的代码段可以直接代替
④ 在题目基本要求的基础上,你对每个题目做了那些扩展和提升?或者你觉得在编程实现过程中,还有哪些地方可以进行优化?
对于判断错误的分类更加详细,如先判断面积是否满足,再判断房间数。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十、ElasticSearch 实战 - 源码运行

一、概述 想深入理解 Elasticsearch&#xff0c;了解其报错机制&#xff0c;并有针对性的调整参数&#xff0c;阅读其源码是很有必要的。此外&#xff0c;了解优秀开源项目的代码架构&#xff0c;能够提高个人的代码架构能力 阅读 Elasticsearch 源码的第一步是搭建调试环境&…

思维导图从入门到大神

思维导图怎么做&#xff1f;思维导图是一种发散性思维的图。在我们生活的方方面面都有运用。无论是工作、学习、还是生活&#xff0c;我们都可以用到它。那思维导图是怎么绘制的呢&#xff1f;其实非常简单&#xff0c;只要这简单的几步 1、首先在绘制思维导图前&#xff0c;我…

【网络】-- UDP协议

目录 传输层 再谈端口号 端口号范围划分 认识知名端口号&#xff08;Well-Know Port Number&#xff09; 两个问题 netstat pidof UDP协议 UDP的特点 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 传输层 负责数据能够从发送端传输接收端。 再谈端口号 端…

Codeforces Round 861 (Div. 2)(A~D)

A. Lucky Numbers 给出边界l和r&#xff0c;在区间[l, r]之间找到幸运值最大的数字。一个数字的幸运值被定义为数位差的最大值&#xff0c;即数字中最大的数位和最小的数位的差。 思路&#xff1a;因为涉及到至少两位&#xff0c;即个位和十位变化最快&#xff0c;最容易得到相…

07 - 进程创建大盘点

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录 1. 进程创建回顾2. 再论进程创建2.1 思考2.2 vfork()深度分析2.3 vfork()要点分析2.4 fork()的现代优化2.5 编程实验&#xff1a;fork() &…

被遗忘的Java关键字:transient

前言 今天在看项目代码时候&#xff0c;看到了下面这样一行代码&#xff0c;用transient修饰了一个变量&#xff0c;主要作用是做一个全局开关。说实话我是第一次看到这个关键字。激发了我的好奇心&#xff0c;所以就了解一下这是何方神圣。 /*** 全局开关*/public static tran…

最新研究:可审计的具有拜占庭鲁棒的联邦学习方案

本人新论文&#xff0c;可免费下载&#xff1a;https://download.csdn.net/download/liangyihuai/87727720 Y. Liang, Y. Li and B. -S. Shin, “Auditable Federated Learning With Byzantine Robustness,” in IEEE Transactions on Computational Social Systems, doi: 10.…

浅谈拉格朗日插值法

浅谈拉格朗日插值法 好像FFT要用到&#xff0c;所以就学习一手 文章目录 浅谈拉格朗日插值法什么是插值拉格朗日插值法 什么是插值 在离散数据的基础上补插连续的函数&#xff0c;使得这条连续函数经过所有离散数据点&#xff0c;这个过程就叫插值。其意义在于&#xff1a; …

论文阅读:DLME = Deep Local-flatness Manifold Embedding

Author: Zelin Zang, Siyuan Li, Di Wu and Stan Z Li. 1-4: Westlake University 摘要 流形学习&#xff08;ML, Manifold learning&#xff09;旨在从高维数据中识别低维结构和嵌入&#xff0c;然而我们发现现有工作在采样不足的现实数据集上效果不佳。一般的ML方法对数据结…

LNMP网站框架搭建

1. Nginx的工作原理 php-fpm.conf 是控制php-fpm守护进程的 php.ini是php解析器 工作进程&#xff1a; 1.客户端通过域名进行请求访问时&#xff0c;会找Nginx对应的虚拟主机 2. Nginx对该请求进行判断&#xff0c;如果是静态请求,Nginx会自行处理&#xff0c;并将处理结果返…

【C++】了解设计模式、 stackqueue的使用与模拟实现

文章目录 1.设计模式2.stack1.stack的使用1.stack的结构2.stack的接口 2.stack的模拟实现1.stack的结构2.接口实现 3.queue1.queue的使用1.queue的结构3.queue的接口 2.queue的模拟实现1.queue的结构2.接口实现 4.了解deque1.deque的原理介绍2.deque的底层结构3.deque的迭代器设…

【Android入门到项目实战-- 7.1】—— 如何使用通知?

目录 一、创建通知的步骤 1、创建一个NotificationManager实例 2、使用一个Builder构造器来创建Notification对象 3、设置标题、文字、时间和图标等信息 4、显示通知 二、通知实例演示 三、实现通知的点击效果 1、PendingIntent 什么是PendingIntent&#xff1f; 如何使…

Linux下实现C语言程序

一.情况说明 写这篇博客的情况比较复杂&#xff0c;首先我本来是参加新星计划按照规划现在去学习shell脚本语言的&#xff0c;但是博主现在由于其他原因需要了解makefile&#xff0c;makefile是Linux系统下的一种工具&#xff0c;makefile的一些背景要涉及链接库的知识&#xf…

HTB-DevOops

HTB-DevOops 信息收集5000端口 立足python反序列化攻击XEE读取SSH root 信息收集 5000端口 根据文字所述&#xff0c;下面的图片是feed.py。 目录扫描 /upload如下&#xff1a; 上传测试xml文件。 得到反馈 怀疑是标签不匹配&#xff0c;尝试寻找匹配的标签。前面首页有提…

【算法】【算法杂谈】判断点是否在三角形内部(面积法和向量法)

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介…

Java企业电子招标采购系统源码Spring Boot + Mybatis + 前后端分离 构建企业电子招采平台之立项流程图

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…

HTB靶机-Lame-WP

Lame 简介&#xff1a; Lame is a beginner level machine, requiring only one exploit to obtain root access. It was the first machine published on Hack The Box and was often the first machine for new users prior to its retirement Tags&#xff1a; Injection, C…

OSCP-XPosedAPI(本地文件包含、查看源码、os.system、命令盲注)

目录 扫描 Web API枚举 命令盲注 提权 扫描 发现了两个开放的端口:端口22上的SSH和端口13337上的未知服务。 用netcat手动探测端口13337,但是运行几个常见的TCP/UDP服务初始化命令没有输出。 尝试了一个完整的脚本和版本nmap扫描的开放端口࿰

Vue+Echarts 项目演练(下)收尾工作图表绘制

设置销售总量图表 中心容器地图设置 产品库存统计图 产品类别图表 项目可视化完结-整体展示 设置销售总量图表 在第一个容器中进行图表设置 <template><div><h2>A</h2><div class"chart" id"oneChart">容纳后期的图表…

ChatGPT进化的过程简介

Chat GPT可以做什么&#xff1f; 分点列条的回答问题 写代码或SQL 翻译 语法检查 ChatGPT官方还未公开论文&#xff0c;ChatGPT有一个“孪生兄弟”InstructGPT&#xff0c;InstructGPT有论文&#xff0c;可以根据InstructGPT论文推导ChatGPT的训练过程&#xff1a; ChatGPT的…