首页 > 解决方案 > R中的感知器算法,该过程卡在第一个时期

问题描述

我一直在尝试制作自己的感知器算法。但是,似乎算法在第一个时期就停止了,因此没有正确的分类。以下是我在 R 中对感知器算法的实现。

x1 <- runif(30,-1,1) 
x2 <- runif(30,-1,1) 
x <- cbind(x1,x2) 
w = matrix(0,3,1)  # initialize weights for x1, x2, bias
b <- c(0,0)          # bias = 0
xb<- cbind(x,b)      # importing bias (x1,x2,b) 
y <- ifelse(x2>0.5+x1,+1,-1) #y target

perceptron = function(xb,y,w, learning.rate=0.5){
  k = 1000           # count epochs
  error <- matrix(, nrow = nrow(xb), ncol = k, byrow = TRUE)
  #xb[,3] is the col of biases

  for (j in 1:k) {
    for (i in 1:nrow(x)) {
      yc <- sum(xb[i,] * w) #ycomputed
      error[i,k] <- y[i] - yc
      if (y[i] != yc) {
        w <- w + learning.rate * error[i,k] * x[i,] 
        xb[i,3] <- xb[i,3] + learning.rate * error[i,k]      #b <- b + learning.rate * (y[i]-yc) 
      }
      else {
        w <- w
        xb[i,3] <- xb[i,3]
      }
    }
    return(list(w,xb[,3],error[,k]))
    if (w[k] == w[k-1]){
      break
    }
  }
}

另外,我这边似乎有一个计算错误,开始于:

w <- w + learning.rate * error[i,k] * x[i,]

对于上述情况,控制台上出现了这条注释:"Error in cat("1: In w + learning.rate * error * x[i, ] :\n 更长的对象长度不是更短的对象长度的倍数", :参数 2(类型 'list')不能被 'cat' 处理另外:有 30 个警告(使用 warnings() 来查看它们)”。我无法理解这一点,因为在我看来似乎没有成为一个问题,因为它是一个向量(w)乘以一个数字(learning.rate * error * x[i, ])。感谢您花时间阅读并希望回答我的问题。

标签: ralgorithmperceptron

解决方案


推荐阅读