data <- read.csv("random.csv", fileEncoding = "UTF-8",header = F)
x <- data.matrix(data[,1:3])
t <- data[,4]
w <- c(1, 1, 1) #weight(w0, w1, w2)
eta <- 0.2 #学習係数

#weightの更新メソッド
update <- function(x, t, w) {
  if (sign(x %*% w) == sign(t)) {
    return(w)
  }
  return(w + eta * x * t)
}

#全データでweightが更新されなくなるまで繰り返す
index <- 1 
while (index <= nrow(x)) {
  tmp <- update(x[index,], t[index], w)
  if (all(tmp == w)) { # w更新があったか
    index <- index + 1 # w更新なし
  } else { # w更新あり
    w <- tmp
    index <- 1 # ループの最初に戻す
  }
  print(w)
}

getPredict <- function(x,w){
  return (sign(x %*% w))
}

plot(x[,2],x[,3], pch = t + 1)
abline( c(-w[1] / w[3], -w[2] / w[3])) # y = b + ax abline(b,a)
cat("y = ", -w[2] / w[3], "x +", -w[1] / w[3],"\n")