(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. 深入理解JavaScript系列(结局篇)

    介绍 最近几个月忙得实在是不可开交,终于把<深入理解JavaScript系列>的最后两篇“补全”了,所谓的全是不准确的,因为很多内容都没有写呢,比如高性能.Ajax安全.DOM详解.Jav ...

  2. [转]微信小程序-template模板使用

    本文转自:http://blog.csdn.net/u013778905/article/details/59646241 如下图,我在做华企商学院小程序的时候,课程搜索结果页和课程列表页结构是完全一 ...

  3. PHP之数组和函数的基本教程

    [PHP数组的分类] 按照下标的不同,PHP数组分为关联数组与索引数组 索引数组:下标从0开始,依次增长: 关联数组:下标为字符串格式,每个下标字符串与数字的值一一关联对应(有点像对象的键值对) [关 ...

  4. mysql-connector/python使用示例

    1.下载安装connector/python 地址:https://dev.mysql.com/downloads/connector/python/ 下载的版本(mysql-connector-py ...

  5. 百度富文本Ueditor将图片存在项目外路径并回显

    我的毕设中需要一个类似新闻发布的功能,使用到百度富文本编辑器,不过百度富文本编辑器有点坑(只是我太菜了),粘贴图片和回显这个坑坑了我两天时间.效果是这样的: 就是可以在文本中粘贴图片并显示出来,直接说 ...

  6. spring实现固定时间定时器

    此文章是基于 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 一. jar包介绍 1. spring-framework-4.3.4.RELEASE 的 lib ...

  7. jqGrid用法汇总(全经典)

    1.支持多种类型的数据集合作为数据源 $("#grid1").jqgrid( ........ datatype: "xml", ........ ); XML ...

  8. 【转】js判断一个object对象是否为空

    判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in... 遍历属性,为真则为“非空数组”:否则为“空数组” for (var i in obj) { // 如果不为空 ...

  9. Unicode汉字转码小工具

    点击按钮即可使用! 在这里粘贴或输入       转换结果:

  10. Web前端面试指导(十一):样式导入有哪些方式?

    样式导入方式 link import 使用方式 link的使用 <link href="index.css" rel="stylesheet"> i ...