神经网络初学者指南:基于Scikit-Learn的Python模块

编者按:这个帖子概述了使用 Scikit-learn 在 Python 中设置神经网络的方法,其最新版本现在已经内置支持神经网络模型。作者 Jose Portilla 是一名数据科学顾问和培训师,目前在 Udemy 上教授在线课程。 他也是Pierian Data Inc.数据科学部门的主管。雷锋网(公众号:雷锋网)编译,未经许可不得转载。

对于 Python 来说,最受欢迎的机器学习图书馆是 SciKit Learn。 前几天最新版本(0.18)刚刚发布,现在已内置支持神经网络模型。 对 Python 的基本理解对于弄明白这篇文章是必要的,有一些关于Sci-Kit Learn 的使用经验也是十分有帮助的(但不是必要)。

另外,作为一个快速附注,我写了一篇详解版的姐妹文章,不过是以 R 语言编写的(可点击此处查看)。

| 神经网络

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

| 感知器

让我们通过探讨感知器开始我们的讨论吧。 感知器具有一个或多个输入、偏置、激活函数和单个输出。 感知器接收输入,将它们乘以一些权重,然后将它们传递到激活函数以产生输出。 有许多激活函数可供选择,例如逻辑函数,三角函数,阶跃函数等。我们还确保向感知器添加偏差,这避免了所有输入可能等于零的问题(意味着没有乘权重会有影响)。 检查下面的图表感知器的可视化: 

一旦我们有输出,我们可以将其与已知标签进行比较,并相应地调整权重(权重通常以随机初始化值开始)。 我们继续重复此过程,直到我们达到允许迭代的最大数量或可接受的错误率。

为了创建神经网络,从叠加感知器层开始即可创建神经网络的多层感知器模型。 将产生直接接收要素输入的一个输入层,一个将创建结果输出的输出层。 之间的任何图层都称为隐藏图层,因为它们不直接“查看”要素输入或输出。 对于可视化可查看下面的图表(来源:维基百科)。 

下面,让我们开始实操,用 python 创建神经网络吧!

| SciKit-Learn

为了跟得上这个教程的节奏,您需要安装最新版本的 SciKit Learn。虽然通过 pip 或 conda 很容易安装,但你可以参考官方的安装文档来了解完整的细节。 

| 数据

我们将使用 SciKit Learn 内置的乳腺癌数据集,如果具有肿瘤特征的样本均会被标记,并显示肿瘤为恶性还是良性。 我们将尝试创建一个神经网络模型,它可以理解肿瘤的特点,并尝试预测。让我们继续进行,从获取数据开始吧!

这个对象就像字典一样,包含着数据的描述信息,特点及目标:  

| 训练测试分裂

让我们把数据分成训练和测试集,通过来自模式选择中的  SciKit Learn's 的训练测试分裂函数,这点便可以轻松做到。 

| 数据预处理

如果数据未被归一化,则在最大迭代次数被准许之前,神经网络可能难以聚集。 多层感知器对特征缩放非常敏感,因此强烈建议您缩放数据。 请注意,必须对测试集应用相同的缩放以获得有意义的结果。 目前有很多不同的数据标准化方法,我们将使用内置的 StandardScaler 进行标准化。 

| 训练模型

现在该训练我们的模型了。 通过估计对象, SciKit Learn 使这一切变得极其容易。 在这种情况下,我们将从 SciKit-Learn 的 neural_network 库导入我们的估计器(多层感知器分类器模型)。

我们接下来将创建一个模型的实例,你可以定义很多参数和自定义,我们将只定义 hidden_layer_sizes。 对于此参数,您传递一个元组,其中在每一层包含你想要的神经元数量,其中元组中的第 n 个条目表示 MLP 模型的第 n 层中的神经元的数量。 有很多方法来选择这些数字,但为了简单起见,我们将选择与我们的数据集中的特征相同数量的神经元的三层:

