大师兄的数据分析学习笔记(二十三):人工神经网络

大师兄的数据分析学习笔记(二十二):逻辑回归(Logistic Regression)
大师兄的数据分析学习笔记(二十四):回归树与提升树

一、 关于分类和回归

  • 分类和回归的界限并不大:
  • 分类可以看做是有限状态的回归。
  • 回归可以看做是无限定序数据的分类。
  • 很多模型都是可以在分类回归中互相借鉴使用,只是在细节处理上需要特殊对待,比如人工神经网络
  • 在监督学习中,所谓分类回归的目的,可以理解成以下过程:
  • 给定一些特征和特征的标注,整理他们的特征、标注和连续值。
  • 当一个未知数据进入时,让新数据的特征,和整理好的被给定的数据特征中最相似的数据特征保持一致的分类,或保持相近的连续值。
  • 也就是说让测试集验证集的数据,尽可能的找到训练集中与他们相近的标注,作为他们的标注。
  • 如何近似的标注不止一个,可以用投票或者取平均值的方式决定最终的值,这就是分类回归
  • 分类回归中最简单的模型是线性模型,只是分类线性模型的特殊情况(回归的值只有0和1),且分类效果容易受到离群值和异常值的影响。
  • 逻辑回归模型解决了线性模型的问题,更有一个分类器的样子。

二、感知器

  • 如果从结构化的思维理解模型,线性回归表达式h(x)=\vec{\omega}^T\vec{x}如下:
  • 其中最左侧是数据的特征。
  • 实线表示系数。
  • 特征与值相乘的和SUM为最终值,用来判断类别。
  • 图的左侧为线性判别器
  • 如果最终值SUM不用来直接比较,而是通过一个逻辑函数:


  • 如果函数f是逻辑函数sigmoidg(z)=\frac{1}{1+e^{-z}},则模型变为逻辑回归h(x)=g(\vec{\omega}^T\vec{x})=\frac{1}{1+e^{-\omega^T\vec{x}}}
  • 由于这个结构像是一个感知的单元,通过对特征的感知来做出判断,所以这样的组件被叫做感知器
  • 通过公式可以看出,如果g是单调的,则感知器必然是以线性模型为基础的单调模型。
  • 如果g是非单调的,则感知器会过于复杂,对之后的模块有过大的耦合和不确定性。
  • 为了解决上面的问题,可以将感知器进行并联,如果多个感知器的输出可以被当做特征进入下一级神经元,通过多级的线性变换嵌套,可以实现高阶变换,也就是非线性变换
  • 如果感知器拥有了非线性映射的能力,对复杂数据的分类就会变得简单。

三、人工神经网络

  • 如果纳入更多的感知器,一级一级的连起来,就构成了人工神经网络
  • 图中的线代表的都是参数,且这些参数都是相互独立的。
  • 每个节点都是将参数与属性相乘的和进行转换的过程,也就是感知器
  • 人工神经网络通常是按照层级结构进行排序的,分为输入层隐含层输出层
  • 输入层要求对全部的特征进行归一化
  • 输出层要求为one-hot形式。
  • 隐含层输入与输出进行非线性变换的重要一层,其中对收敛影响较大的是节点中的转换函数f,被称为激活函数,比如逻辑回归中的sigmoid
  • 神经网络中所有参数都要被求出来,可以通过梯度下降法求解。
  • 神经网络为了保证非线性,规模会非常大,参数也会非常多,所以通常会通过反向传播算法随机梯度下降法求解。
  • 反向传播算法的思路分为四步:
  1. 前向计算:当参数被确定后,都会被附上随机值,然后先把特征都输入,然后进行计算。
  2. 计算误差:计算结果和拟合值得误差。
  3. 反向单层调整:根据误差,用梯度下降法调整输出层和隐含层之间一层的系数。
  4. 传播:调整隐含层和输入层之间的误差。
    之后不断迭代上面的过程,不断地输入数据,直到模型的误差达到一定范围以内/迭代或一定次数后,则被认为收敛。
  • 随机梯度下降法就是在每次调整权值时,只选取部分样本进行梯度下降
  • 优点:收敛更快,计算开销少。
  • 缺点:容易陷入局部最优解。
  • 人工神经网络的优点:
  • 非线性拟合能力特别强,只要宽度足够大,深度足够深,可以拟合任何非线性数据。
  • 人工神经网络的问题:
  1. 易受离群点影响,易过拟合(可通过正则化dropout解决)
  2. 属性与结果要在0-1之间。
  3. 输出结果要进行Softmax转化。

