微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 使用Scikit-learn在Python中设置神经网络的方法

使用Scikit-learn在Python中设置神经网络的方法

时间:10-07 来源:雷锋网 点击:

  对于 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)

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

  | 预测与评估

现在我们有一个模型,是时候使用它来获

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top