机器学习-初级进阶(深度学习-人工神经网络)

一、人工神经网络

  1. 什么是神经元?

    在这里插入图片描述
    图中可以看出一个完整的神经元主要由三部分组成:输入层->隐藏层->输出层,
    在这里插入图片描述
    输入层与隐藏层之间多种关系通过W(权重)来区别
    在这里插入图片描述
    隐藏层对于输入值和权重进行分析,最终输出判断结果
    在这里插入图片描述

    实际生活中神经网络是由多个神经元组成,视图如下:
    在这里插入图片描述

  2. 激活函数(而在A-NN中的具体操作是这样的,我们做输入(X)和它们对应的权重(W)的乘积之和,并将激活函数f(x)应用于其获取该层的输出并将其作为输入馈送到下一个层。)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    激活函数选择简单示例:
    在这里插入图片描述
    在这里插入图片描述
    在实际操作中被广泛引用的激活函数为“线性整流函数”
    在这里插入图片描述

  3. 神经网络如何运作?
    在这里插入图片描述
    在这里插入图片描述

  4. 神经网络如何学习?

    在这里插入图片描述
    图中C表示预测结果和真实结果的差的平方,利用此值不断更新权重分布
    在这里插入图片描述
    在这里插入图片描述
    对于运作的深入了解资料
    在这里插入图片描述

  5. 梯度下降

    在这里插入图片描述
    在这里插入图片描述
    随机梯度下降每一步都对w进行跟新,批量梯度下降是一期操作后对w进行跟新
    在这里插入图片描述
    在这里插入图片描述
    对于三维梯度下降的表示

    在这里插入图片描述
    梯度下降学习资料
    在这里插入图片描述
    在这里插入图片描述

  6. 利用随机梯度下降训练神经网络

    步骤在这里插入图片描述
    数据:

    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
    2,15647311,Hill,608,Spain,Female,41,1,83807.86,1,0,1,112542.58,0
    3,15619304,Onio,502,France,Female,42,8,159660.8,3,1,0,113931.57,1
    4,15701354,Boni,699,France,Female,39,1,0,2,0,0,93826.63,0
    5,15737888,Mitchell,850,Spain,Female,43,2,125510.82,1,1,1,79084.1,0
    6,15574012,Chu,645,Spain,Male,44,8,113755.78,2,1,0,149756.71,1
    7,15592531,Bartlett,822,France,Male,50,7,0,2,1,1,10062.8,0
    ...数据为某个银行中客户的一系列信息与最终谁否会离开本银行做一定的预测
    
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder, StandardScaler
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import confusion_matrix
    from keras.models import Sequential  # 帮助我们初始化人工网络
    from keras.layers import Dense
    import pandas as pddataset = pd.read_csv("Churn_Modelling.csv")
    X = dataset.iloc[:, 3:-1].values
    y = dataset.iloc[:, -1].values# 分类数据
    label_encoder_X_1 = label_encoder_X_2 = LabelEncoder()
    X[:, 1] = label_encoder_X_1.fit_transform(X[:, 1])
    label_encoder_X = LabelEncoder()
    X[:, 2] = label_encoder_X_2.fit_transform(X[:, 2])
    # 因为国家列有多种为了不影响顺序需要OneHotEncoder
    one_hot_encoder = OneHotEncoder(categorical_features=[1])
    X = one_hot_encoder.fit_transform(X).toarray()
    # 防止虚拟变量陷阱,去掉第一列
    X = X[:, 1:]# 划分测试集,训练集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)# 特征缩放
    sc_X = StandardScaler()
    X_train = sc_X.fit_transform(X_train)
    X_test = sc_X.transform(X_test)# 初始化人工神经网络
    classifier = Sequential()# 添加输入层和第一个隐藏层, (隐藏层=(输入值个数 + (分类个数-1)) / 2)
    classifier.add(Dense(units=6, activation="relu", kernel_initializer="uniform", input_dim=11)
    )  # units: 隐藏层个数, activation: 激活函数 kernel_initializer: 初始化权重 input_dim: 输入层神经元个数
    # 添加第二个隐藏层
    classifier.add(Dense(units=6, activation="relu", kernel_initializer="uniform")
    )  # units: 隐藏层个数, activation: 激活函数 kernel_initializer: 初始化权重 input_dim: 输入层神经元个数# 添加输出层
    classifier.add(Dense(units=1, activation="sigmoid", kernel_initializer="uniform")
    )  # 若输出结果有三个或三个以上的时候要改动units,将activation改为activation="softmax"# 编译神经网络
    classifier.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"]
    )  # optimizer:优化算法,选择随机梯度下降中的adam算法, loss: 损失函数,若分类结果只有两种选择binary_crossentropy,若有三种以上选择categorica, metrics: 判断方式为accuracy(准确度)# 进行训练拟合
    classifier.fit(X_train, y_train, batch_size=10, epochs=100)  # 每经过十个数据则更新一次权重,epochs:进行100期的训练# 预测测试集结果
    y_pred = classifier.predict(X_test)y_pred = (y_pred > 0.5)cm = confusion_matrix(y_test, y_pred)
    

    输出结果:
    最后一期训练输出结果:

    Epoch 100/10010/8000 [..............................] - ETA: 1s - loss: 0.2593 - accuracy: 0.9000530/8000 [>.............................] - ETA: 0s - loss: 0.3374 - accuracy: 0.8660
    1110/8000 [===>..........................] - ETA: 0s - loss: 0.3454 - accuracy: 0.8649
    1740/8000 [=====>........................] - ETA: 0s - loss: 0.3407 - accuracy: 0.8649
    2000/8000 [======>.......................] - ETA: 0s - loss: 0.3460 - accuracy: 0.8620
    2470/8000 [========>.....................] - ETA: 0s - loss: 0.3555 - accuracy: 0.8567
    2850/8000 [=========>....................] - ETA: 0s - loss: 0.3479 - accuracy: 0.8593
    3440/8000 [===========>..................] - ETA: 0s - loss: 0.3407 - accuracy: 0.8608
    4060/8000 [==============>...............] - ETA: 0s - loss: 0.3381 - accuracy: 0.8628
    4690/8000 [================>.............] - ETA: 0s - loss: 0.3368 - accuracy: 0.8629
    5260/8000 [==================>...........] - ETA: 0s - loss: 0.3346 - accuracy: 0.8639
    5960/8000 [=====================>........] - ETA: 0s - loss: 0.3371 - accuracy: 0.8631
    6350/8000 [======================>.......] - ETA: 0s - loss: 0.3347 - accuracy: 0.8630
    6950/8000 [=========================>....] - ETA: 0s - loss: 0.3337 - accuracy: 0.8630
    7580/8000 [===========================>..] - ETA: 0s - loss: 0.3349 - accuracy: 0.8628
    8000/8000 [==============================] - 1s 93us/step - loss: 0.3344 - accuracy: 0.8629可见准确度达0.86%
    


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部