现在已经建立了模型,我们可以将训练数据放入其中,记住这个数据已经被处理和缩放: 

MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,
      beta_2=0.999, early_stopping=False, epsilon=1e-08,
      hidden_layer_sizes=(30, 30, 30), learning_rate='constant',
      learning_rate_init=0.001, max_iter=200, momentum=0.9,
      nesterovs_momentum=True, power_t=0.5, random_state=None,
      shuffle=True, solver='adam', tol=0.0001, validation_fraction=0.1,
      verbose=False, warm_start=False)

我们可以在其中看到显示模型中其他参数的默认值输出。 尝试用不同的数值多次操作,就能看到数据对模型的影响。

| 预测与评估

现在我们有一个模型,是时候使用它来获得预测! 我们可以简单地使用我们的拟合模型中的 predict()方法:

现在我们可以使用 SciKit-Learn 内置的指标,如分类报告和混淆矩阵来评估我们的模型执行得如何:

看上去只有三个案例被错误分类了,准确率达到 98 %(以及 98% 的精度和召回)。考虑到我们才写了这么少的代码,效果还是相当不错的。 然而,使用多层感知器模型的缺点在于,解释模型本身存在着很多困难,而特征的权重和偏差很难轻易解释。

然而,如果希望在训练模型后提取MLP权重和偏差,则需要使用其公共属性 coefs_ 和 intercepts_。

coefs_ 是权重矩阵的列表,其中索引i 处的权重矩阵表示层 i 和层 i + 1 之间的权重。

intercepts_ 是偏差向量的列表,其中索引i 处的向量表示添加到层 i + 1 的偏差值。 

| 结论

希望你喜欢这个关于神经网络的简短讨论,我们可以在学习中尝试玩转隐藏层和神经元的数量,看看它们如何影响结果。

想了解更多? 你可以在 Udemy 上查看我的 Python 数据科学和机器学习栏目。

via python

推荐阅读:

大牛讲堂 | 山世光博士:自动驾驶系统中的目标检测技术

中国工程院院士李德毅:智能车产业化实践与展望

本文作者:环子

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-08-22 15:02:11

神经网络初学者指南:基于Scikit-Learn的Python模块的相关文章

利用 Scikit Learn的Python数据预处理实战指南

简介 本文主要关注在Python中进行数据预处理的技术.学习算法的出众表现与特定的数据类型有密切关系.而对于没有经过缩放或非标准化的特征,学习算法则会给出鲁莽的预测.像XGBoost这样的算法明确要求虚拟编码数据,而决策树算法在有些情况下好像完全不关心这些! 简而言之,预处理是指在你将数据"喂给"算法之前进行的一系列转换操作.在Python中,scikit-learn库在sklearn.preprocessing下有预装的功能.有更多的选择来进行预处理,这将是我们要探索的. 读完本文,

利用Scikit Learn的Python数据预处理实战指南

本文主要关注在Python中进行数据预处理的技术.学习算法的出众表现与特定的数据类型有密切关系.而对于没有经过缩放或非标准化的特征,学习算法则会给出鲁莽的预测.像XGBoost这样的算法明确要求虚拟编码数据,而决策树算法在有些情况下好像完全不关心这些! 简而言之,预处理是指在你将数据"喂给"算法之前进行的一系列转换操作.在Python中,scikit-learn库在sklearn.preprocessing下有预装的功能.有更多的选择来进行预处理,这将是我们要探索的. 读完本文,你将具

5个步骤 & 7个提示 | 一份开启Kaggle竞赛征途的初学者指南

首发地址:https://yq.aliyun.com/articles/129749 更多深度文章,请关注:https://yq.aliyun.com/cloud 对于机器学习入门而言,我们一般都是从手写体MNIST.CIFAR-10等一些公开的数据集快速上手,复现别人的模型并得到一些好的结果.由于别人给出了相关的模型及步骤,做完这些复现总觉得太简单而没有收获,这是因为这些数据集及给出的模型都非常的完美.针对自己特定任务和数据集而言,数据集处理起来相当困难或者搭建的模型效果不好,让初学者不禁陷入

