用用Python从头开始实现一个神经网络从头开始实现一个神经网络
在这篇文章中,我们将介绍为什么要从头开始实现神经网络呢?即使你打算以后使用PyBrain这样的神经网络库,至少一次从
头开始实现一个神经网络也是一个极具价值的练习,这会帮助你理解神经网络是怎么工作的,并且如果你想要设计出高效的神
经网络模型,做一个这样的练习也是很有必要的。
需要注意的一件事情是,本篇文章的示例代码效率并不高,它的目的是易于被人理解。
生成数据集
首先我们生成一个可以操作的数据集,幸运的是,scikit-learn提供了一些有用的数据集生成器,所以我们不需要自己写代码来
生成数据集,只需使用make_moons这个函数就可以。
月牙形状的、有两类数据的数据集
我们生成的数据集中有两种类型的数据,分别用红点和蓝点标识了出来。你可以将蓝点视为男性患者,将红点视为女性患者,
并且将x轴和y轴视为医疗方式。
我们的目标是训练一个机器学习分类器,让它在x、y坐标系下预测正确的类别(男性或者女性)。需要注意的是这些数据不能
被线性分割,我们无法画出一条直线将这两种类型的数据分开,这意味着线性分类器(比如Logistic回归)将无法拟合这些数
据,除非你手工设计的非线性特征(如多项式),为给定的数据集工作良好。
事实上,这就是神经网络主要的优点之一,你不必担心特征工程,神经网络的隐藏层将会为你学习特征。
Logistic回归
为了证明这一点,让我们训练一个Logistic回归分类器。这个分类器的输入是坐标x、y,它的输出是预测的数据类型(0或
1)。为了方便,我们使用scikit-learn中的Logistic Regression类。