目录

一、实验目的

二、实验环境

三、实验内容和过程


一、实验目的

  1. 掌握神经网络及深度学习建模分析
  2. 掌握使用神经网络实现分类的方法
  3. 掌握使用Keras框架实现深度学习的方法
  4. 了解各分类器之间的差异

二、实验环境

操作系统:Windows

应用软件:anaconda jupyter

三、实验内容和过程

关于solver:

-lbfgs:机器学习中解决函数最优化问题比较常用的手段,在牛顿法基础上提出的一种求解函数根的算法。 牛顿法与拟牛顿法学习笔记(五)L-BFGS 算法_皮果提的博客-CSDN博客_bfgs算法

-sgd:随机梯度下降,每次选择一个mini-batch,而不是全部样本,使用梯度下降来更新模型参数。它解决了随机小批量样本的问题。

-adam: Kingma, Diederik, and Jimmy Ba提出的机遇随机梯度的优化器,基本解决了之前提到的梯度下降的一系列问题,比如随机小样本、自适应学习率、容易卡在梯度较小点等问题。  注意:默认solver ‘adam’在相对较大的数据集上效果比较好(几千个样本或者更多),对小数据集来说,lbfgs收敛更快效果也更好。

关于activation(p121):

-identity:f(x) = x

-logistic:其实就是sigmod,f(x) = 1 / (1 + exp(-x))

-tanh:f(x) = tanh(x)

-relu:f(x) = max(0, x)

例题1:使用神经网络实现葡萄酒数据集的分类分析,分类值为葡萄酒质量,(1-10之间),选择不同的优化权重算法(solver)进行模型比较并分析。 (包含模型分类评估) *使用“quality”列

代码如下(示例):

#第一步 读入数据,划分训练集和测试集
import pandas as pd
import numpy as np
filename='data\wine.csv'
data=pd.read_csv(filename,index_col='idx')
data.drop('good_or_not',axis=1,inplace=True)
x = data.drop('quality', axis=1).values.astype(float)
y = data['quality'].values.astype(float)
from sklearn import model_selection#分割训练集和测试集
X_train,X_test,y_train,y_test = model_selection.train_test_split(x,y,test_size=0.5,random_state=1)#划分训练/测试集
print(X_train)

结果:

#第二步 创建神经网络分类器,训练网络节点连接权重及偏置项(此处用到lbfgs函数)
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=(5, 5),random_state=1)#表示有两个隐藏层,每层神经元个数分别为3、3
mlp.fit(X_train,y_train)
print(mlp.score(X_test,y_test))#mlp.score查看模型评分,返回给定测试数据和标签上的平均准确度 

结果: 

#第三步 分类器性能评估
from sklearn import metrics
y_predicted = mlp.predict(X_test)
print("Classification report for %s" % mlp)
print(metrics.classification_report(y_test, y_predicted) )
print( "Confusion matrix:\n", metrics.confusion_matrix(y_test, y_predicted) )

#重新计算,修改为sgd函数
#创建神经网络分类器,训练网络节点连接权重及偏置项
mlp = MLPClassifier(solver='sgd',alpha=1e-5,hidden_layer_sizes=(3,3),random_state=1)#表示有两个隐藏层,每层神经元个数分别为3、3
mlp.fit(X_train,y_train)
print(mlp.score(X_test,y_test))#mlp.score查看模型评分,返回给定测试数据和标签上的平均准确度 

结果:

#分类器性能评估
y_predicted = mlp.predict(X_test)
print("Classification report for %s" % mlp)
print(metrics.classification_report(y_test, y_predicted) )
print( "Confusion matrix:\n", metrics.confusion_matrix(y_test, y_predicted) )

Keras是一个使用Python开发的多层神经网络API,能方便地以开源深度学习库,作为后端运行。Keras具有高度模块化、简单及可扩充等特性,支持简易和快速的原型设计。
   Keras采用模型构建神经网络。序贯(Sequential)模型是简单的线性模型,由多个网络层按输出顺序线性堆叠而成,只有一个输出。函数式(Functional)模型则在序列模型的基础上,允许用户定义多输出、非循环有向或具有共享层的结构。

