Machine Learning

Os algoritmos de Machine Learning utilizam de dados fornecidos para alcançarem um objetivo proposto, quanto maior a quantidade e a qualidade dos dados importados, mais correto e preciso será o resultado.

O que é Machine Learning?

Machine Learn é um subconjunto da Inteligência Artificial, conhecido como Aprendizado de Máquina tem o objetivo treinar um algoritmo com base em um conjunto de dados para alcançar um resultado, como para reconhecimento de algo desejado ou identificar um padrão. É capaz de aprender e melhorar conforme os dados fornecidos sem necessariamente uma instrução direta.

Principais tipos de Machine Learning

Existem algumas formas e tratativas para chegar no resultado esperado e as principais delas são:

1 – Aprendizado Supervisionado

O Aprendizado Supervisionado necessita da intervenção humana para que o algoritmo possa funcionar da melhor forma possível.

Após receber os dados, será feita uma preparação, que é a parte manual, onde haverá a Limpeza que consiste em remover os dados duplicados, remover dados que sejam irrelevantes para o objeto e dados vazios, por exemplo. A Rotulação que serve para dizer o que são aqueles dados, nesse exemplo o que é Carro é o que é Ônibus e por fim a divisão dos dados em Treino e Teste, essa etapa é importante para que após o treinamento possamos utilizar os dados de teste para medir o desempenho do algoritmo.

Divisão dos dados:

  • Dados de Treino: são usados para ensinar o modelo.
  • Dados de Teste: são usados para avaliar o desempenho do modelo.
  • Divisão de dados aleatória: Divide os dados aleatoriamente entre treino e teste.
  • Divisão de dados estratificada: Divide proporcionalmente os dados entre treino e teste.

Com os dados preparados, divididos em Treino e Teste e devidamente rotulados, são apresentados para o Algoritmo, que após processar os Dados de Treino gera o Modelo. O Modelo receberá os Dados de Teste na Predição para que o desempenho do resultado possa ser medido.

Medição do desempenho:

Como foram identificados quais dados são corretos no processo de rotulação, os Resultados gerados na Predição pelo Modelo são comparados com os Dados de Teste, a quantidade de acertos do algoritmo é a porcentagem de Acurácia de quão bom está o Modelo.

Por Exemplo:
Dados de Teste esperados:     [ônibus, carro, ônibus]
Dados previstos pelo Modelo: [ônibus, carro, carro]
Podemos dizer que a Acurácia é de 66.67% pois de 100%, três valores, acertou dois e errou um.

Principais algoritmos:

  • Regressão linear
  • Regressão polinomial
  • Vizinhos mais próximos exatos
  • Naive Bayes
  • Árvores de decisão

2 – Aprendizado Não Supervisionado

Aprendizado não supervisionado não necessita da intervenção humana, os dados não são rotulados como no Aprendizado Supervisionado, o próprio algoritmo interpreta e processa os dados.

Não há uma forma de medir o desempenho, portanto o que o Algoritmo irá fazer, será tentar procurar padrões e classificá-los em grupos. A quantidade de grupos pode ser informada pelo analista.

Principais algoritmos:

  • Difundido significa
  • Criação de cluster k-means
  • Clustering hierárquico
  • Mínimos quadrados parciais

3 – Aprendizado Semi-Supervisionado

Aprendizado Semi-Supervisionado ocorre quando uma parte dos dados é tratada por pessoas, alguns dados apenas serão rotulados, e o restante interpretado pelo algoritmo, uma junção do Aprendizado Supervisionado e do Não-Supervisionado.

4 – Aprendizado por Reforço

Aprendizado por reforço é um aprendizado por tentativa e erro onde o algoritmo interage com o ambiente ao seu redor recebendo recompensas ou punições com o objetivo de conseguir a maior recompensa possível.

O aprendizado é ao longo prazo, onde o algoritmo vai aprendendo com os erros e acertos e os dados de treino que o algoritmo recebe dependem das decisões que o algoritmo toma no ambiente em que foi inserido.

Um exemplo pode ser uma partida de xadrez:

O Agente, é o personagem que está no jogo, no caso será um dos jogadores controlados pelo algoritmo. O Ambiente é o jogo de xadrez em si. O Estado é a posição das peças que vão mudando conforme as Ações que o Agente tomar, cada Ação, pode resultar ou não em uma Recompensa, sendo ela positiva ou negativa e gerar um novo Estado que são as novas posições das peças.

Cálculo de Recompensas

As recompensas recebidas pelo agente, podem ser positivas ou negativas, pode-se configurar por exemplo, toda vez que o algoritmo perder uma peça, recebe uma penalidade, toda vez que ele roubar uma peça do adversário, recebe uma recompensa e toda vez que ele simplesmente se movimentar não recebe nada.

Por exemplo, toda vez que o algoritmo roubar um peão, recebe uma recompensa de um ponto e toda vez que roubar uma rainha recebe uma recompensa de cinco pontos, a partir dali o algoritmo tem que aprender com tentativa e erro quais são as melhores jogadas, que entreguem as melhores ações para alcançar a maior pontuação.

Não necessariamente eliminar a rainha do adversário, que vale mais pontos, pode ser a melhor escolha, a melhor escolha pode estar na sequência de várias ações que vão determinar a melhor pontuação.

O que deve ser levado em conta é a proporção das pontuações, quanto mais ações têm pontuações, o algoritmo tende a tentar seguir essas pontuações podendo não deixar o modelo tão bom quando for jogar novas situações que nunca viu.

