人工神经网络-Python

作者: 灵妍 | 来源:发表于2018-05-10 19:55 被阅读50次
    1、安装tensorflow和keras

    注:tensorflow只能在64为windows系统上安装

    安装tensorflow和keras.PNG
    在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)编译分类器

    随机梯度下降步骤.PNG
    创建分类器的输入层、输出层和隐藏层,以及设置好参数和激活函数之后,只等于完成了随机梯度下降的第一步和第二步,接下来我们还要设置最优化损失函数的算法,可就是随机梯度下降法,这里设置的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的值。

    相关文章

      网友评论

        本文标题:人工神经网络-Python

        本文链接:https://www.haomeiwen.com/subject/qnyurftx.html