kernel <- function(v1, v2) { sum(v1*v2) } visualizacao <-function(atributos, classes) { N = length(classes) cores = rep(4, N) cores[classes==1] = 2 plot(atributos, col=cores) } lagrange <- function(alphas, classes, atributos, lambda=.5) { N = length(alphas) T1 = sum(alphas) T3 = -lambda * sum(alphas*classes) T2 = 0 for (i in 1:(N-1)) { for (j in (i+1):N) { T2 = T2 + alphas[i] * alphas[j] * classes[i]*classes[j] * kernel(atributos[i,],atributos[j,]) } } T1 - 0.5 *T2 + T3 } random_svm <- function(atributos, classes) { N = length(classes) alphas = runif(N) Lmax = lagrange(alphas, classes, atributos) alphasmax = alphas for (t in 1:100) { alphas = runif(N) Latual = lagrange(alphas, classes, atributos) if (Latual > Lmax) { alphasmax = alphas Lmax = Latual } } alphasmax } quase_svm <- function(atributos, classes) { alphas = random_svm(atributos, classes) N = length(alphas) alphas_max = alphas l_max = lagrange(alphas, classes, atributos) for (t in 1:40) { for (a in 1:N) { alphas[a] = alphas[a] + 0.1*rnorm(1) if (alphas[a] <0) alphas[a] = 0 #alphas = (alphas - min(alphas))/(max(alphas) - min(alphas)) l_atual = lagrange(alphas, classes, atributos) if (l_atual > l_max) { alphas_max = alphas l_max = l_atual cat("tentativa ", t,"\n") print(l_max) } } print(t) } alphas_max } calcular_w <- function(alphas, vetores_suportes, classes) { w = rep(0, ncol(vetores_suportes)) for (v in 1:length(alphas)) { w = alphas[v] * classes[v] * vetores_suportes[v,] } w } classificacao_svm <- function(teste, alphas, vetores_suportes, classes) { w = calcular_w(alphas, vetores_suportes, classes) classificacoes = rep(0, nrow(teste)) for (t in 1:nrow(teste)) { classificacoes[t] = kernel(w, teste[t,]) } classificacoes } main <- function() { treino = as.matrix(read.table('treino.dat')) D = ncol(treino) atributos = treino[,1:(D-1)] classes = treino[,D] visualizacao(atributos, classes) quase_alphas = quase_svm(atributos, classes) lagrange(quase_alphas, classes, atributos) teste = as.matrix(read.table('teste.dat')) D = ncol(treino) atributosteste = teste[,1:(D-1)] classesteste = teste[,D] cat('quase alphas :') print(quase_alphas) pontuacao = classificacao_svm(atributosteste, quase_alphas, atributos, classes) print(pontuacao) print(classesteste) }