预测房价(Python)

构建神经网络/深度学习模型的基本步骤

深度学习模型具有一定的通用性,使得深度学习的门槛降低,这是深度学习得以重新占据计算机领域一席之地的重要原因,深度学习均可以从下述五个步骤来完成模型的构建和训练。

def load_data():# 从文件导入数据datafile = './work/housing.data'data = np.fromfile(datafile, sep=' ')# 每条数据包括14项,其中前面13项是影响因素,第14项是相应的房屋价格中位数feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', \'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]feature_num = len(feature_names)# 将原始数据进行Reshape,变成[N, 14]这样的形状data = data.reshape([data.shape[0] // feature_num, feature_num])# 将原数据集拆分成训练集和测试集# 这里使用80%的数据做训练,20%的数据做测试# 测试集和训练集必须是没有交集的ratio = 0.8offset = int(data.shape[0] * ratio)training_data = data[:offset]# 计算train数据集的最大值,最小值,平均值maximums, minimums, avgs = training_data.max(axis=0), training_data.min(axis=0), \training_data.sum(axis=0) / training_data.shape[0]# 对数据进行归一化处理for i in range(feature_num):#print(maximums[i], minimums[i], avgs[i])data[:, i] = (data[:, i] - avgs[i]) / (maximums[i] - minimums[i])# 训练集和测试集的划分比例training_data = data[:offset]test_data = data[offset:]return training_data, test_data

构建神经网络

基本概念

首先我们要清楚神经网络负责什么,我们起初假设了波士顿的房价和各个因素成线性关系,神经网络根据数据训练出一组最适合,最能拟合数据的一组参数,这就是神经网络需要做的事情,输入是数据,输出的一组最优参数。
首先,必须先了解以下几个概念:

一般过程

我们使用神经网络进行训练的过程可以用下面的伪代码进行表述:

iteration=N; # 迭代的次数
init(w,b);   # 为参数赋初值
while(i<iteration)z = forward(w,b,data); 			# 计算这一组参数对数据的预测值Loss = cul_loss(z,y);			# 计算预测值和真实值之间的损失gradient = cul_gradient();		# 房价预测模型很简单,我们用梯度下降法更新参数,计算梯度,梯度的计算过程如上。w,b = update(w, b, gradient);	# 根据梯度更新参数		

完整代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Ddef load_data():	# 从文件导入数据datafile = './data/housing.data'data = np.fromfile(datafile, sep=' ')# 每条数据包括14项,其中前面13项是影响因素,第14项是相应的房屋价格中位数feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', \'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]feature_num = len(feature_names)# 将原始数据进行Reshape,变成[N, 14]这样的形状data = data.reshape([data.shape[0] // feature_num, feature_num])# 将原数据集拆分成训练集和测试集# 这里使用80%的数据做训练,20%的数据做测试# 测试集和训练集必须是没有交集的ratio = 0.8offset = int(data.shape[0] * ratio)training_data = data[:offset]# 计算train数据集的最大值,最小值,平均值maximums, minimums, avgs = training_data.max(axis=0), training_data.min(axis=0), \training_data.sum(axis=0) / training_data.shape[0]# 对数据进行归一化处理for i in range(feature_num):#print(maximums[i], minimums[i], avgs[i])data[:, i] = (data[:, i] - avgs[i]) / (maximums[i] - minimums[i])# 训练集和测试集的划分比例training_data = data[:offset]test_data = data[offset:]return training_data, test_dataclass Network(object):def __init__(self, num_of_weights):# 随机产生w的初始值# 为了保持程序每次运行结果的一致性,此处设置固定的随机数种子#np.random.seed(0)self.w = np.random.randn(num_of_weights, 1)self.b = 0.def forward(self, x):z = np.dot(x, self.w) + self.breturn zdef loss(self, z, y):error = z - ynum_samples = error.shape[0]cost = error * errorcost = np.sum(cost) / num_samplesreturn costdef gradient(self, x, y):z = self.forward(x)N = x.shape[0]gradient_w = 1. / N * np.sum((z-y) * x, axis=0)gradient_w = gradient_w[:, np.newaxis]gradient_b = 1. / N * np.sum(z-y)return gradient_w, gradient_bdef update(self, gradient_w, gradient_b, eta = 0.01):self.w = self.w - eta * gradient_wself.b = self.b - eta * gradient_bdef train(self, training_data, num_epoches, batch_size=10, eta=0.01):n = len(training_data)losses = []for epoch_id in range(num_epoches):# 在每轮迭代开始之前,将训练数据的顺序随机的打乱,# 然后再按每次取batch_size条数据的方式取出np.random.shuffle(training_data)# 将训练数据进行拆分,每个mini_batch包含batch_size条的数据mini_batches = [training_data[k:k+batch_size] for k in range(0, n, batch_size)]for iter_id, mini_batch in enumerate(mini_batches):#print(self.w.shape)#print(self.b)x = mini_batch[:, :-1]y = mini_batch[:, -1:]a = self.forward(x)loss = self.loss(a, y)gradient_w, gradient_b = self.gradient(x, y)self.update(gradient_w, gradient_b, eta)losses.append(loss)print('Epoch {:3d} / iter {:3d}, loss = {:.4f}'.format(epoch_id, iter_id, loss))return losses# 获取数据
train_data, test_data = load_data()# 创建网络
net = Network(13)
# 启动训练
losses = net.train(train_data, num_epoches=50, batch_size=100, eta=0.1)# 画出损失函数的变化趋势
plot_x = np.arange(len(losses))
plot_y = np.array(losses)
plt.plot(plot_x, plot_y)
plt.show()

 

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

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