基于Keras训练神经网络模型可以按照以下三个步骤进行(以序贯模型为例):
•定义神经网络的结构,说明组成网络的层类型、参数;
•定义神经网络的损失函数、优化器、性能评估指标,并编译模型;
•使用数据集训练模型、预测、性能分析。

1.Keras模型常用层 基于Keras构建神经网络一般包括以下通用层。

(1)Dense层:全连接层,其节点与下一层节点完全连接。 Dense(units,input_dim,…)

(2)Activation层:激活层,对上一层的输出施加激活函数。常见的激活函数有softmax,relu,tanh,sigmoid等。

(3)Dropout层:中断层,在训练过程中,每次更新参数时按照一定的概率,随即断开给定百分比(p)的输入神经元连接,用于防止过拟合。

2.Keras模型常用函数 Keras提供了神经网络模型编译、训练及性能评估的各类函数,使用方法如下。

(1)模型编译:model.compile(loss,optimizer,metrics,…)

(2)模型训练: model.fit(x,y,batch_size,epochs,verbose,validation_split,validation_data,…)

(3)模型评估:model.evaluate(x_test,y_test,verbose,...) 返回模型指定的loss和metrics。

(4)模型预测:model.predict(x_test,verbose,...)

例题2:基于Keras建立深度神经网络模型,采取不同的数据集划分比例(9:1,8:2,7:3),为葡萄酒数据集训练分类器并进行分析。(包含模型分类性能的评估)

*使用“good_or_not”列(此处仅展示比例为9:1的情况)

import pandas as pd
filename='data\wine.csv'
data=pd.read_csv(filename,index_col='idx')
data.loc[data['good_or_not']=='good','good_or_not']=1
data.loc[data['good_or_not']=='not','good_or_not']=0
data.drop('quality',axis=1,inplace=True)
x = data.drop('good_or_not', axis=1).values.astype(float)
y = data['good_or_not'].values.astype(float)
from keras.models import Sequential
from keras.layers import Dense, Activation
import numpy as np
from sklearn.model_selection import train_test_split
# 定义模型结构
model = Sequential()
model.add(Dense(units=16, input_dim=11))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(3))
model.add(Activation('softmax'))
#定义模型损失函数和优化器,并编译
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=["accuracy"])
#1、深度学习模型,输入输出都为多维张量,统一使用小写字母 x,y,划分比例9:1
x_train, x_test, y_train, y_test= train_test_split(x, y, train_size=0.9, test_size=0.1, random_state=0)
from keras.utils import np_utils
y_train_ohe = np_utils.to_categorical(y_train, num_classes = 3)
y_test_ohe = np_utils.to_categorical(y_test, num_classes = 3)
#2、模型的训练及评估
model.fit(x_train, y_train_ohe, epochs=20, batch_size=1, verbose=2, validation_data=(x_test,y_test_ohe))

#3、评估模型
loss, accuracy = model.evaluate(x_test, y_test_ohe,verbose=2)
print('loss = {},accuracy = {} '.format(loss,accuracy) )

#4、查看预测结果
prob = model.predict(x_test,verbose=2)
#classes = model.predict_classes(x_test,verbose=2)
classes=np.argmax(prob,axis=1)
print('测试样本数:',len(classes))
print("分类概率:\n",prob)
print("分类结果:\n",classes)
from sklearn.metrics import classification_report
print('分类性能报告如下:')
print(classification_report(list(y_test),list(classes)))

