Алгоритм персептрона в R, процесс застрял в 1-й эпохе - PullRequest
0 голосов
/ 21 декабря 2018

Я пытался создать свой собственный алгоритм персептрона.Но, похоже, что алгоритм останавливается в первой эпохе, и в результате не существует правильной классификации.Ниже приведена моя реализация алгоритма персептрона в 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,] </p>

Для вышеизложенного на консоли появляется этот комментарий: «Ошибка в cat (» 1: В w + learning.rate* error * x [i,]: \ n длинная длина объекта не кратна короткой длине объекта ",: аргумент 2 (тип 'список') не может быть обработан 'cat' Кроме того: было 30 предупреждений (используйте предупреждения(), чтобы увидеть их) ". ​​Я не могу понять из этого, потому что на мой взгляд, это не проблема, так как это вектор (w), умноженный на число (learning.rate * error * x[я,]). Спасибо за то, что уделили мне время и ответили на мой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...