Máquinas de Suporte Vetorial tem tido um grande apelo nas aplicações práticas. Nesse post, seguiremos a mesma ideia do post anterior mas agora, utilizaremos uma biblioteca já existente escrita em Java para a execução do SVM.
A biblioteca a ser utilizada é denominada LIBSVM. O primeiro passo é obter o código fonte e armazená-lo em alguma pasta na sua máquina. Os arquivos estão na pasta denominada Java.
O primeiro passo é fazer a leitura dos dados de interesse no R. Utilizaremos aqui os dados já apresentados no post acerca do Risco de Crédito.
Algumas etapas são necessárias para se preparar o arquivo para o LIBSVM:
#Limpa o Workspace rm(list=ls()) #Importa os dados German.csv setwd("C:\\Blog\\java") library(RCurl) URL <- "https://dl.dropboxusercontent.com/u/36068691/Blog/german.csv" x <- getURL(URL) dados <- read.csv(textConnection(x)) #Separa o vetor de resposta RESPONSE<-dados$RESPONSE #Troca zero por -1 RESPONSE[RESPONSE==0]<- -1 #Remove a coluna RESPONSE dados<-dados[,-32]O formato exigido pelo LIBSVM deve seguir o formato: [categoria] [coluna1]:[valor1] [coluna2]:[valor2] .... Nesse sentido, fazemos:
#Função para formato libSVM libsvm<-function(x){ tt<-cbind(t(x),1:length(x)) tt<-tt[tt[,1]>0,] str<-paste(c(rbind(tt[,2],":",tt[,1]," ")),collapse ="") return(str) } #Cria as strings str<-"" for(i in 1:nrow(dados)){ x<-dados[i,] str<-rbind(str,libsvm(x)) } str<-str[-1,] #Adiciona a resposta txt<-cbind(RESPONSE,str) txt<-apply(txt,1,function(x) paste(x[1],x[2])) write.table(txt,"C:/Blog/german",quote=F,row.names=F,col.names=F)O arquivo german gerado já estará no formato do LIBSVM. Observação: A criação do arquivo german no formato esparso também pode ser gerado utilizando-se as funções read.matrix.csr e write.matrix.csr do pacote e1071. É preciso compilar agora o arquivo svm_train.java e gerar o arquivo svm_train.class antes de prosseguir. Pode utilizar o Eclipse para isso. O próximo passo é utilizar a função svm_train da biblioteca LIBSVM:
#Em seguida executamos a função java parms<-c("-s 0 "," -t 3 "," -d 3 "," -g 1 "," german "," saida") system(paste("java svm_train",paste(parms,collapse = "")))Os resultados da análise são apresentados no console:
Nenhum comentário:
Postar um comentário