机器学习-初级进阶(深度学习-人工神经网络)
一、人工神经网络
-
什么是神经元?

图中可以看出一个完整的神经元主要由三部分组成:输入层->隐藏层->输出层,

输入层与隐藏层之间多种关系通过W(权重)来区别

隐藏层对于输入值和权重进行分析,最终输出判断结果

实际生活中神经网络是由多个神经元组成,视图如下:

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




激活函数选择简单示例:


在实际操作中被广泛引用的激活函数为“线性整流函数”

-
神经网络如何运作?


-
神经网络如何学习?

图中C表示预测结果和真实结果的差的平方,利用此值不断更新权重分布


对于运作的深入了解资料

-
梯度下降


随机梯度下降每一步都对w进行跟新,批量梯度下降是一期操作后对w进行跟新


对于三维梯度下降的表示
梯度下降学习资料


-
利用随机梯度下降训练神经网络
步骤

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