基于波士顿房价的预测的BP神经网络

在Pycharm上测试可以跑的通。

# -*- coding: utf-8 -*-
# Import libraries necessary for this project
# 载入此项目所需要的库
import numpy as np
import pandas as pd# 双曲正切函数,该函数为奇函数
def tanh(x):#numpy.exp():返回e的幂次方e_p = np.exp(x)e_m = np.exp(-x)return (e_p - e_m) / (e_m + e_p)# tanh导函数性质:f'(x) = 1 - f(x)^2
def tanh_derivative(x):return 1-tanh(x)*tanh(x)# sigmoid函数
def sigmoid(x):return 1/(1+np.exp(-x))def sigmoid_derivative(x):return sigmoid(x)*(1-sigmoid(x))class NeuralNetwork:def __init__(self, layers, activation='sigmoid'):''':参数layers: 神经网络的结构(输入层-隐含层-输出层包含的结点数列表):参数activation: 激活函数类型'''if activation == 'tanh':  # 也可以用其它的激活函数self.activation = tanhself.activation_prime = tanh_derivativeelif activation == 'sigmoid':  # 也可以用其它的激活函数self.activation = sigmoidself.activation_prime = sigmoid_derivativeelse:pass# 存储权值矩阵self.weights = []# range of weight values (-1,1)# 初始化输入层和隐含层之间的权值for i in range(1, len(layers) - 1):r = 2 * np.random.random((layers[i - 1] + 1, layers[i] + 1)) - 1  # add 1 for bias nodeself.weights.append(r)# 初始化输出层权值r = 2 * np.random.random((layers[i] + 1, layers[i + 1])) - 1self.weights.append(r)def fit(self, X, Y, learning_rate=0.01, epochs=10000):# Add column列 of ones to X# This is to add the bias unit to the input layerX = np.hstack([np.ones((X.shape[0], 1)), X])#列连接for k in range(epochs):  # 训练固定次数if k % 1000 == 0:print('epochs:', k)# Return random integers from the discrete uniform distribution in the interval [0, low).i = np.random.randint(X.shape[0], high=None)a = [X[i]]  # 从m个输入样本中随机选一组for l in range(len(self.weights)):dot_value = np.dot(a[l], self.weights[l])  # 权值矩阵中每一列代表该层中的一个结点与上一层所有结点之间的权值activation = self.activation(dot_value)a.append(activation)# 反向递推计算delta:从输出层开始,先算出该层的delta,再向前计算error = Y[i] - a[-1]  # 计算输出层deltadeltas = [error * self.activation_prime(a[-1])]# 从倒数第2层开始反向计算deltafor l in range(len(a) - 2, 0, -1):deltas.append(deltas[-1].dot(self.weights[l].T) * self.activation_prime(a[l]))# [level3(output)->level2(hidden)]  => [level2(hidden)->level3(output)]deltas.reverse()  # 逆转列表中的元素# backpropagation# 1. Multiply its output delta and input activation to get the gradient of the weight.# 2. Subtract a ratio (percentage) of the gradient from the weight.for i in range(len(self.weights)):  # 逐层调整权值layer = np.atleast_2d(a[i])  # View inputs as arrays with at least two dimensionsdelta = np.atleast_2d(deltas[i])self.weights[i] += learning_rate * np.dot(layer.T, delta)  # 每输入一次样本,就更新一次权值def predict(self, x):a = np.concatenate((np.ones(1), np.array(x)))  # a为输入向量(行向量)for l in range(0, len(self.weights)):  # 逐层计算输出a = self.activation(np.dot(a, self.weights[l]))return aif __name__ == '__main__':# Load the Boston housing dataset# 载入波士顿房屋的数据集data = pd.read_csv('boston_house_prices.csv')prices = data['MEDV']features = data.drop('MEDV', axis=1)# 计算prices中的'MEDV'的最小值、最大值、均值、中值和标准差;# 将运算结果储存在相应的变量中。# TODO: Minimum price of the data# 目标:计算价值的最小值minimum_price = np.min(prices)# TODO: Maximum price of the data# 目标:计算价值的最大值maximum_price = np.max(prices)# TODO: Mean price of the data# 目标:计算价值的平均值mean_price = np.mean(prices)# TODO: Median price of the data# 目标:计算价值的中值median_price = np.median(prices)# TODO: Standard deviation of prices of the data# 目标:计算价值的标准差std_price = np.std(prices)# Show the calculated statistics# 目标:输出计算的结果print("\nStatistics for Boston housing dataset:\n")print("Minimum price: ${:,.2f}".format(minimum_price))print("Maximum price: ${:,.2f}".format(maximum_price))print("Mean price: ${:,.2f}".format(mean_price))print("Median price ${:,.2f}".format(median_price))print("Standard deviation of prices: ${:,.2f}".format(std_price))# Success# 完成print("\nBoston housing dataset has {} data points with {} variables each.\n".format(*data.shape))# 接下来,你需要把波士顿房屋数据集分成训练和测试两个子集。通常在这个过程中,数据也会被重新排序,以消除数据集中由于
# 序而产生的偏差。 在下面的代码中,你需要:
# 使用 sklearn.model_selection 中的 train_test_split,
# 将features和prices的数据都分成用于训练的数据子集和用于测试的数据子集。
# 分割比例为:80%的数据用于训练,20%用于测试;
# 选定一个数值以设定 train_test_split 中的 random_state ,这会确保结果的一致性;
# 最终分离出的子集为X_train,X_test,y_train,和y_test。# TODO: Import 'train_test_split'
from sklearn.model_selection import train_test_split# TODO: Shuffle and split the data into training and testing subsets
X_train, X_test, y_train, y_test = np.array(train_test_split(features, prices, test_size=0.2, random_state=0),dtype=object)
# Success
print("Training and testing split was successful.\n")
# 从sklearn.preprocessing导入数据标准化模块
from sklearn.preprocessing import StandardScaler
# 分别初始化对特征和目标值的归一化
# print(X_train.shape)# 训练与测试数据标准化处理
# 从sklearn.preprocessing导入数据标准化模块
from sklearn.preprocessing import StandardScaler# 分别特征和目标值的标准化器
ss_X = StandardScaler()
ss_y = StandardScaler()# 分别对训练和测试数据的特征以及目标值进行标准化处理
X_train = ss_X.fit_transform(X_train)
X_test = ss_X.transform(X_test)y_train = ss_y.fit_transform(y_train.values.reshape(-1, 1))
y_test = ss_y.transform(y_test.values.reshape(-1, 1))'''
X_train = (X_train - min(X_train)) / (max(X_train) - min(X_train))
X_test = (X_test  - min(X_test )) / (max(X_test ) - min(X_test ))
y_train = (y_train  - min(y_train )) / (max(y_train ) - min(y_train ))
y_test  = (y_test   - min(y_test  )) / (max(y_test  ) - min(y_test  ))
'''nn = NeuralNetwork([13, 100, 1], 'tanh')  # 网络结构: 1输入1输出,1个隐含层(包含3个节点)# 使用BP神经网络模型  BP Neural Network 对美国波士顿地区房价进行预测
nn.fit(X_train, y_train, learning_rate=0.01, epochs=10000)  # 训练网络print('w:', nn.weights)  # 调整后的权值列表nn_y_predict = []
for s in X_test:nn_y_predict.append(nn.predict(s))print(s, nn.predict(s))  # 预测房价# 从sklearn.metrics一次导入mean_squared_error以及mean_absolue_error用于回归性能评估
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error# 使用mean_squared_error模块,并输出评估结果。
print('\nThe Mean Squared Error (MSE) of BP Neural Network is',mean_squared_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(nn_y_predict)))# 使用mean_absolute_error模块,并输出评估结果。
print('The Mean Absoluate Error (MAE) of BP Neural Network is',mean_absolute_error(ss_y.inverse_transform(y_test), ss_y.inverse_transform(nn_y_predict)))
print('\nQuestion : How to decrease the MSE and MAE in order to increase the accuracy of prediction ?')

