机器学习之感知器算法原理和Python实现

(1)感知器模型

  感知器模型包含多个输入节点:X0-Xn,权重矩阵W0-Wn(其中X0和W0代表的偏置因子,一般X0=1,图中X0处应该是Xn)一个输出节点O,激活函数是sign函数。

  (2)感知器学习规则

  

  输入训练样本X和初始权重向量W,将其进行向量的点乘,然后将点乘求和的结果作用于激活函数sign(),得到预测输出O,根据预测输出值和目标值之间的差距error,来调整初始化权重向量W。如此反复,直到W调整到合适的结果为止。

(3)算法的原始形式

(4)Python代码实现

 1 import numpy as np
 2
 3
 4 class Perceptron(object):
 5
 6     """Perceptron classifier(感知器分类器)
 7
 8     Parameters(参数)
 9     ---------------
10     eta:float 学习率
11         Learning rate(between 0.0 and 1.0)
12     n_iter:int 权重向量的训练次数
13         Passes over training dataset
14
15     Attributes(属性)
16     --------------
17     w_:1d_array 一维权重向量
18         Weights after fitting
19     errors_:list 记录神经元判断错误的次数
20         Number of misclassifications in every epoch
21     """
22
23     #初始化对象
24     def __init__(self,eta=0.01,n_iter=10):
25         self.eta=eta
26         self.n_iter=n_iter
27
28     #训练模型
29     def fit(self,X,y):
30         """
31         fit training data.(拟合训练数据)
32
33         Parameters(参数)
34         ----------------
35        :param x: list[np.array] 一维数组数据集
36         :param y: 被训练的数据集的实际结果
37         :return:
38           权值,初始化为一个零向量R的(m+1)次方,m代表数据集中纬度(特征)的数量
39           x.shape[1] = (100,2) 一百行2列:表示数据集中的列数即特征数
40
41           np.zeros(count) 将指定数量count初始化成元素均为0的数组 self.w_ = [ 0.  0.  0.]
42         """
43
44         #初始化权重和错误列表
45         self.w_=np.zeros(1+X.shape[1])
46         self.errors_=[]
47
48         for _ in range(self.n_iter):
49             errors=0
50             for xi,target in zip(X,y):
51                 #计算预测与实际值之间的误差在乘以学习率
52                 update=self.eta*(target-self.predict(xi))
53                 self.w_[1:]+=update*xi
54                 self.w_[0]+=update*1
55                 errors += int(update!=0)
56                 self.errors_.append(errors)
57             return self
58
59     #定义感知器的传播过程
60     def net_input(self,X):
61         """
62         计算净输入
63         :param x: list[np.array] 一维数组数据集
64         :return: 计算向量的点积
65             向量点积的概念:
66                 {1,2,3} * {4,5,6} = 1*4+2*5+3*6 = 32
67
68         description:
69             sum(i*j for i, j in zip(x, self.w_[1:])) python计算点积
70         """
71         print(X,end="  ")
72         print(self.w_[:],end="  ")
73         X_dot=np.dot(X,self.w_[1:])+self.w_[0]
74         print("的点积是:%d" % X_dot,end="  ")
75         return X_dot
76
77     #定义预测函数
78     def predict(self,X):
79         target_pred=np.where(self.net_input(X)>=0.0,1,-1)
80         print("预测值:%d" % target_pred,end="  ")
81         return target_pred

原文地址:https://www.cnblogs.com/reaptomorrow-flydream/p/9096971.html

时间: 2024-10-01 04:35:27

机器学习之感知器算法原理和Python实现的相关文章

感知器算法--python实现

写在前面: 参考: 1  <统计学习方法>第二章感知机[感知机的概念.误分类的判断]   http://pan.baidu.com/s/1hrTscza 2   点到面的距离 3   梯度下降 4   NumPy-快速处理数据    属性shape:表示几行几列:   dot(a,b) 计算数组.矩阵的乘积 感知器算法: Python实现: #coding:utf-8 import numpy as np class Perceptron(object): def __init__(self)

Stanford大学机器学习公开课(三):局部加权回归、最小二乘的概率解释、逻辑回归、感知器算法

