Anteriormente, vimos como executar a biblioteca LIBSVM usando o código em Java. Agora, o exercício é utilizar o código compilado em C++. No Windows é necessário que RTools esteja instalado (Dica:Instale na raiz do computador "C:\").
Esse componente do R instala juntamente com outras funções, o compilador de código fonte em C++ denominado MinGW. Qualquer outro compilador pode ser utilizado nesse exercício.
O próximo passo é obter o código fonte do programa libSVM que desejamos utilizar. Aqui, escolhemos o código desenvolvido por Youngmin Cho disponível aqui (arccos.tar.gz)! Baixe os arquivos e extrai-os em uma pasta (por exemplo C:\Blog\DeepLearning).
Em seguida, fazemos a preparação para a base de dados como no post Usando a biblioteca LIBSVM no R:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #Limpa o Workspace rm (list= ls ()) #Importa os dados German.csv setwd ( "C:\\Blog\\DeepLearning" ) library (RCurl) 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] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #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) |
1 2 | #Criar os executáveis system ( "make all" ) |
1 2 3 4 | #Em seguida executamos a função C++ parms<- c ( "-s 0 " , " -t 5 " , " -N 0 1 1 " , " -d 3 " , " -g 1 " , " german " , " saida" ) #Passa os parâmetros system ( paste ( "svm-train " , paste (parms,collapse = "" ))) |
1 2 3 4 | #Faz a previsão para um novo conjunto de dados (german) system ( "svm-predict german saida resultado.txt" ) #Lê os dados preditos de volta para o R predito<- read.table ( "resultado.txt" ) |
Para outros modelos é necessário executar o mesmo código com variações nos parâmetros e avaliar a acurácia de cada modelo gerado para cada parâmetro selecionado.