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

本次也是用processing3.0+写的,其官方网站https://processing.org/,建议直接看reference的例子进行学习。

感知器算法用的是我们老师给的ppt,实现的是二维的感知器,为了方便看,实际上多维的也是一样的:

运行效果是:

为了试验方便,我这是用了点击取点,键盘按一下t,大小写均可,下一个点的就是正例,按一下f,大小写均可,下一个点就是负例。

按s是开始进行学习度为1的迭代。结束会直接出直线,按2会出学习率为2的直线,迭代次数会打在程序底下,值是2.

代码仅供参考,请勿抄袭。转载请注明出处。

//blog:http://www.cnblogs.com/SweetBeens/p/8176764.html
class Point{
  float x, y;
  int k;
  Point(float x1,float y1){
    x = x1; y = y1;
  }
}
int num = 500;
int len = 0;
float h=1;
float r=0;
Point [] points = new Point[num];
int irit = 1000;
float w1 = 0, w2 = 0, b = 0;
//false=-1,true=1
boolean type = true;
//if one point wrong,then ,you need another irretate
boolean flag = true;
//one irretate
void rewrite(){
  for(int i = 0; i < len; i++){
    //if points[i] wrong side
    float result=points[i].k*(points[i].x*w1+points[i].y*w2+b);
    if(result<=0){
      w1 = w1+h*points[i].k*points[i].x;
      w2 = w2+h*points[i].k*points[i].y;
      b = b + h * points[i].k*r*r ;
      print(b," ");
      //w1=w1/w2;
     // w2=1;
      //b=b/w2;
      flag=true;
    }
  }
  }
//calculate R,check out in ppt
void R(){
  float max=0;
  for(int i=0;i<len;i++){
    if(abs(points[i].x)>max)
    max=abs(points[i].x);
    if(abs(points[i].y)>max)
    max=abs(points[i].y);
  }
  r=max;
  println("max ",max);
}
void mousePressed(){
  Point p = new Point(mouseX,mouseY);
  if(type){
  p.k = 1;
  fill(255);
  }
  else{
  p.k = -1;
  fill(0);
  }
  rect(mouseX,mouseY,5,5);
  points[len] = p;
  len++;
}
void keyPressed(){
  int i=0;
  float y1=0,y2=0;
  if(key == ‘T‘ || key == ‘t‘)
  type = true;
  else if(key == ‘F‘ || key == ‘f‘)
  type = false;
  else if(key == ‘s‘ || key == ‘S‘)
  {

    R();
    while(i<irit&&flag==true){
      i++;
    flag=false;
    rewrite();
  //  println("w",w1," ",w2,"b",b);
     y1 = -b/w2;
    y2 = (-b-w1*width) / w2;
    //line(0,10,width,480);

    }
    println(y1," ",y2);
    println("w1,w2,b "+w1,w2,b);
     line(0,y1,width,y2);
  }
  else if(key == ‘2‘){
    h = 0.2;
    w1 = 0;
    w2 = 0;
    b = 0;
    flag=true;
    i=0;
    while(i<irit&&flag==true){
      i++;
    flag=false;
    rewrite();
  //  println("w",w1," ",w2,"b",b);
     y1 = -b/w2;
    y2 = (-b-w1*width) / w2;
    //line(0,10,width,480);

    }
    println(y1," ",y2);
    println("w1,w2,b "+w1,w2,b);
     line(0,y1,width,y2);

  }
  println("i ",i);
}
void setup(){
  size(500,500);
  background(255);
}
void draw(){
}

原文地址:https://www.cnblogs.com/SweetBeens/p/8176764.html

时间: 2024-10-15 17:26:35

机器学习——感知器算法实现的相关文章

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

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

机器学习--感知器数据分类算法步骤(慕课网-实现简单的神经网络)

权重向量W,训练样本X 1.把权重向量初始化为0,或把每个分量初始化为[0,1]之间的任意小数 2.把训练样本输入感知器,得到分类结果(-1或者1) 3.根据分类结果更新权重向量 感知器算法适用于图一的可线性分隔开的数据样本

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

感知器作为人工神经网络中最基本的单元,有多个输入和一个输出组成.虽然我们的目的是学习很多神经单元互连的网络,但是我们还是需要先对单个的神经单元进行研究. 感知器算法的主要流程: 首先得到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: 身高,体重,三围,颜值,学习成绩(帅的人学习成绩好的少...为何要这么一个扯淡的特征下面会讲解)等等. 假设有一个标准:每一个评分项给予多少分的权重,

python机器学习——感知器

最近在看机器学习相关的书籍,顺便把每天阅读的部分写出来和大家分享,共同学习探讨一起进步!作为机器学习的第一篇博客,我准备从感知器开始,之后会慢慢更新其他内容. 在实现感知器算法前,我们需要先了解一下神经元(neuron)的工作原理,神经元有很多树突和一个轴突,树突(Dendrites)可以从其他神经元接收信息并将其带到细胞体(Cell nucleus),轴突(Axon)可以从细胞体发送信息到其他神经元.树突传递过来的信息在细胞体中进行计算处理后,如果结果超过某个阈值,轴突会传递信号到其他的神经元

感知器算法初探

今天学了感知器算法: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更简单的算法.后续讲到学习理论是,会将其作为基本的构造步骤.

感知器算法--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)

机器学习之感知器算法原理和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