(一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为它导致数据的 过拟合(overfitting),不符合数据真实的模型.如下图的右图. 下面来讲一种非参数学习方法——局部加权回归(LWR).为什么局部加权回归叫做非参数学习方法呢?首先,参数学习方法是这样一种方法:在训练完成所有数据后得到一系列训练参数,然后根据训练参数来预测新样本的值,这时不再依赖

机器学习——感知器算法实现

本次也是用processing3.0+写的,其官方网站https://processing.org/,建议直接看reference的例子进行学习. 感知器算法用的是我们老师给的ppt,实现的是二维的感知器,为了方便看,实际上多维的也是一样的: 运行效果是: 为了试验方便,我这是用了点击取点,键盘按一下t,大小写均可,下一个点的就是正例,按一下f,大小写均可,下一个点就是负例. 按s是开始进行学习度为1的迭代.结束会直接出直线,按2会出学习率为2的直线,迭代次数会打在程序底下,值是2. 代码仅供参

人工神经网络之感知器算法

感知器作为人工神经网络中最基本的单元,有多个输入和一个输出组成.虽然我们的目的是学习很多神经单元互连的网络,但是我们还是需要先对单个的神经单元进行研究. 感知器算法的主要流程: 首先得到n个输入,再将每个输入值加权,然后判断感知器输入的加权和最否达到某一阀值v,若达到,则通过sign函数输出1,否则输出-1. 为了统一表达式,我们将上面的阀值v设为-w0,新增变量x0=1,这样就可以使用w0x0+w1x1+w2x2+…+wnxn>0来代替上面的w1x1+w2x2+…+wnxn>v.于是有: 从

[转]感知器算法

原文地址:http://blog.csdn.net/u014403897/article/details/45024609 感知器算法 2015-04-13 13:26 521人阅读 评论(0) 收藏 举报  分类: 机器学习(10)  版权声明:本文为博主原创文章,未经博主允许不得转载. 引例:判断一个人是否长得帅??? 有如下feature: 身高,体重,三围,颜值,学习成绩(帅的人学习成绩好的少...为何要这么一个扯淡的特征下面会讲解)等等. 假设有一个标准:每一个评分项给予多少分的权重,

感知器算法初探

今天学了感知器算法:Perceptron Learning Algorithm (PLA) 觉得自己应该回去重新学学线性代数QAQ 依旧是自己的理解为主…… 感知器算法是一种线性分类器,对于一个样本,它具有x={x1, x2, ..., xn}这些特征,每个特征具有一个权值w={w1, w2, ..., wn},所以这个样本的特征向量为X=∑xi*wi.分类集为y={y1, y2, ..., yn},所以设分类函数为y=f(X),感知器的目的是求一个函数g≍f. 假设现在有一系列样本,样本共两个

感知器算法

在logistic方法中,g(z)会生成[0,1]之间的小数,但如何是g(z)只生成0或1? 所以,感知器算法将g(z)定义如下: 同样令,和logistic回归的梯度上升算法类似,学习规则如下: 尽管看起来和之前的学习算法类似,但感知器算法是一种非常简便的学习算法,临界值和输出只能是0或1,是比logistic更简单的算法.后续讲到学习理论是,会将其作为基本的构造步骤.

手写一个机器学习的入门算法-感知器算法

用4x+5y=2000作为分界线制造了100个点: 初始分界线为0,0: 经过1000轮纠正后,结果是: 22 x+31 y = 11876 对比结果4 x + 5 y = 2000 还是比较接近的.   刚开始更新w的那行代码搞错了,以为是用predict去纠正,其实应该用sample的真实值去纠正.   import random; def find_split(points): w=(0,0,0) for _ in range(1,2000): print 'w='+str(w); for

逻辑回归的原理和python实现

输入 鸢尾花卉数据集,数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性. 输出 根据手动实现的逻辑回归模型对鸢尾花卉数据集分类的预测结果. 原理 逻辑回归处理的是分类问题,线性回归处理的是回归问题,这是两者最本质的区别.逻辑回归算法是一种分类算法,适用于标签取值离散的情况. 逻辑回归的模型为: 其中,代表特征向量,代表逻辑函数,一个常用的逻辑函数公式为: 该函数的图像为: 通过公式和图像,我们可以总结下的作用:对于给定的输入变量,根据选择的参数计算输出变量等于1的概率,