相关文章

香港的房价真的那么贵吗?用数据挖掘真相!

作者 | 挖数 来源 | 挖数&#xff08;公众号id&#xff1a;washu66&#xff09; 香港位于广东深圳的南边&#xff0c;面积是1106平方公里&#xff0c;比中国的四大一线城市都小。 不仅面积小&#xff0c;其人口密度也大&#xff0c;香港每平方公里的人口数比四大一线城市都多。…

波士顿房价数据集

数据集 Keras中常见的集成数据集波士顿房价数据集1. 加载数据集2. 访问数据集3. 数据可视化 Keras是一个高层的神经网络和深度学习库&#xff0c;可以快速搭建神经网络&#xff0c;易于调试和从扩展&#xff0c;是TensorFlow的官方API&#xff0c;内置了常用的公共数据集&#…

ChatGTP全景图 | 背景+技术篇

引言&#xff1a;人类以为的丰功伟绩&#xff0c;不过是开端的开端……我们在未来100年取得的技术进步&#xff0c;将远超我们从控制火种到发明车轮以来所取得的一切成就。——By Sam Altman 说明&#xff1a;ChatGPT发布后&#xff0c;我第一时间体验了它的对话、翻译、编程、…

考研成功上岸提前学Python,轻松拿到大厂实习offer!

23考研即将尘埃落定&#xff0c;首先要恭喜上岸的同学呀~ 关于上岸后到底要不要学Python、读研怎么找实习等相关问题&#xff0c;其实之前也聊过&#xff0c;但是大家可能还没有意识到Python给读研带来什么样的正面影响&#xff0c;蛋糕给大家看看往期Python学员的反馈&#x…

在当下互联网行情下,2023年程序员的工作真的很难找

前言 年后&#xff0c;听到有几位同事有离职的想法&#xff0c;有的已经在开始找工作了。&#xff0c;这个行业的工资就是靠跳槽来加速增长的&#xff0c;不过经过了这几个月的面试、复试的经历&#xff0c;几位前期提出离职的同事渐渐改变了想法&#xff0c;他们发现放开后的…

重磅!大湾区大学,官宣招生!

来源&#xff1a;大湾区大学 编辑整理 &#xff1a;双一流高教 3月23日&#xff0c;大湾区大学&#xff08;筹&#xff09;发布招生信息&#xff0c;该校将和南方科技大学联合招收30名硕士研究生。通知显示&#xff0c;这批学生的学籍属于南科大&#xff0c;第一年在南科大培养…

