这段时间参加的数模模拟刚好用到了深度学习的底层架构神经网络模型,于是自己索性就将我数模中用到的代码封装了以下,做成如下的神经网络模型函数以及包括结果的可视化、拟合度的计算结果输出,方便各位友友可以直接使用。

(插一个本人之前写的关于神经网络原理的介绍:https://zhuanlan.zhihu.com/p/486668654)

当然面对不同的数据,最优的神经网络结构和参数会有所不同,大家可以根据自己的拟合结果,修改我下面的函数参数,从而获取最优模型。(如果各位友友面对的是分类问题,只需把激活函数改成softmax即可,当然损失函数也可以进行修改,关于损失函数的研究比较有代表性的Huber loss和M-regression,感兴趣的友友可以自行查阅相关文献。)

后期有时间的话,我也会写一个遗传算法或者粒子群算法(maybe是其他启发式算法)用来和下面的函数结合,自动帮各位找到预测结果最优的模型参数。

​
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score、
import matplotlib.pyplot as plt
from keras import regularizers
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, Dropout
from sklearn import preprocessingdef NN_Plot(i, X, Y, model_output = False):# i 为需要输出图表的y轴标签;# X 为自变量的数据集;# Y 为输出变量的数据;# model_output 表示是否返回 训练后的模型;# 1. 数据集标准化min_max_scaler = preprocessing.MinMaxScaler()X_scale = min_max_scaler.fit_transform(X)# 2.训练集和验证集的划分 X_train, X_test, Y_train, Y_test = train_test_split(X_scale, Y, test_size=0.3, random_state = n)# 3. 模型的结构设计model = Sequential()  # 初始化,很重要model.add(Dense(units = 1000,   # 输出大小,也是该层神经元的个数 activation='relu',  # 激励函数-RELU  input_shape=(X_train.shape[1],)  # 输入大小, 也就是列的大小  ))  model.add(Dropout(0.3))  # 丢弃神经元链接概率  model.add(Dense(units = 1000,  kernel_regularizer=regularizers.l2(0.01),  # 施加在权重上的正则项  activity_regularizer=regularizers.l1(0.01),  # 施加在输出上的正则项  activation='relu' # 激励函数  # bias_regularizer=keras.regularizers.l1_l2(0.01)  # 施加在偏置向量上的正则项  ))  model.add(Dropout(0.15))model.add(Dense(units = 500,  kernel_regularizer=regularizers.l2(0.01),  # 施加在权重上的正则项  activity_regularizer=regularizers.l1(0.01),  # 施加在输出上的正则项  activation='relu' # 激励函数  # bias_regularizer=keras.regularizers.l1_l2(0.01)  # 施加在偏置向量上的正则项  ))  model.add(Dropout(0.15))model.add(Dense(units = 500,  kernel_regularizer=regularizers.l2(0.01),  # 施加在权重上的正则项  activity_regularizer=regularizers.l1(0.01),  # 施加在输出上的正则项  activation='relu' # 激励函数  # bias_regularizer=keras.regularizers.l1_l2(0.01)  # 施加在偏置向量上的正则项  ))  model.add(Dropout(0.2))model.add(Dense(units = 1,     activation='linear',kernel_regularizer=regularizers.l2(0.01)# 线性激励函数 回归一般在输出层用这个激励函数    ))  model.compile(optimizer='adam',loss='mse', # 损失函数为均方误差metrics=['accuracy'])# 4. 模型的训练,可以自行修改batch——size大小和epoch大小hist = model.fit(X_train, Y_train,batch_size = 32, epochs=250, verbose = 2,validation_data=(X_test, Y_test))# 5. 模型的损失值变化图绘制plt.plot(hist.history['loss'])plt.plot(hist.history['val_loss'])plt.title('Model loss')plt.ylabel('Loss')plt.xlabel('Epoch')plt.legend(['Train', 'Val'], loc='upper right')plt.show()y_pred = model.predict(X_test)y_pred_train = model.predict(X_train)# 6. 模型在训练集和测试集上的拟合程度图绘制plt.figure(figsize=(30,9),dpi = 200)plt.subplot(1,2,1)ls_x_train = [x for x in range(1, len(y_pred_train.tolist())+1)]plt.plot(ls_x_train, y_pred_train.tolist(), label = '训练集的预测值' , marker = 'o')plt.plot(ls_x_train, Y_train.iloc[:,0].tolist(), label = '训练集的真实值',linestyle='--', marker = 'o' )plt.ylabel(i, fontsize = 15)plt.legend(fontsize = 15)plt.xticks(fontsize = 12)plt.yticks(fontsize = 12)plt.subplot(1,2,2)ls_x = [x for x in range(1, len(y_pred.tolist())+1)]plt.plot(ls_x, y_pred.tolist(), label = '验证集的预测值' , marker = 'o')plt.plot(ls_x, Y_test.iloc[:,0].tolist(), label = '验证集的真实值',linestyle='--',marker = 'o')plt.ylabel(i, fontsize = 15)plt.xticks(fontsize = 12)plt.yticks(fontsize = 12)plt.legend(fontsize = 15)# R方的计算r2_train = R_2(Y_train.iloc[:,0].tolist(), y_pred_train)r2_test = R_2(Y_test.iloc[:,0].tolist(), y_pred)print([r2_train, r2_test, (r2_train+r2_test)/2 ])# 是否返回训练得到的模型if model_output==True:return [model, min_max_scaler]# R方的计算函数
def R_2(y, y_pred):y_mean = mean(y)sst = sum([(x-y_mean)**2 for x in y])ssr = sum([(x-y_mean)**2 for x in y_pred])sse = sum([(x-y)**2 for x,y in zip(y_pred, y)])return 1-sse/sstNN_model = NN_Plot(i, X, Y, model_output = False) # 如果需要输出模型,只需把False改成True​

以下是本人用上述自己写的代码建立的工业模型拟合结果,拟合度达到了95%,大家也可以根据自己的需求和结果的效果修改其中的参数,或者增加隐藏层,从而优化自己的神经网络模型。

Neural Network with Python(神经网络回归+结果可视化python代码)相关推荐

  1. Introduction to Graph Neural Network(图神经网络概论)翻译:目录总览

    前言:最近对图神经网络部分比较感兴趣,偶尔看到清华大学刘知远老师在今年3月份发表的一本书:Introduction to Graph Neural Network,于是将该书内容进行翻译,记录阅读中自 ...

  2. 李宏毅《机器学习》丨5. Tips for neural network design(神经网络设计技巧)

    Author:AXYZdong 李宏毅<机器学习>系列 参考视频地址:https://www.bilibili.com/video/BV1Ht411g7Ef 参考文档:DataWhale文 ...

  3. 李宏毅《机器学习》丨6. Convolutional Neural Network(卷积神经网络)

    Author:AXYZdong 李宏毅<机器学习>系列 参考视频地址:https://www.bilibili.com/video/BV1Ht411g7Ef 参考文档:DataWhale文 ...

  4. 【李宏毅机器学习】Recurrent Neural Network Part1 循环神经网络(p20) 学习笔记

    李宏毅机器学习学习笔记汇总 课程链接 文章目录 Example Application Slot Filling 把词用向量来表示的方法 1-of-N encoding / one-hot Beyon ...

  5. 脉冲神经网络:MATLAB实现脉冲神经网络(Spiking Neural Network,SNN) 用于图像分类(提供MATLAB代码)

    一.脉冲神经网络 脉冲神经网络 (Spiking Neural Network,SNN) ,是第三代神经网络.其旨在弥合神经科学和机器学习之间的差距,使用最拟合生物神经元机制的模型来进行计算,更接近生 ...

  6. python神经网络框架有哪些,python调用神经网络模型

    人工智能 Python深度学习库有哪些 由于Python的易用性和可扩展性,众多深度学习框架提供了Python接口,其中较为流行的深度学习库如下:第一:CaffeCaffe是一个以表达式.速度和模块化 ...

  7. python神经网络编程 豆瓣,用python构建神经网络

    python深度学习框架学哪个 Python深度学习生态系统在这几年中的演变实属惊艳.pylearn2,已经不再被积极地开发或者维护,大量的深度学习库开始接替它的位置.这些库每一个都各有千秋. 我们已 ...

  8. python神经网络编程pdf_[人工智能]Python神经网络编程(高清,带详细书签) pdf文件[11.49MB]-码姐姐下载...

    Python神经网络编程(高清,带详细书签) [更多关于<深度学习>资料,加qq群:851916415领取!] 本书首先从简单的思路着手,详细介绍了理解神经网络如何工作所必须的基础知识.第 ...

  9. python 套索回归_适用于python的自适应套索

    python 套索回归 This is my second post on the series about penalized regression. In the first one we tal ...

最新文章

  1. 冲刺第四天 1.4 FRI
  2. iebook 发布到网站 独家秘诀
  3. 《学习JAVASCRIPT数据结构与算法》 ES6 部分笔记
  4. 中兴手机数据通道打不开_中兴手机有流量,但是数据开不了怎么办?
  5. Python中的join()函数和split()函数的用法
  6. 1-4dockerfile基本使用
  7. 光驱怎么挂载第二个光驱_重装系统下侦测不到光驱怎么解决?
  8. install opencv on mac and use it in xcode
  9. [转载] 实现宿主机和VirtualBox下虚拟机ping相通教程
  10. qqxml图片代码_QQxml卡片代码合集超大图、清明上河图、官方认证推荐等
  11. SI4463软件开发记录
  12. 系统集成项目管理工程师(中级)常用英语汇总
  13. 测试场景设计-登录设计
  14. 解决MAC删除应用程序后依然残留的图标
  15. 抖音的服务器到底啥配置?
  16. 虚拟机启动后一直黑屏的解决办法
  17. 车仪表台上的装饰_45汽车仪表盘装饰_汽车仪表盘种类
  18. Baumer工业相机堡盟相机如何使用自动曝光功能(自动曝光优点和行业应用)(C++)
  19. win7 APPCRASH(解决方法)(转)
  20. H5新增标签以及常用标签

热门文章

  1. 【Simulation】2 Elements of Probability-双样本均值方差的讨论
  2. 网站兼容性(持续更新)
  3. vsCode中Server is already running from different workspace错误解决办法
  4. mysql sdi_SDI文件扩展名 - 什么是.sdi以及如何打开? - ReviverSoft
  5. 美国家漏洞数据库显示苹果iOS漏洞最多
  6. 【repost】如何学好编程 (精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你...
  7. html中bak是什么文件怎么打开,bak文件怎么打开?小编教你bak文件打开方法
  8. 【AlexNet】数字手势识别
  9. 杰理-断码屏的显示其实也很酷炫
  10. presto sql语法总结