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")