用R实现一个简单的感知机

1. 感知机模型

定义:假设输入空间(特征空间)是χRn,输出空间是Y={+1,1}。输入xX  表示实例的特征向量,对应于输入空间的点;输出y∈Y 表示实例的类别。由输入空间到输出空间的如下函数 

f(x)=sign(wx+b)

称为感知机。其中, w b 为感知机模型参数, wRn 叫做权值, b∈R      叫做偏置, wx 表示 w x 的内积。 sign 为符号函数。                        

2.感知机学习算法

y i
y i y i
y i

输入:训练数据集T={(x1,y1),(x2,y2),,(xN,yN)},其中xiχ=Rn,yiY={+1,1},i=1,2,,N;学习率η(0<η1); 
输出:w,b;感知机模型f(x)=sign(wx+b)
(1)选取初值w0,b0 
(2)在训练集中选取数据(xi,yi) 
(3)如果yi(wxi+b)0

yi
yi
w <- w + eta * y[i] * x[i,]
      b <- b + eta * y[i]

其中eta表示计算误差(实际值-计算输出值)yi
yieta
yi
yieta表示计算误差(实际值-计算输出值)

yiyiyiyiyi

(4)转至(2),直至训练集中没有误分类点。

yi
yi
yi
yi
percept <- function(data = data,eta = eta ){
  x <- data[,-3]
  y <- data[,3]
  w <- c(1,-1)
  b <- 0
  len <- length(y)
  i <- 1  
  while(i <= len){
    if(y[i] * (x[1]* w[1]+x[2]*w[2]  + b) <= 0){
      ## update w and b
      w[1] <- w[1] + eta  * x[1]
      w[2] <- w[2] + eta  * x[2]
      b <- b + eta
      i <- 1 ##important, for traversing every point
    }
    else{
      i <- i + 1 
    }
  }
  return(list(w=w,b=b))
}

yi
yi
yi
yi
data<-matrix(c(1 ,1 ,1 ),nrow = 1, ncol = 3,byrow=T)

yi
yi
yi
yi
> data
     [,1] [,2] [,3]
[1,]    1    1    1

说明一下数据含义,第一列代表颜色,1为红,-1为黄,第二列代表形状,1为圆形,-1为弯形,第三列为输出,代表水果的种类,1为苹果,-1为香蕉,本文中的感知器实现了简单的分辨香蕉与苹果的功能,该案例出自吴岸城编的神经网络与深度学习。

yi
yi percept(data,1)

yiyi
$w
[1] 2 0


$b
[1] 1

即输出了感知机的s函数:s=2*p1+1

这时我们来尝试判断一下香蕉:

s=2*-1+1=-1

sign(s)=-1

香蕉判断也正确,误差为0,学习结束

香蕉
ww+ηyixi bb+ηyi yiyi
y i
y i
发布了72 篇原创文章 · 获赞 37 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/xspyzm/article/details/75210745