使用神经网络实现葡萄酒数据集的分类分析相关推荐

  1. wine葡萄酒数据集KNNSVM分类实验

    声明:本篇文章是本人课程作业的内容,只提供平时学习参考使用,请勿转载. 介绍:数据挖掘 来源:kaibo_lei_ZZU 本片文章是使用分类算法KNN,和SVM支持向量机分类算法,对Wine数据集进行 ...

  2. 神经网络实现Mnist数据集简单分类

    本文针对mnist手写数字集,搭建了四层简单的神经网络进行图片的分类,详细心得记录下来分享 我是采用的TensorFlow框架进行的训练 import tensorflow as tf from te ...

  3. paddle2.0高层API实现自定义数据集文本分类中的情感分析任务

    paddle2.0高层API实现自定义数据集文本分类中的情感分析任务 本文包含了: - 自定义文本分类数据集继承 - 文本分类数据处理 - 循环神经网络RNN, LSTM - ·seq2vec· - ...

  4. 利用神经网络对鸢尾花数据集分类

    利用神经网络对鸢尾花数据集分类 详细实现代码请见:https://download.csdn.net/download/weixin_43521269/12578696 一.简介 一个人工神经元网络是 ...

  5. 二隐层的神经网络实现MNIST数据集分类

    二隐层的神经网络实现MNIST数据集分类 传统的人工神经网络包含三部分,输入层.隐藏层和输出层.对于一个神经网络模型的确定需要考虑以下几个方面: 隐藏层的层数以及各层的神经元数量 各层激活函数的选择 ...

  6. 模拟数据集上训练神经网络,网络解决二分类问题练习

    #2018-06-24 395218 June Sunday the 25 week, the 175 day SZ ''' 模拟数据集上训练神经网络,网络解决二分类问题.'''import tens ...

  7. 一层神经网络实现鸢尾花数据集分类

    一层神经网络实现鸢尾花数据集分类 1.数据集介绍 2.程序实现 2.1 数据集导入 2.2 数据集乱序 2.3 数据集划分成永不相见的训练集和测试集 3.4 配成[输入特征,标签]对,每次喂入一小撮( ...

  8. 用matlab实现用Bp神经网络对iris数据集进行分类(以及影响分类性能的参数条件)

    数据集已上传,结尾链接下载即可!!! 一.实验内容 Iris鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性,分别对应花萼长度,花 ...

  9. 鸢尾花数据集、月亮数据集二分类可视化分析

    鸢尾花数据集.月亮数据集二分类可视化分析 目录 鸢尾花数据集.月亮数据集二分类可视化分析 一.线性LDA算法 1.LDA算法 2.鸢尾花数据集 2.月亮数据集 二.K-Means算法 1.K-Mean ...

最新文章

  1. MongoDB 文件(MongoDB fs)
  2. HTML 中的marquee标签详解
  3. python3 url编码 空格 + 简介
  4. spring—AOP 的动态代理技术
  5. 网易云音乐的算法有什么特点_当算法设计音乐厅时会发生什么?
  6. mysql序列 mybatis_MySQL实现序列(Sequence)效果以及在Mybatis中如何使用这种策略
  7. python怎么获取word文档的章节_python读取word文档的方法
  8. python多项式求导_Python求离散序列导数的示例
  9. 《游戏设计师修炼之道:数据驱动的游戏设计》一1.1 风险管理的作用
  10. 反三角函数在线计算机,arcsin计算器(反三角函数计算器在线)
  11. android 修复工具,安卓手机修复工具下载 牛学长安卓手机修复工具(安卓手机修复助手) v2.4.0.15 官方免费安装版 下载-脚本之家...
  12. 用VScode写C/C++,从下载安装到配置使用
  13. 【软技能】完全写作指南
  14. python刷网易云_如何用Python爬取网易云歌曲?秘诀在这~
  15. usb中cdc dfu hid msc的区别
  16. jquery中ajax中的参数,jquery中的ajax参数
  17. 狄利克雷条件和帕塞瓦尔定理
  18. MongoDB:count 结果不准确的原因与解决方法
  19. TCO2017 Semifinal 部分题解
  20. 微信公众平台开发案例

热门文章

  1. PHP菜刀在线WEB版源码
  2. node-red教程6 串口控件的使用
  3. NJ4X源码阅读分析笔记系列(一)——项目整体分析 1
  4. 数据挖掘实战:个人信贷违约预测
  5. 【PHP版】顺丰下单API 、查询订单API、取消订单API
  6. JAVA外卖项目第一天 技术选型和包结构
  7. 新物种打造爆品,总共分几步?DeepTalk vol.1
  8. 路由器DNS被篡改怎么办?如何看路由器是否被劫持
  9. 乱砍设计模式之三 -- DECORATOR模式
  10. 蘑菇街2021财年Q1财报:直播GMV连续18个季度保持增长