python实现神经网络感知器算法


Posted in Python onDecember 20, 2017

现在我们用python代码实现感知器算法。

# -*- coding: utf-8 -*-
import numpy as np


class Perceptron(object):
 """
 eta:学习率
 n_iter:权重向量的训练次数
 w_:神经分叉权重向量
 errors_:用于记录神经元判断出错次数
 """

 def __init__(self, eta=0.01, n_iter=2):
  self.eta = eta
  self.n_iter = n_iter
  pass

 def fit(self, X, y):
  """
  输入训练数据培训神经元
  X:神经元输入样本向量
  y: 对应样本分类
  X:shape[n_samples,n_features]
  x:[[1,2,3],[4,5,6]]
  n_samples = 2 元素个数
  n_features = 3 子向量元素个数
  y:[1,-1]
  初始化权重向量为0
  加一是因为前面算法提到的w0,也就是步调函数阈值
  """
  self.w_ = np.zeros(1 + X.shape[1])
  self.errors_ = []
  for _ in range(self.n_iter):
   errors = 0
   """
   zip(X,y) = [[1,2,3,1],[4,5,6,-1]]
   xi是前面的[1,2,3]
   target是后面的1
   """
   for xi, target in zip(X, y):
    """
    predict(xi)是计算出来的分类
    """
    update = self.eta * (target - self.predict(xi))
    self.w_[1:] += update * xi
    self.w_[0] += update
    print update
    print xi
    print self.w_
    errors += int(update != 0.0)
    self.errors_.append(errors)
    pass

 def net_input(self, X):
  """
  z = w0*1+w1*x1+....Wn*Xn
  """
  return np.dot(X, self.w_[1:]) + self.w_[0]

 def predict(self, X):
  return np.where(self.net_input(X) >= 0, 1, -1)


if __name__ == '__main__':
 datafile = '../data/iris.data.csv'
 import pandas as pd

 df = pd.read_csv(datafile, header=None)
 import matplotlib.pyplot as plt
 import numpy as np

 y = df.loc[0:100, 4].values
 y = np.where(y == "Iris-setosa", 1, -1)
 X = df.iloc[0:100, [0, 2]].values
 # plt.scatter(X[:50, 0], X[:50, 1], color="red", marker='o', label='setosa')
 # plt.scatter(X[50:100, 0], X[50:100, 1], color="blue", marker='x', label='versicolor')
 # plt.xlabel("hblength")
 # plt.ylabel("hjlength")
 # plt.legend(loc='upper left')
 # plt.show()

 pr = Perceptron()
 pr.fit(X, y)

其中数据为

python实现神经网络感知器算法 

控制台输出为

python实现神经网络感知器算法 

你们跑代码的时候把n_iter设置大点,我这边是为了看每次执行for循环时方便查看数据变化。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的GUI框架PySide的安装配置教程
Feb 16 Python
详解Python3中字符串中的数字提取方法
Jan 14 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
Jun 05 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
Pytorch转tflite方式
May 25 Python
Python flask框架如何显示图像到web页面
Jun 03 Python
编写python程序的90条建议
Apr 14 Python
Python代码实现KNN算法
Dec 20 #Python
详解appium+python 启动一个app步骤
Dec 20 #Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 #Python
Python实现感知机(PLA)算法
Dec 20 #Python
详解Python nose单元测试框架的安装与使用
Dec 20 #Python
使用python实现knn算法
Dec 20 #Python
python实现kNN算法
Dec 20 #Python
You might like
php中神奇的fastcgi_finish_request
2011/05/02 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
Python操作json数据的一个简单例子
2014/04/17 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
python如何将多个PDF进行合并
2019/08/13 Python
Python类的动态绑定实现原理
2020/03/21 Python
工商管理应届生求职信
2013/10/07 职场文书
最新计算机专业自荐信
2013/10/16 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
孔庙导游词
2015/02/04 职场文书
第一军规观后感
2015/06/12 职场文书
心得体会格式及范文
2016/01/25 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
javascript对象3个属性特征
2021/11/17 Javascript
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android