Aprendizagem de máquina (1#) - Iniciando com Python

Aprendizagem de máquina (1#) - Iniciando com Python

Uma introdução ao aprendizado de máquina com python

A aprendizagem de máquina (AM) é uma subárea da inteligência artificial. Com AM sistemas de computadores aprendem a partir de dados e realizam previsões sem a necessidade de programação explícita.

Em vez de seguir instruções rígidas, estes algoritmos analisam grandes volumes de dados, identificam padrões e ajustam seus comportamentos com base nas informações adquiridas.

Considere o problema de diferenciar imagens de cães e gatos. Em vez de programar manualmente características como o formato das orelhas ou o padrão dos pelos, utiliza-se um grande conjunto de imagens rotuladas para treinar o sistema. O algoritmo, de forma autônoma, aprende quais propriedades são mais relevantes para distinguir entre as duas categorias.

Por exemplo, o algoritmo pode identificar que gatos possuem pupilas verticais e orelhas pontiagudas, enquanto cães apresentam formatos auriculares mais arredondados.

Geralmente, estas aplicações de AM utilizam heurísticas para encontrar modelos capazes de representar o conhecimento presente nestes dados. Ela foi motivada pela necessidade de desenvolver softwares mais independentes da intervenção humana para a extração de conhecimento e por avanços nos recursos computacionais.

Subdivisão: Tarefas

A aprendizagem de máquina podem ser subdivididas em tarefas para organizar e classificar os diferentes tipos de problemas que esses algoritmos podem resolver. Essa divisão permite que os pesquisadores e profissionais escolham as abordagens e técnicas mais apropriadas para cada situação.

Uma estruturação relacionada ao tipo da tarefa pode ser visto na Figura 1.

Figura 1 - Tarefas de aprendizado de máquina

Fonte: Giseldo Neo (2024)

  • Tarefas preditivas ajudam a resolver problemas em que o objetivo é prever um valor ou categoria com base em dados rotulados, como prever o preço de uma casa ou identificar um e-mail como spam.

  • Tarefas descritivas exploram os dados para descobrir padrões ou relações sem um resultado específico em mente, como segmentar clientes com base em características semelhantes.

  • Tarefas híbridas combinam essas duas abordagens quando há necessidade de atender a múltiplos objetivos em um mesmo problema.

As tarefas preditivas analisam os atributos preditivos, comparando-os com os atributos alvo (também chamados de rótulos), enquanto tarefas descritivas utilizam os atributos preditivos para buscar por padrões e correlações entre si, além de não possuírem atributo alvo.

Ambas as tarefas podem ser categorizadas sob o conceito de aprendizado indutivo (Figura 2). Este é a capacidade de generalizar a partir de exemplos, neste caso o conjunto de dados de treinamento.

Figura 2 - Tarefas de aprendizado de máquina

Fonte: Giseldo Neo (2024)

Nas tarefas preditivas, os algoritmos poderão implementar tarefas de classificação, nas quais o atributo alvo é discreto, ou de regressão, em que o atributo alvo é contínuo. Já nas tarefas descritivas é possível realizar agrupamento, associação, ou sumarização.

Subdivisão: Tipos de Aprendizagem

Outra classificação da aprendizagem de máquina considera os tipos de treinamento. Veja na Figura 3.

Figura 3 - Tipos de aprendizagem

Fonte: Giseldo Neo (2024)

Os tipos de aprendizagem são subdivididos em aprendizagem supervisionada, não supervisionada e por reforço.

  • Supervisionada: O sistema aprende a partir de um conjunto de dados rotulados, ou seja, com respostas corretas conhecidas, visando generalizar para novos dados.

  • Não supervisionada: Trabalha com dados sem rótulos, buscando identificar padrões ou estruturas escondidas, como agrupamentos ou associações.

  • Por reforço: O algoritmo interage com um ambiente, recebendo feedback positivo ou negativo conforme suas ações, com o objetivo de maximizar recompensas ao longo do tempo.

Aplicações diversificadas

A aprendizagem de máquina vai além do reconhecimento de imagens entre gatos e carchorro. Ela é amplamente aplicada em textos, séries temporais e sinais acústicos. Um exemplo clássico no setor financeiro é a previsão de inadimplência de clientes, onde algoritmos analisam históricos de crédito e variáveis socioeconômicas para identificar padrões preditivos.

Outras aplicações incluem:

  • Reconhecimento de Fala: Algoritmos interpretam padrões sonoros para transcrever a fala humana com alta precisão.

  • Diagnósticos Médicos: Sistemas treinados com imagens clínicas detectam anomalias precoces, frequentemente superando especialistas em precisão.

  • Sistemas de Recomendação: Ferramentas que personalizam sugestões de produtos, filmes ou músicas com base no comportamento do usuário.

Importância da Qualidade dos Dados

O desempenho desses modelos é altamente dependente da qualidade dos dados utilizados. Dados enviesados ou ruidosos podem comprometer os resultados, enfatizando a necessidade de pré-processamento rigoroso e seleção cuidadosa de variáveis. Se a qualidade dos dados é ruim e isso não for levado em consideração na preparação do modelo preditivo, o resultado será tuim também. Veja na Figura 4 uma simples abstração deste problema.

Figura 4: Lixo entra, lixo sai

Fonte: Giseldo Neo (2024)

Além disso, a escolha do modelo e a calibração de seus hiperparâmetros são etapas cruciais para alcançar alta eficiência.

Desafios e Considerações Éticas

Modelos mais avançados, como redes neurais profundas, frequentemente atuam como "caixas-pretas", dificultando a explicação de suas decisões. Em setores críticos, como saúde e justiça, essa opacidade levanta questões éticas, como transparência e auditabilidade. O desenvolvimento de técnicas explicáveis é, portanto, um desafio.

Exemplo de Uso com Python

O código a seguir exemplifica uma tarefa preditiva com um algoritmo supervisionado de classificação binária. Ele cria uma árvore de decisão (que é o algoritmo) para classificar os valores de X em duas categorias (0 ou 1). Em seguida, ele treina o modelo com os dados fornecidos. Ao final realiza uma previsão para um novo dado (o valor 4).

# Importação da biblioteca:
from sklearn.tree import DecisionTreeClassifier

# Dados de entrada
X = [[-1],[-2],[0],[1],[2],[3]]
y = [0,0,0,1,1,1]

# Criação do classificador
clf = DecisionTreeClassifier()

# Treinamento do modelo
clf.fit(X, y)

# Predição para um novo dado
resultado = clf.predict([[4]])

print("Resultado:", resultado)
Resultado: [1]

Explicação

O código acima utiliza um classificador de árvore de decisão (DecisionTreeClassifier) da biblioteca scikit-learn para realizar uma tarefa de classificação binária.

Importação da biblioteca:

from sklearn.tree import DecisionTreeClassifier

O DecisionTreeClassifier é uma classe da scikit-learn usada para criar e treinar árvores de decisão.

Dados de entrada:

X = [[-1], [-2], [0], [1], [2], [3]]
y = [0, 0, 0, 1, 1, 1]

X é uma lista de listas que representa os dados de entrada (características). y é a lista de rótulos (ou classes) associada a cada entrada em X. Aqui, os valores são binários (0 ou 1).

Criação do modelo:

clf = DecisionTreeClassifier()

A variável clf é uma instância do classificador de árvore de decisão. Você pode ajustar hiperparâmetros, como profundidade máxima da árvore (max_depth) ou critério de divisão (criterion), para modificar o comportamento do modelo.

Treinamento do modelo:

clf.fit(X, y)

O método fit treina o modelo usando os dados fornecidos em X (características) e y (rótulos).

Predição para um novo dado:

resultado = clf.predict([[4]])

O método predict utiliza o modelo treinado para prever a classe de um novo dado. Aqui, o valor 4 está sendo classificado.

Exibição do resultado:

print("Resultado:", resultado) # 1

O resultado da predição é impresso no terminal. Neste caso, será 1, pois o valor 4 está na mesma região de decisão de outros valores rotulados como 1 ([1, 2, 3]).