初次接触深度学习,记录一点思考和想法,请大家多多指正。

首先是工具包的导入pycharm

这里我用到了numpy科学计算库,json轻量级的数据交换格式包,以及matplotlib绘图工具包

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

首先我们的目的是用13个有关因素预测房价,相当于有13个自变量x,1个输出y,我们要寻找这些x,与y之间的函数。

首先是数据的预处理

我们有大概500多个数据,类似于这样的形式,它们之间用空格分开。

使用np.fromdata来读取数据记录在data一维数组中,sep参数我猜测是这个函数读取数据的方式,如果有空格分开就代表这空格两边各有一个数据。之后将data由一维的数组用reshape函数转化为一个14*506的数组矩阵,再将其中的80%的数据用来训练,20%的数据用来测试。随后对数据进行归一化处理,归一化的目的为了将来取下降梯度计算的detla值更方便,这里我也不太明白是为什么。

def load_data():datafile='/home/xiaobin0264/fzb/datafile/housing.data'data=np.fromfile(datafile,sep=' ')#定义十三个变量名feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE','DIS','RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]feature_num = len(feature_names)data = data.reshape([data.shape[0] // feature_num, feature_num])ratio = 0.8offset = int(data.shape[0] * ratio)training_data = data[:offset]#求出训练数据的最大值最小值和平均值datamax,datamin,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(datamin[i], datamin[i], avgs[i])data[:, i] = (data[:, i] - datamin[i]) / (datamax[i] - datamin[i])test_data = data[offset:]return training_data,test_datatraining_data, test_data = load_data()
#x方向全选,y方向选到最后一组
x = training_data[:, :-1]
y = training_data[:, -1:]

将输入因素x,和输出房价y,分别从training_data训练数据中取出,建立一个神经网络的类Network将其中神经元权重的w,和b初始化,这里我用随机数初始化了13个w的权重,初始化偏置b为0

forwoard 函数为前向计算函数,作用是用来计算当前的权重和偏置下的预测值z

loss函数为损失函数,这里因为我们所预测的房价是一个连续的实数,因此我们使用均方差来计算预测值和实际值的损失,至于为什么用均方差不用绝对值差,是因为后面我们计算梯度下降时为了考虑到梯度的存在性,均方差会比绝对值差更好。

gradient 函数为梯度计算函数,我们为了使我们的loss函数最小,要找出一个w和一个b使loss处于最低点,但我们不知道何处是最低,所以我们先采用一个随机的w和b,通过计算函数梯度的梯度来判断此时我们的w和b处于一个怎样的趋势,若梯度为负值,我们增大自变量,函数值就会下降,反之则增大。所以为了求得最小值我们使用梯度下降的方法,通过不断地迭代计算,每次通过计算的梯度,对w和b进行反梯度的很小的移动。

update 函数为更新函数,对每次迭代后产生新的w,b进行更新,用来做下一次计算。

train 函数 训练函数,将上述所有的操作整合

class 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 - ycost = error * errorcost = np.mean(cost)return costdef gradient(self, x, y):z = self.forward(x)gradient_w = (z - y) * xgradient_w = np.mean(gradient_w, axis=0)#这里增加axis轴是为了使梯度矩阵由横向矩阵变为竖向矩阵便于后面加减计算gradient_w = gradient_w[:, np.newaxis]gradient_b = (z - y)gradient_b = np.mean(gradient_b)return gradient_w, gradient_bdef update(self,gradient_w,gradient_b,delta=0.01):self.w=self.w-gradient_w*deltaself.b=self.b-gradient_b*deltadef train(self,x, y,iterations=100,delta=0.01):losses=[]for i in range(iterations):z=self.forward(x)L=self.loss(z,y)gradient_w,gradient_b=self.gradient(x,y)self.update(gradient_w,gradient_b)losses.append(L)if (i+1)%10==0:print("itera={},loss={}".format(i,L))return losses

以下是代码的实现调用,用matplotlib显示训练的loss变化过程

train_data, test_data = load_data()
x = train_data[:, :-1]
y = train_data[:, -1:]
# 创建网络
net = Network(13)
num_iterations = 2000
# 启动训练
losses = net.train(x, y, iterations=num_iterations, delta=0.01)# 画出损失函数的变化趋势
plot_x = np.arange(num_iterations)
plot_y = np.array(losses)
plt.plot(plot_x, plot_y)

结果是这样

y轴是losses损失,x轴是迭代次数

