Recursos Machine Learning da Microsoft – VM Data Science

Olá pessoal, tudo bem?

Durante esse mês e no próximo estarei escrevendo vários artigos para expor alguns recursos de Machine Learning disponibilizados pela Microsoft.

Já abordamos aqui alguns deles, como o ML Studio e o Azure Notebooks que são recursos PaaS (Platform as a Service) que te permitem explorar Machine Learning apenas fornecendo seu código e dados. Nesses casos a plataforma em si já está preparada e é disponibilizada como serviço.

Desta vez irei abordar um recurso de IaaS (Infrastructure as a Service), que é a Máquina Virtual de Data Science. Nele você possui maior liberdade para explorar a parte computacional, especificando a configuração da máquina e definindo, por exemplo, a CPU ou GPU que será utilizada. Esta máquina vários pacotes, softwares e outras ferramentas para Data Science já configurados, visando facilitar o trabalho de quem precisa trabalhar com dados e Machine Learning.

Modelos de Nuvem

O Microsoft Azure é a nuvem pública disponibilizada pela Microsoft. E assim como outras plataformas de nuvem disponibilizadas no mercado, o Microsoft Azure possui vários recursos de IaaS, PaaS e SaaS (Software as a Service). 

E note que, dependendo do recurso utilizado, podemos ter maior ou menor liberdade para definir e configurar aspectos importantes para execução da nossa aplicação. Até então tratei aqui, nestes artigos de Machine Learning, soluções PaaS. Porém, algumas vezes é necessário criar um recurso que nos dê maior liberdade para definir e customizar o ambiente de execução dos nossos algoritmos de Machine Learning.

Criando Máquina Virtual de Data Science

A máquina virtual é um recurso muito utilizado desde os primórdios da computação em nuvem e nos permite acesso a virtualização de uma máquina que pode ser customizada conforme nossas necessidades. As máquinas são criadas a partir de imagens padrão de sistemas operacionais como Windows e Linux. Além disso, elas já possuem configurados softwares como Sistemas Gerenciados de Banco de Dados (SGBDs).

A seguir irei passar o procedimento para criação dessa máquina virtual:

  1. Acesse o portal do Azure (portal.azure.com) utilizando uma conta Microsoft com assinatura ativa
  2. Clique em “Create a resource” na parte superior esquerda do portal e busque por “Data Science Virtual Machine”.
  3. Será exibida uma lista com máquinas virtuais de Data Science já configuradas e preparadas e que a própria Microsoft disponibiliza:
    • Notem que a máquina virtual está preparada para diferentes sistemas operacionais: desde Linux Ubuntu até Windows 2016.
  4. Vou criar a máquina virtual usando a opção “Data Science Virtual Machine for Linux (Ubuntu):
    • A descrição já informa todos os pacotes disponibilizados na máquina virtual. Temos já configurados o Microsoft R Server, o Anaconda Python 2.7 e 2.5, o SQL Server 2017, TensorFlow, Keras, entre outros.
  5. Clique em “Create”.
  6. O portal do Azure irá agora guiá-lo na criação da máquina virtual.
  7. Na etapa 1 (Basics), você especifica o nome da máquina, o tipo de disco e credenciais de acesso. Além disso, você define onde será criada a máquina virtual (Location) e também especifica um grupo de recursos onde a máquina será criada.
  8. Na etapa 2 (Size), você define o tamanho da máquina virtual. Aqui você pode definir uma máquina com GPU, pode exemplo, e você consegue ter uma estimativa de custo mensal da máquina virtual (considerando ela ligada 24/7).
  9. Selecione a que melhor se encaixa nas suas necessidades e clique em “Select” na parte inferior da tela.
  10. Na etapa 3, você irá configurar disponibilidade, armazenamento, rede virtual, entre outros recursos periféricos associados a máquina virtual. Cada um desses recursos possuem uma documentação associada que te permite explorar mais opções.
    • Para Public Endpoint Ports, selecione aqueles que aplicam ao seu caso.
  11. Mas aqui vamos segui com a configuração padrão sugerida pelo Azure. Clique em “OK”.
  12. Na etapa 4 é mostrado um sumário de tudo que está sendo criado.
    • Note que é dado um alerta quando a compras feitas no Marketplace. Mas nesse caso a compra é da máquina virtual Ubuntu que é gratuita. Então, não há custo adicional além daquele especificado na etapa 2 da criação da máquina virtual.
  13. Clique em “Create” para finalizar a criação da máquina.
  14. O processo de criação poderá durar alguns minutos de acordo com o tamanho da máquina selecionado.
  15. Após a criação, você será notificado e será aberta a página inicial no recurso.
    • Você pode acessar o recurso através do grupo de recursos (em “Resource Groups”) ou através do link para todos os recursos “All Resources”.
  16. Na tela de visão geral do recurso (em “Overview”), você terá acesso ao IP público que iremos usar para acessar a máquina virtual via SSH. Coloque o mouse sobre o texto do IP Public e clique no ícone que aparecerá para copiar o texto. Além disso, você ainda pode clicar no botão conectar (“Connect”) para receber instruções de acesso a máquina usando SSH ou RDP.

    Por padrão, toda vez que a máquina for reinicializada, o IP é modificado. Uma opção recomendada é configurar gratuitamente um DNS para a máquina e semrpe usar esse DNS conectar-se a ela.
  17. Além disso, a máquina virtual Linux já possui configurado o X2Go.
  18. Neste caso você deve instalar a ferramenta cliente através deste link: http://wiki.x2go.org/doku.php/doc:installation:x2goclient