四、深度神经网络

  • 深度神经网络就是把人工神经网络的深度加深。
  • 深度神经网络拟合非线性数据的能力会更强,通常用来做图像识别、语音识别和自然语言处理等,是深度学习的基础。
  • 深度神经网络耗费的时间资源和空间资源也要大很多。

四、代码实现

>>>import os
>>>import pandas as pd
>>>import tensorflow as tf
>>>from sklearn.model_selection import train_test_split
>>>from sklearn.metrics import  accuracy_score,recall_score,f1_score
>>>from keras.models import Sequential
>>>from keras.layers.core import Dense,Activation

>>>df = pd.read_csv(os.path.join(".", "data", "WA_Fn-UseC_-HR-Employee-Attrition.csv"))

>>>X_tt,X_validation,Y_tt,Y_validation = train_test_split(df.JobLevel,df.JobSatisfaction,test_size=0.2)
>>>X_train,X_test,Y_train,Y_test = train_test_split(X_tt,Y_tt,test_size=0.25)

>>>mdl = Sequential()
>>>mdl.add(Dense(50))
>>>mdl.add(Activation("sigmoid"))
>>>mdl.add(Dense(2))
>>>mdl.add(Activation("softmax"))
>>>mdl.compile(loss="mean_squared_error",optimizer=tf.keras.optimizers.SGD(lr=0.05))
>>>mdl.fit(X_train,Y_train,epochs=50,batch_size=800)

>>>xy_lst = [(X_train,Y_train),(X_validation,Y_validation),(X_test,Y_test)]
>>>for i in range(len(xy_lst)):
>>>    X_part = xy_lst[i][0]
>>>    Y_part = xy_lst[i][1]
>>>    Y_pred = mdl.predict(X_part).argmax(axis=1)
>>>    print(i)
>>>    print("NN","-ACC",accuracy_score(Y_part,Y_pred))
>>>    print("NN","-REC",recall_score(Y_part,Y_pred,average='macro'))
>>>    print("NN","-F1",f1_score(Y_part,Y_pred,average='macro'))
>>>    print("="*40)
Epoch 1/50
2/2 [==============================] - 0s 3ms/step - loss: 6.2342
Epoch 2/50
2/2 [==============================] - 0s 1000us/step - loss: 6.2133
Epoch 3/50
2/2 [==============================] - 0s 1ms/step - loss: 6.2000
Epoch 4/50
2/2 [==============================] - 0s 2ms/step - loss: 6.1928
Epoch 5/50
2/2 [==============================] - 0s 1ms/step - loss: 6.1893
Epoch 6/50
2/2 [==============================] - 0s 0s/step - loss: 6.1877
Epoch 7/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1870
Epoch 8/50
2/2 [==============================] - 0s 0s/step - loss: 6.1867
Epoch 9/50
2/2 [==============================] - 0s 0s/step - loss: 6.1866
Epoch 10/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1866
Epoch 11/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 12/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 13/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 14/50
2/2 [==============================] - 0s 1ms/step - loss: 6.1865
Epoch 15/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 16/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 17/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 18/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 19/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 20/50
2/2 [==============================] - 0s 1ms/step - loss: 6.1865
Epoch 21/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 22/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 23/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 24/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 25/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 26/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 27/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 28/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 29/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 30/50
2/2 [==============================] - 0s 1ms/step - loss: 6.1865
Epoch 31/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 32/50
2/2 [==============================] - 0s 999us/step - loss: 6.1865
Epoch 33/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 34/50
2/2 [==============================] - 0s 1ms/step - loss: 6.1865
Epoch 35/50
2/2 [==============================] - 0s 1ms/step - loss: 6.1865
Epoch 36/50
2/2 [==============================] - 0s 1ms/step - loss: 6.1865
Epoch 37/50
2/2 [==============================] - 0s 1ms/step - loss: 6.1865
Epoch 38/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 39/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 40/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 41/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 42/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 43/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 44/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 45/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 46/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 47/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 48/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
Epoch 49/50
2/2 [==============================] - 0s 0s/step - loss: 6.1865
Epoch 50/50
2/2 [==============================] - 0s 1000us/step - loss: 6.1865
0
NN -ACC 0.022675736961451247
NN -REC 0.022099447513812154
NN -F1 0.02807017543859649
========================================
1
NN -ACC 0.017006802721088437
NN -REC 0.01818181818181818
NN -F1 0.02040816326530612
========================================
2
NN -ACC 0.02040816326530612
NN -REC 0.022641509433962266
NN -F1 0.029629629629629627
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容