深度学习笔记——波士顿房价预测相关推荐

  1. 深度学习:波士顿房价预测

    深度学习:波士顿房价预测 1.代码 #加载波士顿房价数据 import keras from keras.datasets import boston_housing (train_data,trai ...

  2. 深度学习入门——波士顿房价预测

    基于神经网络模型的波士顿房价预测 波士顿房价预测是一个经典的机器学习任务,类似于程序员世界的"Hello World".以"波士顿房价预测"任务为例,我们学习如 ...

  3. 深度学习(波士顿房价预测)

    本程序采用百度paddlepaddle深度学习框架,并在百度AI Studio平台上运行. 目录 1实验背景 2 实验过程 2.1 数据处理 2.1.1数据集导入并按规定形状保存 2.1.2数据集的划 ...

  4. 深度学习案例分享 | 房价预测 - PyTorch 实现

    原文链接 大家好,我是小寒. 今天来分享一个真实的 Kaggle ⽐赛案例:预测房价.此数据集由 Bart DeCock 于 2011 年收集,涵盖了2006-2010 年期间亚利桑那州埃姆斯市的房价 ...

  5. 使用Python和Numpy进行波士顿房价预测任务(二)【深度学习入门_学习笔记】

    使用Python和Numpy进行波士顿房价预测任务–详解 目录: 一.数据处理 (1)读入数据 (2)数据形状变换 (3)数据集划分 (4)数据归一化处理 (5)封装成load data函数 二.模型 ...

  6. 使用Python和Numpy进行波士顿房价预测任务(一)【深度学习入门_学习笔记】

    波士顿房价预测是一个经典的机器学习任务,类似于程序员世界的"Hello World".和大家对房价的普遍认知相同,波士顿地区的房价是由诸多因素影响的. 下载数据集:https:// ...

  7. AI Studio 飞桨 零基础入门深度学习笔记2-基于Python编写完成房价预测任务的神经网络模型

    AI Studio 飞桨 零基础入门深度学习笔记2-基于Python编写完成房价预测任务的神经网络模型 波士顿房价预测任务 线性回归模型 线性回归模型的神经网络结构 构建波士顿房价预测任务的神经网络模 ...

  8. 【深度学习】实战Kaggle竞赛之线性模型解决波士顿房价预测问题(Pytorch)

    [深度学习]实战Kaggle竞赛之线性模型解决波士顿房价预测问题 文章目录 1 概述1.1 Competition Description1.2 Practice Skills 2 数据处理 3 训练 ...

  9. 教你使用百度深度学习框架PaddlePaddle完成波士顿房价预测(新手向)

    首先,本文是一篇纯新手向文章,我自己也只能算是入门,有说错的地方欢迎大家批评讨论 目录 一.人工智能.机器学习.深度学习 二.PaddlePaddle(飞桨) 三.波士顿房价预测模型 数据处理 模型设 ...

最新文章

  1. 移动的验证码安全问题告诉移动网站后......,1860意指一般人不会这样做.
  2. 扩容是元素还是数组_02 数组(附ArrayList源码分析)
  3. 修改$_env php,Laravel如何友好的修改.env配置文件详解
  4. PowerShell管理Azure
  5. pat根据中序遍历和先序遍历_算法题399:从前序与中序遍历序列构造二叉树
  6. ubuntu14.04下apt-get install出现E: Sub-process /usr/bin/dpkg returned an error code 解决方法
  7. java 物理内存_聊聊Java中的内存
  8. 想进美团不知道选哪个技术岗位?这里有一份通关秘籍!
  9. linux操作系统基础与实训教程,清华大学出版社-图书详情-《Linux操作系统基础与实训教程》...
  10. python编程(python开发的三种运行模式)
  11. asp网络编程:Web程序中网页间数据传递方法小结
  12. Newtonsoft.Json介绍
  13. 如何学习、如何画思维导图
  14. MarkDown安装后不能预览问题(awesomium_sdk的下载)
  15. Matlab - Matlab中M文件的创建和调用
  16. 快速上手 TypeScript
  17. git远程分支强制覆盖本地分支
  18. vb.net获取汉字串拼音首字母
  19. 转:NO.523 Aidan HawkenCarina Round - Walking Blind
  20. usleep java_usleep是否创建了线程取消点?

热门文章

  1. Vim snippet 小技巧
  2. 初学MyBatis PageHelper.startPage(m,n)报错,自动添加limit
  3. MDI Jade的基本使用方法
  4. 傅里叶变换及其应用讲义(stanford_ee261)
  5. 每周记录(4月底停更了qvq)
  6. Netconf网络配置协议讲解
  7. 微信公众号获取Biz值
  8. 水池进水与放水问题:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.........(多线程应用)...
  9. 比较探讨T-Sql(二)
  10. vue判断离开当前页面_vue离开当前页面触发的函数代码