1、安装tensorflow和keras
注:tensorflow只能在64为windows系统上安装
在Mac上安装和在Windows上安装所用的命令都是一样的,只不过在Mac上是在命令行中运行这3条命令,在windows是在Anaconda Prompt运行这3条命令。
注:我们这里安装teras的方法是pip install teras
tensorflow是深度学习的一个框架,也可以说是深度学习的一个工具包,它是开源的,用于科研和商业产品,用它搭建神经网络模型比较复杂,keras是基于tensorflow的一个界面友好的深度学习框架,本节课就利用keras工具包搭建神经网络模型。
2、数据预处理
代码:
# Installing Tensorflow
# Install Tensorflow from the website: https://www.tensorflow.org/versions/r0.12/get_started/os_setup.html
# Installing Keras
# pip install --upgrade keras
# Part 1 - Data Preprocessing
# Importing the libraries
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
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:]
# 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)
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
(1)提取自变量
用户数据.PNG
第一列索引是不在计数列内的,用户行号、用户姓名(surname)、用户Id对用户是否离开该银行的影响不大,所以自变量从第3行开始算。
(2)分类数据
分类数据.PNG
由于国籍和性别是字符串,在这里我们要把它转换成分类数值,性别用labelencoder转化成0和1就可以了,但是国籍有三个,用labelencoder转化成0、1、2之后不能代表分类,所以还要用onehotencoder转化成虚拟变量,这里为了避免虚拟陷阱,要在转化好的虚拟变量中任意去除一列。
(3)划分训练集和测试集
划分数据.PNG
在python中划分的是四个变量,训练集自变量,训练集因变量,以及测试集的自变量和因变量。
(4)特征缩放
特征缩放前后.PNG
前面说过神经网络算法对于欧氏距离比较敏感,所以必须对于自变量进行特征缩放,由于因变量是分类数据0和1,不做处理。
3、创建神经网络
代码:
# 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(output_dim = 6, init = 'uniform', activation = 'relu', input_dim = 11))
# Adding the second hidden layer
classifier.add(Dense(output_dim = 6, init = 'uniform', activation = 'relu'))
# Adding the output layer
classifier.add(Dense(output_dim = 1, init = '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, nb_epoch = 100)
(1)添加隐藏层和输出层
sequential()方法用于初始化人工神经网络,dense用于添加隐藏层和输出层,output_dim参数用于设置该层的神经元个数,init用于设置初始化参数,这里设置的uniform,也就是均匀分布,activation用于设置激活函数,这里的隐藏层都设置的relu函数。
注:在添加第一层隐藏层时,要设置输入层的神经元个数,也就是input_dim
在设置输出层时,要改变神经元的个数,由于输出是每个用户可能离开的概率,所以输出神经元为1,输出的激活函数是sigmoid函数。
注:如果输出的不是一个分类结果,而是多个分类结果,那么sigmoid函数就要改成softmax,表示对于不同种类的可能性,而不只是是否离开的可能性,还可能加上是否到乙银行的可能性
(2)编译分类器
创建分类器的输入层、输出层和隐藏层,以及设置好参数和激活函数之后,只等于完成了随机梯度下降的第一步和第二步,接下来我们还要设置最优化损失函数的算法,可就是随机梯度下降法,这里设置的optimizer参数就是用于设置优化算法的,我们这里选择参数adam,它是随机梯度下降算法的一种,计算速率快,而且可以是损失函数最小化。
最小二乘法.PNG
S函数.PNG
选择要用的损失函数,其实在机器学习的许多算法中,最后的问题,都归结于最小化损失函数的问题,比如说线性拟合算法中的最小二乘法。但是这里由于输出层的激活函数是Sigmoid函数,用最小二乘法做损失函数是不适合的。分类问题用最小二乘法做损失函数都不合适。
我们这里选择的损失函数是cross_entropy,因为这是一个二值类型的分类问题,我们选择的是binery_cross_entropy,如果是多值类型的分类问题,我们就会选择categorical_cross_entropy。
metrics的中文意思是度量,也就是判断一个模型好或者不好的依据,它是一个向量。
(3)拟合分类器
我们在这里不仅要设置训练集和测试集,还有批量处理的大小,就是一次优化参数,我们的损失函数是几个观察值的平方和。epoch是说我们要进行几轮的参数优化,一轮代表遍历所有样本数据一遍。
3、评估模型
代码:
# Part 3 - Making the 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)
我们这里自己把0.5作为分类标准,得到混淆矩阵。神经网络运行过程中与其他函数不同的是,它是每训练一轮就会输出一次损失函数的值以及评价标准accuracy的值。
网友评论