(1)感知器模型

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

  (2)感知器学习规则

  

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

(3)算法的原始形式

(4)Python代码实现

 import numpy as np

 class Perceptron(object):

     """Perceptron classifier(感知器分类器)

     Parameters(参数)
---------------
eta:float 学习率
Learning rate(between 0.0 and 1.0)
n_iter:int 权重向量的训练次数
Passes over training dataset Attributes(属性)
--------------
w_:1d_array 一维权重向量
Weights after fitting
errors_:list 记录神经元判断错误的次数
Number of misclassifications in every epoch
""" #初始化对象
def __init__(self,eta=0.01,n_iter=10):
self.eta=eta
self.n_iter=n_iter #训练模型
def fit(self,X,y):
"""
fit training data.(拟合训练数据) Parameters(参数)
----------------
:param x: list[np.array] 一维数组数据集
:param y: 被训练的数据集的实际结果
:return:
权值,初始化为一个零向量R的(m+1)次方,m代表数据集中纬度(特征)的数量
x.shape[1] = (100,2) 一百行2列:表示数据集中的列数即特征数 np.zeros(count) 将指定数量count初始化成元素均为0的数组 self.w_ = [ 0. 0. 0.]
""" #初始化权重和错误列表
self.w_=np.zeros(1+X.shape[1])
self.errors_=[] for _ in range(self.n_iter):
errors=0
for xi,target in zip(X,y):
#计算预测与实际值之间的误差在乘以学习率
update=self.eta*(target-self.predict(xi))
self.w_[1:]+=update*xi
self.w_[0]+=update*1
errors += int(update!=0)
self.errors_.append(errors)
return self #定义感知器的传播过程
def net_input(self,X):
"""
计算净输入
:param x: list[np.array] 一维数组数据集
:return: 计算向量的点积
向量点积的概念:
{1,2,3} * {4,5,6} = 1*4+2*5+3*6 = 32 description:
sum(i*j for i, j in zip(x, self.w_[1:])) python计算点积
"""
print(X,end=" ")
print(self.w_[:],end=" ")
X_dot=np.dot(X,self.w_[1:])+self.w_[0]
print("的点积是:%d" % X_dot,end=" ")
return X_dot #定义预测函数
def predict(self,X):
target_pred=np.where(self.net_input(X)>=0.0,1,-1)
print("预测值:%d" % target_pred,end=" ")
return target_pred

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

  1. 感知器算法--python实现

    写在前面: 参考: 1  <统计学习方法>第二章感知机[感知机的概念.误分类的判断]   http://pan.baidu.com/s/1hrTscza 2   点到面的距离 3   梯度 ...

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

    (一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为 ...

  3. [置顶] 局部加权回归、最小二乘的概率解释、逻辑斯蒂回归、感知器算法——斯坦福ML公开课笔记3

    转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9113681 最近在看Ng的机器学习公开课,Ng的讲法循循善诱,感觉提高了不少 ...

  4. Perceptron Algorithm 感知器算法及其实现

    Rosenblatt于1958年发布的感知器算法,算是机器学习鼻祖级别的算法.其算法着眼于最简单的情况,即使用单个神经元.单层网络进行监督学习(目标结果已知),并且输入数据线性可分.我们可以用该算法来 ...

  5. 单链表反转的原理和python代码实现

    链表是一种基础的数据结构,也是算法学习的重中之重.其中单链表反转是一个经常会被考察到的知识点. 单链表反转是将一个给定顺序的单链表通过算法转为逆序排列,尽管听起来很简单,但要通过算法实现也并不是非常容 ...

  6. 第三集 欠拟合与过拟合的概念、局部加权回归、logistic回归、感知器算法

    课程大纲 欠拟合的概念(非正式):数据中某些非常明显的模式没有成功的被拟合出来.如图所示,更适合这组数据的应该是而不是一条直线. 过拟合的概念(非正式):算法拟合出的结果仅仅反映了所给的特定数据的特质 ...

  7. 【2008nmj】Logistic回归二元分类感知器算法.docx

    给你一堆样本数据(xi,yi),并标上标签[0,1],让你建立模型(分类感知器二元),对于新给的测试数据进行分类. 要将两种数据分开,这是一个分类问题,建立数学模型,(x,y,z),z指示[0,1], ...

  8. 机器学习之感知器和线性回归、逻辑回归以及SVM的相互对比

    线性回归是回归模型 感知器.逻辑回归以及SVM是分类模型 线性回归:f(x)=wx+b 感知器:f(x)=sign(wx+b)其中sign是个符号函数,若wx+b>=0取+1,若wx+b< ...

  9. k均值聚类算法原理和(TensorFlow)实现

    顾名思义,k均值聚类是一种对数据进行聚类的技术,即将数据分割成指定数量的几个类,揭示数据的内在性质及规律. 我们知道,在机器学习中,有三种不同的学习模式:监督学习.无监督学习和强化学习: 监督学习,也 ...

随机推荐

  1. 2017年11月26日 C#流&&窗体对话框

    C#流 在顶端加入using System.IO就可以使用流 StreamReder a = new StreamReder();//读取 前面什么都可以 = sr.ReadToEnd();//用法 ...

  2. [生活] 日常英语学习笔记-NEVER HAVE I EVER游戏

    逛油管,看视频,学英语. 大家要过周末了说啥 Happy Sunday Have a restful  Sunday 有个空闲的周末 我们正在看电影 We are watching movie it ...

  3. iOS之nib、xib及storyboard的区别及storyboard的加载过程

    先讲述下nib, nib是3.0版本以前的产物,在终端下我们可以看到,NIB其实是一个文件夹,里面有可执行的二进制文件: 区分xib和storyboard的区别? 不同点: 1> 无论nib也好 ...

  4. Python 2.x版本和Python3.x版本的不同

    在新的Python版本中,Python3.x虽然在主要的核心语言和模块等方面没有打的改变,但是Python3.x与2.x还是有很大区别的.而且Python3.x与2.x并不兼容. 比如说HTTPSer ...

  5. js 两个小括号 ()() 的用法

    实现一个函数fn, 使fn(1)(2)的结果为两个参数的和,刚开始没反应过来,其实细细一想第二个括号就是函数再调用的问题,废话不多说,代码奉上: var fn = function(n) { func ...

  6. react antd Warning: must set key for <rc-animate> children

    location 有可能是一个‘’,''.split() 将输出[""],是个含有空字符串的数组,而[]是个什么都没有的数组,两者不同. code: change initialV ...

  7. Docker常用操作指令

    1.查看正在运行的容器 docker ps 2.查看所有容器 docker ps -a 3.停用所有正在运行的容器 docker stop $(docker ps -q) 4.删除所有容器 docke ...

  8. MySQL性能优化的20+条经验

    1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一 ...

  9. Shared Project

    从VS2015开始支持Shared Project,挺好的,省去了单独引用的麻烦.

  10. js前台实现上传图片的预览

    网上这样的插件一大堆,不过还是谈下js下代码的实现,加深这方面的理解. 当然也没有一种方式就可以完事的情形,主要就两种方面来处理: 1.file API的filereader接口完成(支持的浏览器:I ...