人工神经网络之银行客户去留分类问题

这部分主要总结了人工神经网络之银行客户去留分类问题,想要数据的可以联系我啊,微信176202037

一、安装所需的第三方程序包

根据人工神经网络算法模型,我们首先需要在自己的电脑中安装主要的两个第三方程序包,tensorflow和keras(这里注意大小写),打开anaconda prompt输入下列命令进行安装。这里还有一点需要提醒的是,一般安装的tensorflow为最新的版本,但是有的笔记本电脑CUDA版本较旧,所以在运行代码时会显示runtime version类似的显卡内存不够的问题,因此解决方法有两种:(1)降低tensorflow的版本(例如我的电脑上重新把1.12.0版本的tensorflow降低为1.10.0) (2)重新下载新的CUDA版本进行安装。这里建议降低tensorflow版本,因为CUDA安装还挺大的。一些常用的其他安装命令见我的另一篇文章中。

 #Artificial Neural Network
 #Installing Tensorflow and Keras
 #1.On Mac:open "Terminal"
 #On Windows: open "Anaconda Prompt"
 #2. Type:
 #conda install tensorflow
 #conda install -c conda-forge keras
 #conda update --all
 #

二、进行数据的预处理工作和分为训练集与测试集

在这一部分,主要针对银行客户的数据进行预处理,包括了筛选变量、类型编码和One-Hot编码、特征缩放(这一部分一定要做,不做的话影响分类器效果,亲测)等工作,这里就不再详细介绍,这一部分自行查询。相应的代码如下所示:

#Part1 Data Preprocessing
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[:,-1].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])
X=pd.DataFrame(X)
#进行One-Hot编码
#X1=pd.get_dummies(X,columns=[1],drop_first=True)
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_X=StandardScaler()
X_train=sc_X.fit_transform(X_train)
X_test=sc_X.transform(X_test)

三、初始化神经网络并创建输入层、隐藏层和输出层

在这一部分中,是与普通的分类器有很大的不同,在使用人工神经网络算法模型时,最重要的就是对人工神经网络进行初始化并进行相应的创建与参数的设置,一个良好结构和合适的参数能够对人工神经网络预测结果起到至关重要的作用。

首先导入两个包进行初始化神经网络from keras.models import Sequential和用于创建输入层、隐藏层和输出层from keras.layers import Dense。用Sequential()创建ANN的对象classifier,这里先不设定任何参数。随后用创建好的classifier对象调用add方法进行添加输入层和第一层的隐藏层(这里注意在add方法中用Dense进行创建),在创建过程中参数设置非常重要,主要有units=6说明的意思是将第一层隐藏层的神经元个数定为输入层神经元个数和输出层神经元个数总和的平均数,即这里(11+1)/2=6(这是根据经验所得,没有准确性的说法),activation为设置隐藏层的激活函数(一般隐藏层的激活函数设置为rectifier线性整流函数),kernel_initializer设置初始化权重,input_dim设置输入层的神经元个数,这里输入有11维数据,因此设置11个神经元。
人工神经网络训练步骤
隐藏层用rectifier函数,输出层用sigmoid函数

#Part2 Now let's make the ANN
#Importing the Keras 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,activation='relu',kernel_initializer='uniform',input_dim=11)) #根据实践,将隐藏层的神经元个数定为输入层神经元个数和输出层神经元个数总和的平均数,即这里(11+1)/2=6
#units为创建隐藏层个数,activation为设置隐藏层的激活函数,kernel_initializer设置初始化权重,input_dim设置输入层的神经元个数,这里输入有11维数据,因此设置11个神经元

四、增加第二层隐藏层和增加输出层

在增加第二层隐藏层的时候也用到同样的方法add,并且在这里想增加多少个隐藏层就增加多少,如下代码所示。其次构建完隐藏层后再构建输出层,由于输出层只分两个类别,因此设置units=1,输出层的激活函数设置为sigmoid,kernel_initializer设置初始化权重(这里注意当输出层有多分类时,例如三个或三个以上时,则units设置成3,即onehot编码了,activation也设置为softmax,即sigmoid的多分类变形公式)。

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

#Adding the output layer
classifier.add(Dense(units=1,activation='sigmoid',kernel_initializer='uniform')) #当输出变量有三个或三个以上时,则units设置成3,即onehot编码了,activation也设置为softmax,即sigmoid的多分类变形公式

五、编译人工神经网络ANN

与普通的分类器不一样的是,人工神经网络ANN需要进行编译这一步骤,代码如下所示。optimizer='adam’为随机梯度的优化方法,且当输出分类为三个或三个以上,则设置loss=‘categorical_entropy’,metrics为设置模型好坏

#Compiling the ANN
classifier.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy']) #optimizer='adam'为随机梯度的优化方法,且当输出分类为三个或三个以上,则设置loss='categorical_entropy',metrics为设置模型好坏

六、Fit人工神经网络ANN

对人工神经网络ANN进行fit,代码如下所示。其中与普通分类器不一样的是,这里需要设置两个比较常用的参数为batch_size=10,epochs=20,batch learning批量学习(该方法比较常见)和做几期的训练epoch(一般设置epoch=100,这里我设置的为20,为了数据处理起来比较快)。

#Fitting the ANN to the Training set
classifier.fit(X_train, y_train,batch_size=10,epochs=20) #batch learning和做几期的训练epoch

七、人工神经网络ANN的预测以及模型评估

在完成以上步骤后,最后就是直接对测试集进行预测和模型的检测,代码如下所示。由于输出层为sigmoid函数(该函数给出的是预测的概率,所以添加 y_pred1=(y_pred>0.5)这一行代码转换为0 or 1标签值)。

模型评估采用一般常用的方法:混淆矩阵、模型准确性分Accuracy_score以及ROC-AUC曲线(该方法只适合二分类问题)。
混淆矩阵
模型准确分
ROC-AUC曲线

#Part3 Making the predictions and evaluating the model
#Predicting the Test set results
y_pred=classifier.predict(X_test)
y_pred1=(y_pred>0.5)

#Making the confusion matrix
from sklearn.metrics import confusion_matrix
cm=confusion_matrix(y_test,y_pred1)   #准确率为(1550+131)/2000=84.05%

from sklearn.metrics import accuracy_score   #该部分即对cm进行准确率计算
Accuracy_score=accuracy_score(y_test,y_pred1)

#画出ROC-AUC曲线
from sklearn.metrics import roc_curve, auc
fpr,tpr,threshold=roc_curve(y_test,y_pred)
rocauc=auc(fpr,tpr)   #计算AUC
plt.figure(8)
plt.plot(fpr,tpr,'b',label='AUC=%0.2f' % rocauc) #生成ROC曲线
plt.legend(loc='lower right')
plt.plot([0,1],[0,1],'r--')
plt.xlim([0,1])
plt.ylim([0,1])
plt.xlabel('假正率')
plt.ylabel('真正率')
plt.show()

八、小结

以上即为人工神经网络的简单初步构建工作,最重要的是根据经验知识设置人工神经网络中的各个参数以及数据预处理工作,其他调包操作都是浮云,算法本身我也不会啊,直接调包就可以了啊。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值