Acessando a Máquina Virtual de Data Science

A documentação para uso da máquina virtual foi baseada no link https://docs.microsoft.com/en-us/azure/machine-learning/data-science-virtual-machine/linux-dsvm-walkthrough

  1. Para usar a máquina virtual Linux que criei anteriormente, irei utiliza a plataforma X2Go com SFCE.
  2. Após criar a sessão, clique no item e então serão solicitadas as credenciais de acesso que, no meu caso, são usuário e senha.
  3. Após conexão bem sucedida, será aberta a sessão:

Baixando dataset de exemplo

Vamos agora prosseguir fazendo o download de um dataset. No caso da documentação da Microsoft, eles sugerem o uso do spambase, um dataset que contém dados que que estão marcados como sendo SPAM ou não. E com base nesse dataset, vamos utilizar algoritmos de classificação para tentar predizer se um determinado dado é SPAM (https://archive.ics.uci.edu/ml/datasets/spambase).

  1. Para baixar o dataset, acesso o terminal de comando e execute o seguinte comando:
    wget http://archive.ics.uci.edu/ml/machine-learning-databases/spambase/spambase.data
    • É recomendável acessar esse artigo direto do browser da VM para facilitar a cópia e uso dos códigos de exemplo.
    • Use Shift + Insert para colar texto no terminal
  2. A seguir, vamos criar uma linha de cabeçalho para o dataset para facilitar o nosso entendimento dos dados.
  3. Execute o seguinte comando para criar um novo arquivo chamado header:
    echo 'word_freq_make, word_freq_address, word_freq_all, word_freq_3d,word_freq_our, word_freq_over, word_freq_remove, word_freq_internet,word_freq_order, word_freq_mail, word_freq_receive, word_freq_will,word_freq_people, word_freq_report, word_freq_addresses, word_freq_free,word_freq_business, word_freq_email, word_freq_you, word_freq_credit,word_freq_your, word_freq_font, word_freq_000, word_freq_money,word_freq_hp, word_freq_hpl, word_freq_george, word_freq_650, word_freq_lab,word_freq_labs, word_freq_telnet, word_freq_857, word_freq_data,word_freq_415, word_freq_85, word_freq_technology, word_freq_1999,word_freq_parts, word_freq_pm, word_freq_direct, word_freq_cs, word_freq_meeting,word_freq_original, word_freq_project, word_freq_re, word_freq_edu,word_freq_table, word_freq_conference, char_freq_semicolon, char_freq_leftParen,char_freq_leftBracket, char_freq_exclamation, char_freq_dollar, char_freq_pound, capital_run_length_average,capital_run_length_longest, capital_run_length_total, spam' > headers
  4. Por fim, vamos concatenar os dois arquivos usando cat:
    cat spambase.data >> headers
    mv headers spambaseHeaders.data
  5. Pronto, o dataset já está pronto para ser explorado.

Explorando dataset de exemplo

  1. Para explorar o Dataset, podemos usar recursos como o Microsoft R Open, Anaconda Python e Jupyter Notebooks, que já estão instalados na máquina virtual.
  2. Seguindo a documentação da Microsoft, vamos explorar o dataset usando Microsoft R Open
  3. Para isso, vamos baixar códigos R de exemplo para explorar o dataset em questão:
  4. Depois disso, você pode abrir o console interativo do R.
  5. Porém, vamos baixar o RStudio usando o seguinte comando:
    • ./Desktop/DSVM\ tools/installRStudio.sh
    • O atalho para acesso ao RStudio também já se encontra na área de trabalho.
  6. Já no R (console ou RStudio), vamos importar os dados e preparar o ambiente usando o seguinte comando:
    data <- read.csv("spambaseHeaders.data")
    set.seed(123)
    
  7. Para visualizar o sumário das estatísticas dos dados:
    summary(data)
    
  8. Para visualizar os dados em outro formato:
    str(data)
    
  9. Segue tela:
  10. Em seguida, vamos executar utilizar o ggplot para explorar os dados.
    • Pode ser necessário instalar o pacote ggplot2 (install.packages(‘ggplot2’, dep = TRUE))
    # transform spam column to categorical value
    data$spam <- as.factor(data$spam)
    
    #include ggplot2 library
    library(ggplot2)
    ggplot(data) + geom_histogram(aes(x=char_freq_exclamation), binwidth=0.25)
    
    #change plot to get rif of zero bar
    email_with_exclamation = data[data$char_freq_exclamation > 0, ]
    ggplot(email_with_exclamation) + geom_histogram(aes(x=char_freq_exclamation), binwidth=0.25)
    
    #explory the non-trivial density above 1:
    ggplot(data[data$char_freq_exclamation > 1, ]) + geom_histogram(aes(x=char_freq_exclamation), binwidth=0.25)
    
    #split data by spam vs ham:
    ggplot(data[data$char_freq_exclamation > 1, ], aes(x=char_freq_exclamation)) + geom_density(lty=3) + geom_density(aes(fill=spam, colour=spam), alpha=0.55) + xlab("spam") + ggtitle("Distribution of spam \nby frequency of !") + labs(fill="spam", y="Density")
    

  11. Você ainda pode seguir o mesmo procedimento para analisar outras colunas do dataset.

Treinando e testando o modelo

Agora vamos seguir com a parte de treino e teste do modelo de classificação. O objetivo aqui é classificar os e-mails como sendo spam ou não.

  1. Primeiro vamos fazer o split dos dados para treino e teste:
    rnd <- runif(dim(data)[1])
    trainSet = subset(data, rnd <= 0.7)
    testSet = subset(data, rnd > 0.7)
    
  2. Depois disso, vamos incluir o algoritmo de árvore de decisão (decision tree). Para isso vamos precisar do pacote rpart (Recursive Partitioning and Regression Trees) que já deve ter instalado na máquina virtual.
    require(rpart)
    model.rpart <- rpart(spam ~ ., method = "class", data = trainSet)
    plot(model.rpart)
    text(model.rpart)
    

  3. O próximo passo é medir a acurácia de predição obtida pelo algoritmo considerando o dataset de treino:
    trainSetPred <- predict(model.rpart, newdata = trainSet, type = "class")
    t <- table('Actual Class' = trainSet$spam, 'Predicted Class' = trainSetPred)
    accuracy <;- sum(diag(t))/sum(t)
    accuracy
    
  4. E depois a acurácia de predição obtida pelo algoritmo considerando o dataset de teste:
    testSetPred <- predict(model.rpart, newdata = testSet, type = "class")
    t <- table('Actual Class' = testSet$spam, 'Predicted Class' = testSetPred)
    accuracy <- sum(diag(t))/sum(t)
    accuracy
    
  5. Por fim, ainda podemos tentar o algoritmo random forest, conforme segue:
    require(randomForest)
    trainVars <- setdiff(colnames(data), 'spam')
    model.rf <- randomForest(x=trainSet[, trainVars], y=trainSet$spam)
    
    trainSetPred <- predict(model.rf, newdata = trainSet[, trainVars], type = "class")
    table('Actual Class' = trainSet$spam, 'Predicted Class' = trainSetPred)
    
    testSetPred <- predict(model.rf, newdata = testSet[, trainVars], type = "class")
    t <- table('Actual Class' = testSet$spam, 'Predicted Class' = testSetPred)
    accuracy <- sum(diag(t))/sum(t)
    accuracy
    

Considerações Finais

Este artigo teve como propósito apresentar o recurso de máquina virtual do Microsoft Azure e, mais especificamente, a imagem de Data Science preparada pelo Microsoft.
Exploramos rapidamente o uso da máquina virtual com um algoritmo simples de classificação para dataset de spams.

Nos próximos artigos vamos explorar como integrar essa máquina ao Machine Learning Studio, já visto no artigo https://talkitbr.com/2018/06/01/desvendando-recursos-machine-learning-da-microsoft-p1/
além de outros recursos como Microsoft Azure Machine Learning Workbench.

Até a próxima!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s