Quanto menos pontuações, por exemplo, apenas ao realizar xeque-mate dá um ponto e apenas ao receber xeque-mate perde um ponto, pode deixar o algoritmo com desempenho melhor em situações que nunca viu, porém até ele acertar o xeque-mate envolve maior custo computacional.

Exploration
O algoritmo explora as possibilidades do que ele pode fazer no Ambiente.

Exploitation
O algoritmo toma uma decisão com base em tudo o que ele aprendeu até o momento. É o que ele acha ser a melhor Ação durante um Estado.

Principais algoritmos:

  • Q-Learning
  • SARSA
  • Métodos de gradiente de política
  • Redes Q profundas (DQN)

Overfitting e Underfitting

Considere os seguintes dados, onde as cores verdes representam valores de treino e as cores laranjas representam valores de teste:

OverfittingUnderfitting
Overfitting é quando a previsão dos dados se ajusta perfeitamente com os dados de treino e na hora de aplicar os dados de teste acaba não tendo um bom resultado.Underfitting é quando a previsão dos dados não se ajusta nem bem com os dados de treino e nem bem com os dados de teste. Um modelo que representa uma reta não consegue se ajustar aos dados que representam uma curva.

Um exemplo é como ensinar um aluno a tabela de multiplicação, ele recebe apenas algumas operações, se o algoritmo apenas decorar essas operações, no momento em que receber uma nova operação ele não vai saber resolver. Se o algoritmo entender como se multiplicam dois valores, então quando apresentado uma operação que ele nunca viu, vai saber resolver.

Ao aplicar o algoritmo de Machine Learning o que se busca é o melhor ajuste aos dados, porém esse ajuste após um treinamento, o modelo deve ser capaz de interpretar os novos dados que serão apresentados.

Principais Vantagens do Machine Learning

  • Reconhecimento de padrões;
  • Automação;
  • Melhoria contínua.

Principais Desvantagens do Machine Learning

  • A qualidade dos dados influencia no resultado;
  • Grande quantidade de dados;
  • Compreensão profunda do objetivo e dos resultados;
  • Grande tempo de preparação e processamento.

Usos do Machine Learning

  • Sistemas de recomendação;
  • Previsão de mercado de ações e comportamento do cliente;
  • Detecção de fraudes em transações financeiras;
  • Sistemas de previsão de tempo.

Exemplo de código em Python

O script a seguir demonstra um algoritmo de aprendizado por reforço representando uma base de dados com meios de transporte de carros e ônibus.

# Dependências
# pip install scikit-learn
# pip install pandas

import pandas as pd
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC

# Criar ou importar uma base de dados
# A base simula um exemplo de meio de transportes com carro e ônibus

meios_de_transporte = pd.DataFrame(
    columns=['peso', 'qtd_bancos', 'comubustivel', 'transporte'],
    data=   [[2,      5,            0,             'carro'],
             [10,     30,           1,             'ônibus'],
             [3,      16,           1,             'ônibus'],
             [10,     30,           1,             'ônibus'],
             [3.5,    16,           0,             'ônibus'],
             [1.8,    5,            0,             'carro'],
             [1.5,    7,            0,             'carro'],
             [10,     5,            1,             'ônibus'],
             [1,      4,            0,             'carro'],
             [15,     44,           1,             'ônibus'],
             [2.5,    5,            0,             'carro'],
             [5,      44,           1,             'ônibus'],
             ]
)

# Mostrar as primeiras linhas da base de dados
print(meios_de_transporte.head())
print()

# Recuperar as colunas que são os dados para o treinamento
x = meios_de_transporte[["peso", "qtd_bancos", "comubustivel"]]
# Recuperar a coluna classe rótulo que indica o meio de transporte
y = meios_de_transporte["transporte"]

# Separar os dados em Treino e Teste
x_treino_dados, x_teste_dados, y_treino_classes, y_teste_classes = train_test_split(x, y, random_state=2)

print(f"Quantidade de dados para o Treino: {len(x_treino_dados)}")
print(f"Quantidade de dados para o Teste:  {len(x_teste_dados)}\n")

# Treinar o modelo
modelo = LinearSVC()
modelo.fit(x_treino_dados, y_treino_classes)

# Aplicar os dados de Teste que o modelo nunca viu
previsoes = modelo.predict(x_teste_dados)
print(f"Valores esperados: {list(y_teste_classes)}")
print(f"Valores previstos: {previsoes}")

# Medir o desempenho do modelo
acuracia = accuracy_score(y_teste_classes, previsoes) * 100
print(f"Acurácia: {acuracia:.2f}%")

Resultado do código:

   peso  qtd_bancos  comubustivel transporte
0   2.0           5             0      carro
1  10.0          30             1     ônibus
2   3.0          16             1     ônibus
3  10.0          30             1     ônibus
4   3.5          16             0     ônibus

Quantidade de dados para o Treino: 9
Quantidade de dados para o Teste:  3

Independentemente do tipo de aprendizado, na hora de construir um modelo de Machine Learning, ter em mente o objetivo que se deseja alcançar é fundamental para obter bons resultados. Não é apenas o algoritmo em si que deve ser levado em conta, mas todo o processo, desde o tratamento dos dados até a análise dos resultados. A qualidade da base de dados e o poder computacional influenciam diretamente nas escolhas e consequentemente no resultado.

Autor: Gabriel C. Lazzari

Referências: 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *