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

news2024/11/27 0:29:55

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 / 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小节中的“商品房销售记录表”作为样本数据,训练多元线性回归模型,实现一个房价预测系统。
要求:
(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) #继续乘以y

W = 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 += 1
                                elif(x2_test < 1 or x2_test > 10):
                                             print("对不起你输入的房间数超出范围")
                                             j += 1
                                else:
                                             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 += 1
                if j>= 3:
                                print("对不起,您已经3次输入错误,程序退出")
                                exit()

在这里插入图片描述

4.实验小结

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

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

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

相关文章

SpringBoot 集成 FastDFS(附安装教程)

1、FastDFS 简介 FastDFS是用 c 语言编写的一款开源的分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文件访问&#xff08;文件上传、文件下载&#xff09;等&#xff0c;解决了大容量存储和负载均衡的问题。特别适合以文件…

Bindiff工具使用-[GDOUCTF 2023]L!s!

目录 题目&#xff1a; 学到的点&#xff1a; 题目&#xff1a; 打了GDOUCTF的比赛&#xff08;被暴打了hhh)&#xff0c;学到很多新东西,这里总结一下 Diff的文件是ida数据库文件&#xff0c;选择i64或者idb文件进行Diff 打开附件&#xff0c;有两个文件&#xff0c;一个…

【Git 入门教程】第二节、Git基础使用

Git是一个分布式版本控制系统&#xff0c;它可以帮助开发者更好地管理和维护代码。在本文中&#xff0c;我们将介绍Git的最基本操作&#xff0c;如安装Git、初始化仓库、添加文件、提交代码、查看记录等。 一、Git安装 1.下载 要使用Git&#xff0c;首先需要在计算机上安装G…

JavaWeb开发 —— 登录认证校验和异常处理

在 JavaWeb开发 —— SpringBootWeb综合案例 中我们通过实例部门管理以及员工管理中的详细操作。而这篇文章我们将会通过综合实例学习登录认证、登录校验以及异常处理的了解和掌握。 目录 一、基本登录功能 二、登录校验 1. 会话技术 1.1 客户端会话跟踪技术Cookie 1.2 …

iview render函数(vue render函数)

iview 的render函数就是vue的render函数&#xff0c;iview常用在表格里面自定义内容&#xff0c;下面来看render函数常用的配置&#xff1a; 1、 h是createdElement的简写&#xff0c;有3个参数&#xff1a; 语法&#xff1a;render:(h,params)>{} render:(h,params) >…

mulesoft MCIA 破釜沉舟备考 2023.04.25.24(易错题)

mulesoft MCIA 破釜沉舟备考 2023.04.25.24(易错题) 1. An insurance company is using a CIoudHub runtime plane.2. A mule application must periodically process a large dataset which varies from 6 GB lo 8 GB from a back-end database and write transform data lo…

LSTM简单介绍—然后使用LSTM对FashionMNIST数据集处理

文章目录 LSTM 简单介绍LSTM的基本结构LSTM的工作原理输入门遗忘门输出门细胞状态更新输出计算 总结代码实例 LSTM 简单介绍 在自然语言处理、语音识别等领域&#xff0c;长短时记忆网络 (Long Short-Term Memory, LSTM) 已经成为了常用的模型之一。本文将介绍 LSTM 的基本结构…

gpt在线使用-免费的 GPT在哪下载

免费的 GPT&#xff08;Generative Pre-trained Transformer&#xff09; 。现在您可以免费体验我们的 GPT 技术&#xff0c;来让您的业务或项目更加智能。 GPT 是一种基于最前沿的自然语言处理技术&#xff0c;它展现出了令人惊叹的预测能力和交互性能。我们的 GPT 是在世界顶…

警惕读书无用论,要知道一个人最可怕的就是精神世界的贫瘠和荒凉

孔乙已是鲁迅笔下人物&#xff0c;穷困流倒还穿着象征读书人的长衫&#xff0c;迁腐、麻木。最近&#xff0c;大家自我调佩是“当代孔乙己”&#xff0c;学历成为思想负担&#xff0c;找工作时高不成低不就。 一、社会对于学历和职业之间的关系认知是怎样的&#xff1f; 学历不…

Forefront GPT-4免费版:开启无限畅聊时代,乐享人工智能快感,无限制“白嫖”,还能和N多角色一起聊天?赶紧注册,再过些时间估计就要收费了

目录 前言注册登录方式应用体验聊天体验绘图体验 “是打算先免费后收费吗&#xff1f;”建议其它资料下载 前言 近期&#xff0c;人工智能技术迎来重大飞跃&#xff0c;OpenAI的ChatGPT等工具成为全球数亿人探索提高生产力和增强创造力的新方法。人们现在可以使用人工智能驱动…

绩效管理系统有哪些推荐?

绩效管理系统有哪些推荐&#xff1f;市面上的绩效管理系统五花八门&#xff0c;这就来给大家推荐几款优质的&#xff01; 一、如何选择绩效管理系统 在选择绩效管理系统之前&#xff0c;需要先考虑以下几个问题&#xff1a; 了解你的企业目标和需求&#xff1a;在选择绩效管…

nacos注册中心替换成eureka

背景 项目使用的springcloud、nacos、redis等插件&#xff0c;但是nacos比较重&#xff0c;小项目使用不到&#xff0c;想用一个tomcat部署项目&#xff0c;所以准备用eureka替换nacos&#xff1b; eureka Eureak 是Netflix 开源微服务框架中一系列项目中的一个。Spring Clo…

JVM 垃圾收集器

一&#xff0c;常用的垃圾收集器 如果说收集算法是内存回收的方法论&#xff0c;那么垃圾收集器就是内存回收的具体实现。 如下图为年轻代和老年代的垃圾回收器&#xff0c;划线表示可以同时存在。 1&#xff0c;Serial Serial收集器是最基本、发展历史最悠久的收集器&…

怎么把录音文件转换成mp3格式,3个高效方法

在工作中&#xff0c;我们可能会选择录音来记录会议内容&#xff0c;以便之后整理会议纪要。但是我们知道录音文件的格式千差万别。比如在手机上录制的音频文件通常以M4A、WAV等多种格式存储&#xff0c;然而这些格式可能会存在不兼容的问题&#xff0c;导致我们无法在其他平台…

openEuler Developer Day 2023成功召开!发布嵌入式商业版本及多项成果

【中国&#xff0c;上海&#xff0c;2023年4月21日】openEuler Developer Day 2023于4月20-21日在线上和线下同步举办。本次大会由开放原子开源基金会指导&#xff0c;中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#xff0c;以“万涓汇流&#xff0c;奔涌向前…

3DEXPERIENCE MODSIM产品前期概念结构快速开发方案(下) | 达索系统百世慧®

基于3DEXPERIENCE单一数据源、实时多专业协同平台、附加全新CATIA建模方法与MODSIM建模仿真一体化技术&#xff0c;助力产品设计与仿真效率提升&#xff0c;产品多学科性能提升&#xff0c;产品轻量化减重等&#xff0c;全方位赋能产品前期概念结构高效高质开发。 目录 达索系…

利用css实现视差滚动和抖动效果

背景&#xff1a; 前端的设计效果&#xff0c;越来越炫酷&#xff0c;而这些炫酷的效果&#xff0c;利用css3的动画效果和js就可以实现&#xff0c;简单的代码就能实现非常炫酷的效果。 原理&#xff1a; 利用 js监控scrollTop的位置&#xff0c;通过 top定位图片的位置&#x…

halcon灰度积分投影/垂直积分投影

简介:关于灰度投影积分可以用到的场合很多,例如分割字符,分割尺子上的刻度等,适用于有规律的变化这些内容的检测。本文复现了论文《基于深度学习和灰度纹理特征的铁路接触网绝缘子状态检测》中灰度积分投影实现了对绝缘子缺陷位置的检测。见(图1)灰度积分垂直方向投影获得…

JAVAWeb09-WEB 工程路径专题

1. 工程路径问题 先看一个问题 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>base 标签</title> </head> <body> <h1>注册用户~~</h1> <!--解读:1.…

创建型模式-建造者模式

建造者模式 概述 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示 这个模式适用于&#xff1a;某个对象的构建过程复杂的情况 将部件的构造与装配分离&#xff0c;由 Builder 负责构造&#xff0c;Director 进行装配&#xff0c;实现了构…