动手搭建一个ANN网络

今天我们看一下关于ANN神经网络的知识。

首先,我建议使用anaconda3作为编译环境,但是其中缺少Keras和Tensorflow需要手动下载。Tensorflow需要安装在python3x以上的环境,so.....anaconda3 is best。

一、准备工作

使用ubuntu搭建ANN

问题一:

pip不好使

原因:这是因为通过apt-get安装的pip版本太老了,老的pip版本依赖requests.compat.IncompleteRead,而在2.4.0版本的requests中已经移除了

解决方法sudo wget https://bootstrap.pypa.io/get-pip.py  --no-check-certificate

sudo python get-pip.py

问题二:安装anaconda以后不好用

# 将anaconda的bin目录加入PATH,根据版本不同,也可能是~/anaconda3/bin

echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc(直接进入添加)

# 更新bashrc以立即生效

source ~/.bashrc 

 x.astype(int)

 

二、问题需求

我们要做的是,给定一个CSV文件,我们提取其中的信息

RowNumber CustomerId Surname CreditScore Geography Gender Age Tenure Balance NumOfProducts HasCrCard IsActiveMember EstimatedSalary Exited
1 15634602 Hargrave 619 France Female 42 2 0 1 1 1 101348.88 1

针对给定的信息训练模型,使得人工神经网络可以自动预测结果

三、上代码

step1:首先要知道,csv中并不是所有信息对于我们训练的模型都有用,显然,人的编号、名字对他留不留银行并没有任何的关系,所以我们把这部分丢掉

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('Churn_Modelling.csv') #读入文件
X = dataset.iloc[:, 3:13].values             #x中读入3:13列的结果
y = dataset.iloc[:, 13].values

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
onehotencoder = OneHotEncoder(categorical_features = [1])
X = onehotencoder.fit_transform(X).toarray()
X = X[:, 1:]

我们存储好了训练集

step2:

这里介绍一个库----from sklearn.model_selection import train_test_split,用来划分训练集和测试集

并对数据进行操作

from sklearn.model_selection import train_test_split
# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

  • 一般形式

train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train datatestdata,形式为:

X_train,X_test, y_train, y_test =

cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)

  • 参数解释

train_data:所要划分的样本特征集

train_target:所要划分的样本结果

test_size:样本占比,如果是整数的话就是样本的数量

random_state:是随机数的种子。

随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。

随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:

种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。


这里介绍一个数据处理方法(虽然没搞懂是做什么)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

step3:搭建ANN神经网络

Dense:

keras.layers.core.Dense ( units, 
			activation=None, 
			use_bias=True, 
			kernel_initializer='glorot_uniform',
			bias_initializer='zeros', 
			kernel_regularizer=None, 
			bias_regularizer=None, 
			activity_regularizer=None,
			kernel_constraint=None, 
			bias_constraint=None )
units:大于0的整数,代表该层的输出维度。
activation:激活函数,为预定义的激活函数名(参考激活函数),或逐元素(element-wise)的Theano函数。如果不指定该参数,将不会使用任何激活函数(即使用线性激活函数:a(x)=x)
use_bias: 布尔值,是否使用偏置项
kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers
kernel_regularizer:施加在权重上的正则项,为Regularizer对象
bias_regularizer:施加在偏置向量上的正则项,为Regularizer对象
activity_regularizer:施加在输出上的正则项,为Regularizer对象
kernel_constraints:施加在权重上的约束项,为Constraints对象
bias_constraints:施加在偏置上的约束项,为Constraints对象
input_dim:可以指定输入数据的维度

Sequential模型 ,顾名思义,就是多个网络层的线性堆叠 
建立模型有两种方式:一是向layer添加list的方式,二是通过 .add() 方式一层层添加(一个add为一层)

confusion_matrix淆矩阵是一个2 × 2的情形分析表,显示以下四组记录的数目:作出正确判断的肯定记录(真阳性)、作出错误判断的肯定记录(假阴性)、作出正确判断的否定记录(真阴性)以及作出错误判断的否定记录(假阳性)。表1给出了混淆矩阵的结构。

动手搭建一个ANN网络_第1张图片

# Part 2 - Now let's make the ANN!

# Importing the Keras libraries and packages
import keras
from keras.models import Sequential
from keras.layers import Dense

# Initialising the ANN
classifier = Sequential()

# Adding the input layer and the first hidden layer
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 'relu', input_dim = 11))

# Adding the second hidden layer
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 'relu'))

# Adding the output layer
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))

# Compiling the ANN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

# Fitting the ANN to the Training set
classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)

# Part 3 - Making predictions and evaluating the model

# Predicting the Test set results
y_pred = classifier.predict(X_test)
y_pred = (y_pred > 0.5)

# Making the Confusion Matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

    




你可能感兴趣的:(动手搭建一个ANN网络)