02_08 python机器学习_第二章监督学习_神经网络

第二章监督学习_神经网络

01 多层感知机 原理

先来看俩个图片:

import mglearn

# 快速演示返回的内容是dot文件
# 以后看到graphviz包直接联想dot就可以了
# 线性模型
gh1 = mglearn.plots.plot_logistic_regression_graph()
# 神经网络,多层感知机
gh2 = mglearn.plots.plot_single_hidden_layer_graph()

pdf1_file = r"D:\999_Temp\999_Tmp\line.dot"
pdf2_file = r"D:\999_Temp\999_Tmp\neural.dot"

# 需要将dot文件转换一下可以读的格式,默认是转成pdf
gh1.render(pdf1_file)
gh2.render(pdf2_file)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SmW6GCVT-1656393158833)(Image/2022-06-23-12-20-12.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-27ONJlad-1656393158835)(Image/2022-06-23-12-20-42.png)]
原理:

  • 多层感知机是从线性模型演化来的
  • 多层感知机是在线性模型的基础上增加虚拟层(可以是多层)来提高线性模型能力
  • 虚拟层上的每个单元称作隐单元
  • 计算步骤1: (各个特征 * 各个特征加权) 到各个隐单元的值
  • 计算步骤2: (各个隐单元 * 虚拟层权重) 虚拟层各个隐单元的值

比较线性模型与多层感知机模型的公式:

  • 线性模型

    y= w[0]*x[0] + w[1]*x[1] + … + w[n]*x[n] + b
    x: 特征
    w: 特征权重
    b: 偏移量

  • 多层感知机模型 (1个虚拟层, 3个隐单元为例)

    h[0] = tanh(w[0,0]*x[0] + w[1,0]*x[1] + w[2,0]*x[2] + w[3,0]*x[3] + b[0])
    h[1] = tanh(w[0,0]*x[0] + w[1,0]*x[1] + w[2,0]*x[2] + w[3,0]*x[3] + b[1])
    h[2] = tanh(w[0,0]*x[0] + w[1,0]*x[1] + w[2,0]*x[2] + w[3,0]*x[3] + b[2])
    y = v[0]*h[0] + v[1]*h[1] + v[2]*h[2] + b
    x:特征
    w:特征至虚拟层的权重 (由数据计算得出)
    b:偏移量
    h:虚拟层
    h[index]:虚拟层中的隐单元
    tanh:正切双曲线 (为了校正虚拟层的计算结果)
    v:虚拟层至结果的权重 (由数据计算得出)

02 神经网络介绍

书中提到了两个神经网络模型,但是讲解说明时只用了一个举例说明.

  • from sklearn.neural_network import MLPClassifier
  • from sklearn.neural_network import MLPRegressor
    看起来一个是处理分类一个是处理回归问题的.
    书中只是简单介绍了一下这俩个模型,可能是因为sklearn并不是神经网络的专用库.
    关于比较好的深度学库书中提到了3个: 有精力的可以去研究研究
  • keras
  • lasagna
  • tensor-flow

03 神经网络模型 的重要参数

因为书中只有关于MLPClassifier的例子,所以就以这个为例简单介绍.
神经网络模型区别于线性模型的关键点是增加了虚拟层和隐单元,因此最重要的参数首先要介绍这两个.
接下了进入了枯燥公式环节:
前提: 数据样本中有100个特征, 1个虚拟层, 100个隐单元

(线性模型)权重个数: 100(特征) * 1(输出) = 100(权重)

(神经网络模型)权重个数:
 (1)各特征到虚拟层个单元: 100(特征) * 100(第一层隐单元) = 10000(权重)
 (2)隐单元到输出: 100(第一层隐单元) * 1(输出) = 100(权重)
 总结权重: (1) + (2) = 10100(权重)

以此类推,2层虚拟单元 100个隐单元的场合:
 (1)各特征到虚拟层个单元: 100(特征) * 100(第一层隐单元) = 10000(权重)
 (2)第一虚拟层各隐单元至第二虚拟层各隐单元: 100(第一层隐单元)* 100(第二层隐单元) = 10000(权重)
 (3)第二虚拟层各隐单元到输出: 100(第一层隐单元) * 1(输出) = 100(权重)
 总结权重: (1) + (2) + (3) = 20100(权重)

由此可见神经网络的计算量非常大.sklearn由于只含有简单的神经网络入门模型,
因此没有GPU计算这样的高级功能,因此使用sklearn处理神经网络模型效率不高.

结合上面的介绍,接下来讲解神经网络最重要的三个参数
虚拟曾,隐单元,alpha(正则化参数)

# 神经网络模型: 重要参数说明
# 概要:
#   数据源采用2分类数据源, 100各数据样本
#   创建两个画布
#       第一画布: 一个隐层 观察 10/100隐单元  [0.0001, 0.01, 0.1, 1]alpha 对于模型的影响
#       第二画布: 二个隐层 观察 10/100隐单元  [0.0001, 0.01, 0.1, 1]alpha 对于模型的影响

import mglearn
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPClassifier
# 2分类数据集
from sklearn.datasets import make_moons
# 数据分离
from sklearn.model_selection import train_test_split

# 一个虚拟层
fig, axes = plt.subplots(2, 4, figsize=(20, 8))
for<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值