多层感知机(Multi-Layer Perceptron)

简介

生物神经网络具有相互连接的神经元,神经元带有接受输入信号的树突,然后基于这些输入,它们通过轴突向另一个神经元产生输出信号。使用人工神经网络(ANN)来模拟这个过程,称为神经网络。神经网络是一个试图模仿自然生物神经网络的学习模式的机器学习框架。创建神经网络的过程从最基本的形式单个感知器开始。

感知器就是一个能够把训练集的正例和反例划分为两个部分的器件,并且能够对未来输入的数据进行分类。举个例子:一个小孩子的妈妈在教他什么是苹果什么不是,首先会去拿一个苹果过来说“这个是苹果”,然后拿一个水杯过来说“这不是”,然后拿一个稍微不一样的苹果过来说“这也是”,,,最后,小孩子学习到了用一个模型(判断苹果的标准)来判断什么是苹果什么不是。

感知器具有一个或者多个输入、偏置、激活函数和单个输出。感知器接受输入,将它们乘以一些权重,然后将它们传递到激活函数以产生输出。有许多激活函数可供选择,如逻辑函数、三角函数、阶跃函数等。我们还确保向感知器添加偏差,这避免了所有输入可能等于零的问题(这意味着没有乘以权重会有影响)。

原理

感知器的输入空间(特征空间)一般为Rn⊇XR^n\supseteq XRn⊇X,即n维向量空间,输出空间为Y={+1,−1}Y=\{+1,-1\}Y={+1,−1}即−1-1−1代表反例,+1+1+1代表正例。例如,输入x∈Xx\in Xx∈X,对应于输入空间的RnR^nRn中的某个点,而输出y∈Yy\in Yy∈Y表示改点所在的分类。需要注意的是,输入xxx是一个n维的向量,即x=(x1,x2,...xn)x=(x_1,x_2,...x_n)x=(x1​,x2​,...xn​)。现在,已经有了输入和输出的定义,就可以给出感知机f(x)f(x)f(x)的模型:f(x)=sign(w×x+b)f(x)=sign(w\times x+b)f(x)=sign(w×x+b)其中,向量x=(x1,x2,...xn)x=(x_1,x_2,...x_n)x=(x1​,x2​,...xn​)中的每个分量代表输入向量空间RnR^nRn中向量xxx的每个分量xix_ixi​的权重,或者说参数。b∈Rb \in Rb∈R称为偏差,w×xw \times xw×x表示向量www和xxx的内积,signsignsign是一个符号函数,即sign(x)={+1x≥0−1x<0sign(x) =\begin{cases} +1 \ x\ge 0\\ -1 \ x<0 \end{cases}sign(x)={+1 x≥0−1 x<0​上面这个函数f(x)f(x)f(x)称为感知机。

神经网络简述

神经网络一般由输入层(Input Layer)、隐藏层(Hidden Layer)、输出层(Output Layer)组成,每层由单元(Units)组成,输入层是由训练集的实例特征向量传入,经过连接节点的权重(Weight)传入下一层,上一层的输出是下一层的输入,隐藏层的个数是任意的,输出层和输入层只有一个。如图。
-
当有输出的时候,可以将其与已知标签进行比较,并相应地调整权重(权重通常以随机初始化值开始)。重复此过程,直到达到允许迭代的最大数量或可接受的错误率。上面网络中如果每个神经元都是由感知器构成的,则这个网络称为Multi-layer Perceptron多层感知机。多层感知机的优点是:可以学习非线性模型,并且可以实时学习;然而,多层感知机也有自身的缺点:有隐藏层的MLP包含一个非凸性损失函数,存在超过一个最小值,所以不同的随机初始权重可能导致不同的验证精确度;MLP要求调整一系列超参数,如隐藏神经元、隐藏层的个数以及迭代的次数;MLP对特征缩放比较敏感。

在使用神经网络前需要注意以下事项。

  1. 使用神经网络训练数据之前,必须确定神经网络层数,以及每层单元个数。
  2. 特征向量在被传入输入层时通常被先标准化(Normalize)到0和1之间。
  3. 离散型变量可以被编码成每一个输入单元对应一个特征可能赋的值。例如,特征值A可能取三个值(a0,a1,a2a_0,a_1,a_2a0​,a1​,a2​),可以使用3个输入单元来代表A,如果A=a0A=a_0A=a0​,那么代表a0a_0a0​的单元值就取1,其他取0;如果A=a1A=a_1A=a1​,那么代表a1a_1a1​的单元值就取1,其他取0,以此类推。
  4. 神经网络既可以用来做分类(Classification)问题,也可以解决回归(Regression)问题。对于分类问题,如果是两类,可以用一个输入单元表示(0和1分别代表两类),如果多于两类,每一个类别用一个输入单元表示,所以输入层的单元数量通常等于类别的数量,没有明确的规则来设计最好有多少个隐藏层,可以根据实验测试和误差,以及准确度来实验并改进最优的隐藏层数目。

实战

使用多层感知器分析,根据葡萄酒的各项化学特征来判断葡萄酒的优劣。使用sklearn封装的MLPClassifier
在代码中设定的参数solver='lbfgs’为求解方法设置,一般有3个取值。

  • lbfgs:使用quasi-Newton方法的优化器。(小数据集更好,收敛快,效果好)
  • sgd:使用随机梯度下降。
  • adam:使用Kingma、DiederikheJimmy Ba提出的机遇随机梯度的优化器。(大数据集表现好)

参数alpha是L2的参数,MLP支持正则化,默认L2.
参数hidden_layer_sizes=(5,2)表示隐藏层有两层,第一层5个神经元,第二层2个神经元。

import pandas as pd
wine = pd.read_csv('data/wine.csv', names=["Cultivator", "Alchol", "Malic_Acid", "Ash", "Alcalinity_of_Ash", "Magnesium", "Total_phenols", "Falvanoids", "Nonflavanoid_phenols", "Proanthocyanins", "Color_intensity", "Hue", "OD280", "Proline"])
wine.head()
wine.describe().transpose()
print(wine.shape)
X = wine.drop('Cultivator', axis=1)
y = wine['Cultivator']from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(hidden_layer_sizes=(13, 13, 13), max_iter=500)
mlp.fit(X_train, y_train)
predictions = mlp.predict(X_test)
from sklearn.metrics import classification_report,confusion_matrix
print(confusion_matrix(y_test, predictions))
print(classification_report(y_test, predictions))
len(mlp.coefs_)
len(mlp.coefs_[0])
len(mlp.intercepts_[0])

补充说明

参考书《Python3数据分析与机器学习实战》,具体数据集和代码可以查看我的GitHub,欢迎star或者fork。

机器学习-分类之多层感知机原理及实战相关推荐

  1. 机器学习-分类之支持向量机(SVM)原理及实战

    支持向量机(SVM) 简介 支持向量机(Support Vector Machine,SVM),是常见的一种判别方法.在机器学习领域,是一个监督学习模型,通常用来进行模式识别.分类及回归分析.与其他算 ...

  2. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...

  3. 机器学习:多层感知机原理及实现

    文章目录 MLP MLP的向量形式: MLP的损失函数: 感知机求∂L/∂w: 实现 验证 辅助函数 MLP MLP的向量形式: MLP的损失函数: 感知机求∂L/∂w: 实现 import nump ...

  4. 机器学习-集成之AdaBoost算法原理及实战

    Boosting和AdaBoost 简介 Bagging采用的是一种多个分类器简单评分的方式.而Boosting是和Bagging对应的一种将弱分类器组合成为强分类器的算法框架,它根据分类器学习误差率 ...

  5. 【机器学习】逻辑回归(LogisticRegression)原理与实战

    文章目录 前言 一.什么是逻辑回归 1.1 逻辑回归基础概念 1.2 逻辑回归核心概念 二.逻辑回归Demo 2.1 数据准备 2.2 创建逻辑回归分类器 2.3 分类器预测 三.逻辑回归实战 3.1 ...

  6. 解释性差?机器学习解释利器:SHAP原理及实战

    武汉加油 热干面,你要好起来啊! 本文首发于公众号:AI小老弟,全文约5000字,阅读时长5-10分钟 导读 本文首先介绍了机器学习解释包SHAP原理和计算方法,然后基于kaggle竞赛Home Cr ...

  7. 机器学习-关联之FP-Growth算法原理及实战

    FP-Growth 简介 FP-Growth算法是一种发现数据集中频繁模式的有效方法,它在Apriori算法的原理的基础上,采用FP(Frequent Pattern,频繁模式)树数据结构对原始数据进 ...

  8. 机器学习-关联之Apriori算法原理及实战

    Apriori算法 前言 关联分析是一种无监督的机器学习方法,主要用于发现大规模数据集中事物之间的依存性和关联性.挖掘数据中隐藏的有价值的关系(如频繁项集.关联规则),有利于对相关事物进行预测,也能帮 ...

  9. 机器学习之RandomForest(随机深林)原理与实战

    一.Bagging和Boosting的概念与区别 1.bootstrap sampling(自助采样法) 在训练学习器时,我们希望学习器不仅能很好地拟合训练样本,还可以有较低的泛化误差,因此一般采用留 ...

最新文章

  1. oracle数据库 export,转:Oracle数据库的备份方法——使用export作为备份
  2. 理解域信任关系,Active Directory系列之十六
  3. 电脑台式计算机描述不可用,win7系统计算机描述不可用的解决方法
  4. Microsoft .NET Pet Shop 4
  5. 2020 ICPC亚洲区域赛(沈阳)H-The Boomsday Project(双指针+dp)
  6. php中now()的用法,PHP中的NOW()函数
  7. java连接kafka接收不到数据_Kafka客户端无法接收消息
  8. $(document).click() 在苹果手机上不能正常运行
  9. C++ 语法概括总结
  10. MySQL常用DDL语法总结
  11. php扩展-ioncube组件的安装方法_最新Phpstudy 安装 Ioncube Loader扩展方法分享
  12. NAS(Network Attached Storage)协议
  13. 【Mapreduce】利用job嵌套,多重Mapreduce,求解二度人脉
  14. Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理
  15. unity-摄像机跟随
  16. 被11整除的四位偶数c语言,位和位差-什么叫奇数位和偶数位?能被11整除的数,奇 – 手机爱问...
  17. 工程伦理2021年春季学期线上课程习题全部解答
  18. 为王菲写的第二首歌《山河》
  19. 【调剂】黑龙江大学电子工程学院王国涛副教授课题组招收2022级硕士研究生
  20. 许石林:《赤壁》是《无极》的另一极

热门文章

  1. Mapper 接口无法注入或Invalid bound statement (not found)
  2. AOP 的作用及其优势
  3. 方法入门_方法的定义
  4. jconsole工具检测堆内存变化
  5. c语言和plc编程,PLC编程C语言.ppt
  6. html2canvas截图页面中某块区域的图不全_截图操作千千万,唯舒适最重要!你更Pick谁?...
  7. delete 会不会锁表_MySQL的insert into select 引发锁表
  8. 【报错笔记】在eclipse中做Spring项目时,创建Spring容器时老是出错
  9. 前端进阶 -css的弱化与js的强化(11)
  10. 7分钟理解JS的节流、防抖及使用场景