Алгоритм персептрона не сходится (R) - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь реализовать персептрон в R для примера набора данных, однако он не сходится. Я не получаю никаких ошибок, но код не останавливается и кажется, что он застрял в цикле. Вот код:

p_train = read.csv("data-10.csv")

Classify <- function(x, weights) {
  return(sign((x) %*% weights))
}

Perceptron <- function(data, threshold) {
  w <- c(-threshold, runif(ncol(data) - 2))
  n <- nrow(data)
  label <- data[ , 1]
  obs <- data[ , 2:ncol(data)]
  misclassfied <- TRUE
  epoc <- 0

  while (misclassfied) {
    misclassfied <- FALSE
    for (i in 1:n) {
      if (label[i] * Classify(as.matrix(obs[i , ]), as.numeric(w)) <= 0) {
        w <- as.numeric(w + label[i]) * as.numeric(obs[i , ])
        misclassfied <- TRUE
      }
    }
    epoc <- epoc + 1
  }

  print(paste("EPOC: ", as.character(epoc)))
  return(w)
}

Perceptron(p_train, 0.75)

Вот как выглядит набор данных:

<table border=1>
<tr>
  <th>Label</th>
  <th>Bias</th>
  <th>X1</th>
  <th>X2</th>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>.433</td>
<td>.454</td>
</tr>
<tr>
<td>-1</td>
<td>1</td>
<td>.673</td>
<td>.324</td>
</tr>
</table>

Любая помощь будет очень ценной. Спасибо!

...