结果如下:

DL练习1:基于boston_house_prices的BP神经网络相关推荐

  1. 【笔记】基于边缘检测和BP神经网络的大豆杂草识别研究

    <基于边缘检测和BP神经网络的大豆杂草识别研究> 单位:吉林农业大学信息技术学院 作者:侯雨 数据获取 设备:大疆 DJI 精灵3 相机:EXMOR 1/2.3 RGB 相机 拍照:飞行高 ...

  2. matlab 神经网络dpi,基于DPI和BP神经网络的P2P流量识别研究

    研究与开发 现代计算机 2019.04 上 文章编号:1007-1423(2019)10-0031-05 DOI:10.3969/j.issn.1007-1423.2019.10.007 基于 DPI ...

  3. 【机器学习】基于AutoEncoder的BP神经网络的tensorflow实现

    [机器学习]基于AutoEncoder的BP神经网络的tensorflow实现 一.基于AutoEncoder的BP神经网络 1.1.BP神经网络 1.1.1.BP神经网络结构 1.1.2.BP神经网 ...

  4. gwo算法matlab源代码,智能优化算法应用:基于GWO优化BP神经网络 - 附代码

    智能优化算法应用:基于GWO优化BP神经网络 - 附代码 智能优化算法应用:基于GWO优化BP神经网络 - 附代码 智能优化算法应用:基于GWO优化BP神经网络 文章目录智能优化算法应用:基于GWO优 ...

  5. Python基于PyTorch实现BP神经网络ANN分类模型项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Per ...

  6. Python基于PyTorch实现BP神经网络ANN回归模型项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在人工神经网络的发展历史上,感知机(Multilayer Per ...

  7. 生猪价格matlab,基于时间序列的BP神经网络猪肉价格预测

    科技创新 2m6钎第20期I科技创新与应用 基于时间序列的BP神经网络猪肉价格预测 张津张瑞斌 (成都理工大学管理科学学院,四川成都610059) 摘要:猪肉价格是不稳定的,起伏变化的,猪肉价格的预测 ...

  8. 【智能控制实验】基于MATLAB的BP神经网络设计

    实验五:基于MATLAB的BP神经网络设计 一.实验要求: 重点是掌握BP神经网络的学习算法原理和代码设计方法,应用MATLAB编写BP神经网络训练方法:应用神经网络工具箱设计BP神经网络实现对输入输 ...

  9. 基于遗传算法的BP神经网络齿轮箱故障诊断实例

    一.BP神经网络概述 BP网络是一类多层的前馈神经网络.它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法.BP算法是 Rumelhart等人在1986年 ...

最新文章

  1. 你了解计算机系统的层次结构吗?计算机语言怎么发展的?
  2. winform下通过webclient使用非流方式上传(post)数据和文件
  3. mysql cluster cge (commercial)_Mysql 产品分类和版本说明
  4. Debug Docker: Error response from daemon: dial unix docker.raw.sock: connect: connection refused
  5. 解决VS2013调试ASP.NET中无法调试的问题:当前不会命中断点。在 XXXX.dll 中找到了 XXX.cs 的副本,但是当前源代码与 XXXX.dll 中内置的版本不同。...
  6. TypeScript里的混合类型
  7. 架构师必须搞懂DNS,一篇文章就够了。
  8. 在Linux上构建ASP.NET环境-asp.net关注
  9. Eigen 简明教程之如何从Python转到Eigen
  10. 走进我的交易室04_成功交易的 3 个 M
  11. matlab数学实验 课件,MATLAB数学实验课件.PPT
  12. oppo手机使用应用沙盒动态修改imei信息
  13. 17-Spring持久层框架整合
  14. AVR单片机(ATmega128)单片机运算乘除法大约所需时间
  15. PHP 仍然是最流行的服务器端编程语言
  16. 达朴汇联CEO张焱:从隐私计算出发,共建Web3.0
  17. timestamp类型增加天、月、年后的时间
  18. css vss irf,网络虚拟化技术:VSS、IRF2和CSS解析
  19. GPU VS FPGA对比
  20. 清除计算机用户缓存,如何清除电脑的内存缓存?

热门文章

  1. Python ModuleNotFoundError: No module named ‘xlrd‘
  2. Volley 请求提示:com.android.volley.ClientError
  3. Kotlin的几个面试题
  4. ERROR: Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46
  5. JAVA中priorityqueue详解
  6. mariadb(第二章)增删改 MariaDB 数据类型
  7. Python day10 global关键字、函数递归、匿名函数、map函数的用法详解
  8. ef linq 中判断实体中是否包含某集合
  9. Bundle捆绑压缩技术
  10. MySQL基本了解与使用