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

简介:

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

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

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

| 神经网络

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

| 感知器

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

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

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


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

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

| SciKit-Learn

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

| 数据

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

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

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

| 训练测试分裂

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

| 数据预处理

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

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

| 训练模型

现在该训练我们的模型了。 通过估计对象, 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 内置的指标,如分类报告和混淆矩阵来评估我们的模型执行得如何:

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


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

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

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

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

| 结论

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

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

via python

推荐阅读:

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

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


本文作者:环子


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

相关文章
|
17天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
18天前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
41 2
|
25天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
73 6
|
29天前
|
安全 网络安全 数据安全/隐私保护
|
4天前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
19 8
|
5天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
15天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
36 5
|
18天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
40 3
|
24天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
36 3
|
26天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
52 4
下一篇
无影云桌面