《C语言编程初学者指南》一第1章 C编程入门

第1章 C编程入门 C语言编程初学者指南 欢迎阅读本书.C 编程语言是培养你的编程职业技能和爱好的一门优秀的基础语言.不管你是计算机专业的学生.自学成才的程序员,或者是一名资深的软件工程师,学习C语言都能够给你丰富的概念知识并培养实践技能,从而很好地帮助你理解其他的计算机相关主题(包括操作系统概念.内存管理和其他高级的编程语言). 在整个本书中,我将引导你学习一系列的示例,这些示例设计来讲解C编程的基础知识.我假设读者没有C编程的经验,也不了解计算机科学的基本概念.阅读本书不需要任何的经验(包括

《C语言编程初学者指南》一导读

前言 C语言编程初学者指南 C语言是一种强大的基于过程的编程语言,它于1972年由Dennis Ritchie在贝尔实验室发明.C语言最初是开发来用于UNIX平台的,但却已经扩展到很多其他的系统和应用中.C语言还影响了很多其他的编程语言,例如C++和Java. 编程初学者,特别是那些进入计算机科学和工程专业学习的人,需要构建有关操作系统.硬件和应用程序开发概念的牢固基础知识.很多的学院教授学生学习如何用C编程,从而使他们能够学习高级概念以及在C的基础上建立起来的其他语言. 学习C语言的很多学生也

《SQL初学者指南(第2版)》导读

前言 SQL初学者指南(第2版) SQL(Structured Query Language)是用于和关系数据库交互的主要语言.本书的目标是成为SQL语言的一本有用的入门指南. 本书的另一个假想的书名是The Logic of SQL(<SQL的逻辑>).这是因为,和所有的计算机语言一样,SQL语言和冷冰冰.硬邦邦的逻辑而不是和英语词汇更加相关.尽管如此,本书的书名中还是保留了Language(语言)这个词,这有几方面的原因. 1.首先,SQL中基于语言的语法和其他的计算机语言有所区别.和其他

《C语言编程——零基础初学者指南(第3版)》一2.3 数据的种类

2.3 数据的种类 C语言编程--零基础初学者指南(第3版)C程序所使用的数据由数字.字符和单词组成.程序将数据处理为有意义的信息.在C程序设计中有各种不同类型的数据,最常见的三种数据类型是: 字符整型数浮点型数(也称为实数)提示 你也许会问:"我需要具备多少数学知识?!这不公平!"别急,轻松点,C语言会帮你处理数学的问题.不一定非要学会2+2才能写C程序.但是,你必须要理解数据类型,否则无法为自己的程序选择合适的类型. 2.3.1 C语言中的字符 C语言中的字符是计算机可以表示的任意

《SQL初学者指南》——1.1 语言和逻辑

1.1 语言和逻辑 SQL初学者指南我必须承认,本书的书名并不是十分恰当.尽管本书的名称是"The Language of SQL",但是用"The Logic of SQL"作为书名可能更恰当.这是因为,就像所有的计算机语言一样,SQL语言具有比英语词汇更严格.更固定的逻辑. 尽管如此,SQL拥有与众多其他计算机语言不同的.独特的基于语言的语法.和许多编程工具不同,SQL使用普通的英语单词,诸如WHERE.FROM和HAVING等,作为其语法中的关键字.因此,SQ

RMAN 初学者指南

初学 RMAN 初学者指南 转自聚贤庄 作者:gototop ============================================ 这篇文章是去年写的了,最初发表在chinaunix.net的oracle论坛里,收录在旧版文集中,可能很多没有看到,总有人写信要,今天乘改版之际就把它单独拿出来了.(gototop 2003.6.24注)   RMAN(Recovery Manager)是DBA的一个重要工具,用于备份.还原和恢复oracle数据库,前一段时间有网友找我要,可惜没