1、数学模型

 

2、权值训练

3、Python代码

感知器收敛的前提是两个类别必须是线性可分的,且学习速率足够小。如果两个类别无法通过一个线性决策边界进行划分,要为模型在训练集上的学习迭代次数设置一个最大值,或者设置一个允许错误分类样本数量的阈值,否则感知器训练算法将永远不停地更新权值。

# -*- coding: utf-8 -*-
'''
Created on 2017年12月15日
@author: Jason.F
@summary: 感知器学习算法
'''
import numpy as np
import time
import matplotlib.pyplot  as plt
import pandas as pd
class perceptron(object):''' Perceptron classifier.Parameterseta:float=Learning rate (between 0.0 and 1.0)n_iter:int=Passes over the training dataset.Attributesw_:ld-array=weights after fitting.errors_:list=Number of misclassifications in every epoch.'''def __init__(self,eta=0.01,n_iter=10):self.eta=etaself.n_iter=n_iterdef fit(self,X,y):'''Fit training data.ParametersX:{array-like},shape=[n_samples,n_features]Training vectors,where n_samples is the number of the samples and n_features is the number of features.y:array-like,shape=[n_samples]Target values.Returnsself:object'''self.w_=np.zeros(1+X.shape[1])self.errors_=[]for _ in range(self.n_iter):errors=0for xi , target in zip(X,y):update=self.eta * (target - self.predict(xi))self.w_[1:]+=update *xiself.w_[0]+=updateerrors += int (update !=0.0)self.errors_.append(errors)return selfdef net_input(self,X):'''Calculate net input'''return np.dot(X, self.w_[1:])+self.w_[0]def predict(self,X):'''Return class label after unit step'''return np.where(self.net_input(X) >=0.0,1,-1)if __name__ == "__main__":   start = time.clock()  train =pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',header=None)ppn = perceptron(eta=0.01,n_iter=10)X_train = train.drop([4], axis=1)X_train=X_train.values #dataframe convert to arrayy_train = train[4].valuesy_train=np.where(y_train == 'Iris-setosa',-1,1)ppn.fit(X_train,y_train)#预测print (ppn.predict([6.9,3.0,5.1,1.8]))#绘制错误分类样本数量plt.plot(range(1,len(ppn.errors_)+1),ppn.errors_,marker='o')plt.xlabel('Epochs')plt.ylabel('Number of misclassifications')plt.show()end = time.clock()    print('finish all in %s' % str(end - start))    

代码中用UCI机器学习库中的数据集做试验。可设置不同的学习速率eta和迭代次数n_iter观察收敛情况。

【Python-ML】感知器学习算法(perceptron)相关推荐

  1. 机器学习算法系列(一)- 感知器学习算法(PLA)

    阅读本文需要的背景知识点:数学基础知识.一丢丢编程知识 一.引言   前面一节我们了解了机器学习算法系列(〇)- 基础知识,接下来正式开始机器学习算法的学习,首先我们从最简单的一个算法--感知器学习算 ...

  2. 分类系列之感知器学习算法PLA 和 口袋算法Pocket Algorithm

    我们有一堆数据,默认他们是线性可分的.  定义f为这个数据分割线的最优解,但是我们不知道他的值.  我们仅有一个函数集H,这个函数一般是无穷大的.我们的目的就是从H中找出一条线g来尽可能的接近f.但是 ...

  3. python实现感知器算法

    在1943年,沃伦麦卡洛可与沃尔特皮茨提出了第一个脑神经元的抽象模型,简称麦卡洛可-皮茨神经元(McCullock-Pitts neuron)简称MCP,大脑神经元的结构如下图.麦卡洛可和皮茨将神经细 ...

  4. Machine Learning---感知器学习算法

    转载自:http://blog.csdn.net/stan1989/article/details/8565499 引言 这里开始介绍神经网络方面的知识(Neural Networks).首先我们会介 ...

  5. ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测

    ML之NB:基于news新闻文本数据集利用纯统计法.kNN.朴素贝叶斯(高斯/多元伯努利/多项式).线性判别分析LDA.感知器等算法实现文本分类预测 目录 基于news新闻文本数据集利用纯统计法.kN ...

  6. 【深度学习BookNote】多层感知器(multi-layer perceptron)

    多层感知器(multi-layer perceptron) 神经网络的变种目前有很多,如误差反向传播(Back Propagation,BP)神经网路.概率神经网络.卷积神经网络(Convolutio ...

  7. 神经网络与机器学习 笔记—Rosenblatt感知器收敛算法C++实现

    Rosenblatt感知器收敛算法C++实现 算法概述 自己用C++实现了下,测试的例子和模式用的都是双月分类模型,关于双月分类相关看之前的那个笔记: https://blog.csdn.net/u0 ...

  8. 机器学习系列(一)感知器分类算法

    分类算法有两种类型:感知器和适应性线性神经元 神经元的数学表示 w=[w1w2...wm],x=[x1x2...xm]w=\begin{bmatrix} w_1 \\ w_2 \\ ... \\ w_ ...

  9. Tensorflow中的多层感知器学习

    Tensorflow中的多层感知器学习 在这篇文章中,我们将了解多层感知器的概念和它在Python中使用TensorFlow库的实现. 多层感知 多层感知也被称为MLP.它是完全连接的密集层,可以将任 ...

最新文章

  1. js滚动页面到固定位置进行操作
  2. 原理剖析-Netty之服务端启动工作原理分析(上)
  3. mysql utf8转gbk cmd_转:在CMD中操作mysql数据库出现中文乱码解决方案
  4. “约见”面试官系列之常见面试题之第五十五篇之清除浮动的方法(建议收藏)
  5. LeetCode 70. 爬楼梯(动态规划)
  6. 容器服务Windows Kubernetes使用阿里云日志服务来收集容器日志
  7. 机器学习降维算法五——KPCA算法
  8. mysql中explain的详细解释
  9. JAVA日期处理(Timestamp)
  10. python中list和numpy的array的转换
  11. Python 设计模式-- 命令模式
  12. 微图App有哪些实用的功能?
  13. java母类_java关键字分类详解
  14. Word 打印 PrintOut 方法
  15. 先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了
  16. Netty心跳检测代码及源码流程
  17. 【网络】IP、域名、端口号和DNS域名解析之间的联系简介(给服务器添加域名来验证)
  18. 【Ybt OJ】[数学基础 第3章] 同余问题
  19. [pysyft-006]联邦学习pysyft从入门到精通--使用protocol
  20. Vim q-quit - 用 q 键关闭窗口

热门文章

  1. NIO详解(二): BIO 浅谈 同步 异步与阻塞 非阻塞
  2. linux编程实现dns请求,linux – 使用BIND实现辅助DNS服务器的最佳方式
  3. java领域对象_java的几种对象(po,dto,dao等)
  4. 将你的Apache速度提高十倍的经验分享
  5. Redis 宝典 | 基础、高级特性与性能调优
  6. Cron 表达式详解
  7. 手把手视频:万能开源Hawk抓取动态网站
  8. -Xms -Xmx -Xmn -Xss -XX:
  9. github 使用总结-----转
  10. AngularJs学习笔记--unit-testing