您好、欢迎来到现金彩票网!
当前位置:大象彩票app下载 > 感觉器感知器 >

基础 机器学习入门必备:如何用Python从头实现感知器算法

发布时间:2019-05-10 19:34 来源:未知 编辑:admin

  感知器算法是最简单的人工神经网络形式之一。感知器是一个单神经元的模型,可以用于两个类别的分类问题,也能为以后开发更大的神经网络奠定基础。在本教程中,你将了解到如何利用 Python 从头开始实现感知器算法。

  通过类似的方式,感知器从训练数据的样本中接受输入信号,训练数据被加权并在称为激活(activation)的线性方程中进行组合。

  然后,使用诸如阶跃传递函数(step transfer function)的传递函数将激活变换为输出值或预测。

  以这种方式,感知器是用于具有两个类(0 和 1)的问题的分类算法,其中可以使用线性方程来分离这两个类。

  它与以类似方式进行预测的线性回归和 logistic 回归密切相关(例如输入的加权和)。

  梯度下降是通过跟随成本函数(cost function)的梯度来最小化函数的过程。

  这涉及了解成本的形式以及导数,使得从给定的点你可以知道梯度并且可以在该方向上移动,比如下坡到最小值。

  在机器学习中,我们可以使用一种技术来评估和更新称为随机梯度下降的每次迭代的权重,以最小化我们的训练数据模型的误差。

  这种优化算法的工作方式是每次向模型显示每个训练实例。模型对训练实例进行预测,计算误差并更新模型以便减少下一预测的误差。

  其中w是正在被优化的权重,learning_rate是必须配置的学习速率(例如 0.01),(expected - predicted)是在归因于权重的训练数据上的模型的预测误差,x是输入值。

  这是一个描述了声呐啾啾叫声并返回不同服务的试探的数据集。60 个输入变量是在不同角度的返回强度。这是一个二元分类问题,需要一个模型来区分金属圆柱体和岩石。

  它是一个很好理解的数据集。所有的变量是连续的,通常在 0 到 1 的范围内。因此,我们不必对输入数据进行归一化,这通常是使用感知器算法的一个好地方。输出变量是字符串「M」(表示矿 mine)和「R」(表示岩石 rock),我们需要将其转换为整数 1 和 0。

  通过在数据集(M 或 Mines)中预测具有最多观测值的类,零规则算法(Zero Rule Algorithm)可以实现 53%的精度。

  )中了解有关此数据集的更多信息。你也可以免费下载数据集,并将其放在工作目录中,文件名为 sonar.all-data.csv。

  这将会需要在随机梯度下降中的候选权重值的评估以及在模型被最终确定之后,我们希望开始对测试数据或新数据进行预测。

  下面是一个名为 predict() 的函数,用于预测给定一组权重的行的输出值。

  将所有这些集中起来,我们就可以测试我们的 predict() 函数了,如下:

  该函数有两个输入值 X1、X2 和三个权重参数 bias、w1 及 w2。该问题的激活函数有如下的形式:

  运行这个函数,我们将会得到与期望输出值 (**y**) 相符合的预测值。

  学习率(Learning Rate):用来限制每次更新中权重项修正值的大小。

  我们基于现有情况模型预测的「误差」,来对权重值进行更新。误差,是由候选权值计算出来的预测值与(数据集中的)期望值的差。

  偏差项以一种相似的方式更新,不过因为它本身就不与特定的输入值有关,因而在式子中没有输入值的项。

  现在,我们把所有的内容组合到一起。如下所示,在 train_weights() 函数中,它使用 SGD 方法,计算对于给定训练集的权重值。

  如你所见,我们也在每次迭代中,记录下了平方误差之和(这始终是一个正值)。因而我们能在外循环的每次迭代中,print 一些有用的信息。

  我们将使用 0.1 的学习率和 5 次迭代,也就是把参数在训练集上更新五次,来训练这个模型。

  运行这个案例,它将会在每一次迭代结束后,显示出该次迭代后的平方误差和,并在完成所有迭代后,显示最后的权重集。

  在这一节中,我们将使用 SGD 方法,对一个声纳数据集,训练一个感知器模型。

  在该例子中,我们假定,在当前的工作目录下,有一名为sonar.all-data.csv的文件,存储着该数据集。

  首先该数据集被载入。数据集中字符串格式的数据被转换为数值型,同时输出值从字符串被转换了 0 或 1 的两个整数值。

  我们使用「k 倍交叉验证法」(k-fold cross validation)来对学习后的模型在未知数据集上的表现进行评估。也就是说,我们需要建立 k 个模型并估计各模型的平均误差。分类准确性将被用于模型的评估工作中。这些工作在cross_validation_split(), accuracy_metric() 及 evaluate_algorithm()函数中被完成。

  我们将会使用上面设置的predict()和train_weights()函数来训练该模型。同时,我们将会用一个新函数perceptron()来将它们组合在一起。如下是完整的例子。

  在交叉验证中,我们取 k 为 3——也就是对每一块数据,都有 208/3 约 70 个记录,会在每次迭代中被用于计算。我们取 0.1 的学习率及 500 的训练迭代次数,来训练模型。

  你可以尝试你自己的参数,并且看看你的结果能否战胜我的分数。运行这个例子,将会显示对 3 倍交叉验证中每一块的分数,以及平均的分类正确率。

  我们可以看到,这个正确率约为 73%,高于由仅考虑主要类的零规则算法(Zero Rule Algorithm)得到的 50% 的正确率基准值。

  这一节列举了关于该入门指导的拓展内容,你可以考虑深入探究其中的一些内容。

  调试样例参数。尝试着去调整包括学习率、迭代次数乃至于数据预处理的方法,以使模型在该数据集上,得到更高的分数。

  批量化进行随机梯度下降。修改随机梯度下降的算法,使得我们能记录下每一次迭代的更新值,并且在迭代结束的时候再基于记录的更新值来更新权重值。

  额外的分类问题。将文中提到的技巧,应用于 UCI 机器学习数据集中其他数据。

  在该教程中,你学习了如何从零开始,用 Python 实现,基于随机梯度下降的感知器算法。

http://dpi-berlin.net/ganjueqiganzhiqi/202.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有