2022硅谷大厂的大!失!败!AiDA时尚设计师助手;2023热门IT技能预告;Uber送货机器人;GitHub今日热榜 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f3a1;AI应用与工具大全 | &#x1f514;公众号资料下载 | &#x1f369;韩信子 &#x1f4e2; 『抖音』2022抖音热点数据报告&#xff0c;共度温暖岁末 抖音热点联合巨量算数&#xff0c;发布了《2022抖音热点数据报告》&#xff0c;盘点了20…

Datawhale优秀作者,入选名单!

Datawhale团队 公示&#xff1a;Datawhale优秀作者&#xff0c;2023.01-03 优秀作者公示 入选奖 1. 陈敬 中国移动云能力中心 机器学习技术&#xff1a;多任务学习综述&#xff01; 2. 滕飞 浙江大学研究生 浙大学长分享&#xff0c;第二次打数据挖掘赛&#xff0c;雪浪算力…

24考研网盘群来了…免费进…

简介 免费分享考研网课资源&#xff0c;考研资料、考研资讯、考研真题、分享考研英语\考研政治\考研数学\考研复试\考研调剂信息等一系列资源&#xff0c;助你一战成硕。 百度网盘群 2024考研 微信公众号&#xff1a;考研保研直通车&#xff0c;坚持方便、省时的原则&#xff…

考研人导航上线啦

科大学长开发的考研人导航上线啦 &#xff0c;可以帮助考研学生更高效的获取最新考研复试信息和备考资料 考研人导航官网:https://kaoyan.ahy2.top

从事架构师岗位快2年了,聊一聊我对架构的一些感受和看法

从事架构师岗位快2年了&#xff0c;聊一聊我和ChatGPT对架构的一些感受和看法 职位不分高低&#xff0c;但求每天都能有新的进步&#xff0c;永远向着更高的目标前进。 文章目录 踏上新的征程架构是什么&#xff1f;架构师到底是干什么的&#xff1f;你的终极目标又是什么&…

ChatGPT的出现,让我们必须思考未来孩子的职业

最近这段时间&#xff0c;大家都在谈论ChatGPT&#xff0c;谈论最多的大概就是它将来会淘汰哪些行业&#xff1f;多少人会因此而失业&#xff1f; 作为父母&#xff0c;我们除了关心自己的发展&#xff0c;当然还关心孩子的未来。 尤其是现在的人工智能发展如此迅速&#xff0c…

chatgpt赋能Python-python影评分析

介绍 Python是一种流行的编程语言&#xff0c;它被广泛应用于各种领域&#xff0c;包括数据分析领域。在电影业&#xff0c;Python也被用于进行影评分析。通过分析影评数据&#xff0c;我们可以了解到观众对于不同电影的看法和评价&#xff0c;从而更好地了解市场需求和趋势。…

GPT、科技、人类的生产、知识与未来(上)

本文将继续结合GPT探讨人工智能技术升级可能对人类社会带来的影响。主要还是侧重历史、社会、文化、经济、政治等角度。 问题的提出&#xff1a;ChatGPT等工具会提高人的工作效率和产出。但它会让人类使用者自身变得更“聪明”&#xff0c;还是“更笨”&#xff1f;更“强”&am…

ChatGPT初尝试——合并Excel表格【AI版】

ChatGPT真的能提升生产力吗&#xff1f;【AI版】 无意间的刷到的视频一、提需求二、ChatGPT用Python编写代码三、意外的解释四、ChatGPT改用Java编写代码五、GPT第二次生成Java代码尾巴 无意间的刷到的视频 晚上在家刷视频&#xff0c;突然看到一个在讲关于AI编程的视频&#…

AI 3.0快速阅读后的思考

AI3.0阅读思考 梳理 几大技术词汇&#xff1a; 卷积神经网络CNN&#xff1a;权重和值之积的和深度神经网络DNN工具&#xff1a;深度指层数&#xff0c;深度学习强化学习符号人工智能亚符号人工智能&#xff0c;感知机&#xff0c;亚符号&#xff0c;从数据中学习机器学习对博…

HTTP的缓存机制是什么?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言HTTP缓存机制简介H…

进阶高级Python开发工程师,不得不掌握的Python高并发编程

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【Python基础】- 文件的读写操作

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

数据分析案例-数据科学相关岗位薪资可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…