Python com ML Básico
Carregando, aguarde alguns segundos.

8 - Classificação

O termo classificação vem da palavra classe, e portanto este tipo de Aprendizado de Máquina (ML) envolve a construção de um modelo para prever classes para os dados de entrada.

Uma classe é um valor inteiro relacionado com um rótulo, e usado para representar numericamente esse rótulo para uma determinada instância de dados.

Por exemplo, o dataset iris possui 3 classes: setosa (0), versicolor (1) e virginica (2). A classe 0 representa setosa, a classe 1 representa versicolor e a classe 2 representa virginica.

O modelo de classificação é construído usando um conjunto de dados de treinamento que contém casos de dados que já foram classificados.

O modelo aprende a mapear os dados de entrada para as classes, e então pode ser usado para prever classes para novos dados de entrada.

A classificação é uma ferramenta poderosa que pode ser usada para resolver uma ampla variedade de problemas, como para classificar e-mails como spam ou não-spam, classificar imagens como cães ou gatos, e classificar diferentes doenças.

Aqui estão alguns casos de como a classificação pode ser usada:

  • Classificar E-mails: E-mails como spam ou não-spam, ajudando a reduzir a quantidade de spam que as pessoas recebem em suas caixas de entrada.
  • Classificar Imagens: Imagens de animais, como cães ou gatos, ajudando no desenvolvimento de aplicativos de reconhecimento de imagem que podem ser usados para identificar animais de estimação, ou outros propósitos.
  • Classificar Doenças: Diferentes doenças, ajudando os médicos a diagnosticar doenças com mais precisão e no desenvolvimento de tratamentos mais eficazes ou novos tratamentos.
  • Classificar Vendas: Dados de vendas de produtos, ajudando a identificar as melhores oportunidades de venda.

Existem diferentes modelos de ML com classificação.

  • Regressão Logística: Modelo de classificação que usa uma função logística para fazer previsões.
  • Árvores de Decisão: Modelo de classificação que usa uma árvore de decisão com grafos para mapear os dados de entrada para as classes.
  • Máquinas de Vetores de Suporte: Modelo de classificação que usa um conjunto de vetores de suporte para mapear os dados de entrada para as classes e realizar previsões.
  • Multinomial Naive Bayes: Modelo de classificação adequada para características discretas, usando uma distribuição de probabilidade para mapear os dados de entrada para as classes, por exemplo para contagem de palavras para classificação de texto.
  • Redes neurais artificiais: Modelo de classificação que usa uma rede neural para mapear os dados de entrada para as classes.

Existem diferentes tipos de ML com classificação, cada um com seus próprios pontos fortes e fracos.

  • Classificação Binária: Tipo de classificação que tem apenas duas classes. Por exemplo, pode classificar e-mails como spam ou não spam.
  • Classificação Multiclasse: Tipo de classificação que tem mais de duas classes. Por exemplo, pode classificar imagens de cães, gatos e outros animais.
  • Classificação Supervisionada: Tipo de classificação em que o modelo é treinado em um conjunto de dados que contém casos de cada classe. Por exemplo, um modelo de classificação supervisionada pode ser treinado em um conjunto de dados que contém e-mails marcados como spam e não spam.
  • Classificação Não-Supervisionada: Tipo de classificação em que o modelo é treinado em um conjunto de dados que não contém casos de cada classe. Por exemplo, um modelo de classificação não supervisionada pode ser treinado em um conjunto de dados que contém imagens de cães e gatos. O modelo precisará aprender a encontrar padrões nos dados para poder classificar as imagens nas duas classes.

O modelo e tipo de ML com classificação mais adequados para um determinado problema depende dos dados disponíveis, do objetivo do ML e das restrições de recursos.

Existem portanto diferentes modelos e tipos de classificação com ML usados na categorização dos dados em diferentes classes.

Os modelos de classificação são treinados em um conjunto de dados que contém casos de cada classe, aprendendo a associar as características de entrada com a classe desejada e, em seguida, sendo usada para prever classes para novos dados de entrada.

Aqui estão as etapas para aplicar a classificação para o ML:

  • Coletar: O primeiro passo é coletar os dados que serão usados para treinar o modelo de classificação. Esses dados podem ser coletados de uma variedade de fontes, como pesquisas, formulários, sensores ou outros dispositivos.
  • Limpar: O próximo passo é limpar os dados. Isso significa remover qualquer dado inválido ou inconsistente, como valores ausentes, valores discrepantes e dados duplicados.
  • Transformar: Se necessário, os dados podem ser transformados para que estejam em um formato adequado para o modelo de classificação. Isso pode envolver a codificação de dados categóricos, a normalização de dados numéricos ou a criação de novas características.
  • Normalizar: Se necessário, os dados podem ser normalizados para que todos os recursos tenham o mesmo intervalo. Isso pode ajudar o modelo de classificação a aprender mais rapidamente e a fazer previsões mais precisas.
  • Dividir: Os dados devem ser divididos em dois conjuntos: um conjunto de treinamento e um conjunto de teste. O conjunto de treinamento será usado para treinar o modelo de classificação, enquanto o conjunto de teste será usado para avaliar o desempenho do modelo.
  • Treinar: O modelo de classificação será treinado usando o conjunto de treinamento. Isso significa que o modelo aprenderá a associar as características de entrada com a classe desejada.
  • Testar: O desempenho do modelo de classificação será avaliado usando o conjunto de teste. Isso significa que o modelo será usado para fazer previsões para os dados do conjunto de teste e o desempenho das previsões será comparado aos valores reais.
  • Ajustar: Se necessário, o modelo de classificação pode ser ajustado usando o conjunto de treinamento e o conjunto de teste. Isso pode envolver o ajuste dos parâmetros do modelo ou a coleta de mais dados.
  • Implementar: Depois que o modelo de classificação estiver ajustado, ele pode ser implementado em produção. Isso pode envolver o envio do modelo para um servidor ou o uso do modelo em um aplicativo.

A classificação é uma ferramenta poderosa que pode ser usada para resolver uma ampla variedade de problemas.

8.1 - Regressão Multinomial Naive Bayes

O modelo de classificação com Regressão Multinomial Naive Bayes é uma técnica poderosa frequentemente usada para tarefas de classificação de texto, como categorizar documentos, e-mails ou qualquer outro tipo de texto em várias categorias.

Aqui está uma explicação detalhada:

  • 1. Naive Bayes:
    • Teorema de Bayes: Naive Bayes é baseado no Teorema de Bayes, uma teoria estatística que descreve como atualizar a probabilidade de uma hipótese à luz de novas evidências.
    • "Naive" (Ingênuo): O "ingênuo" em Naive Bayes refere-se a uma suposição simplificadora de independência condicional entre as características. Isso significa que o modelo assume que as características (palavras em texto, no caso de classificação de texto) são independentes entre si, o que é frequentemente uma simplificação, mas pode funcionar surpreendentemente bem na prática.
  • 2. Multinomial Naive Bayes:
    • Aplicação: A Regressão Multinomial Naive Bayes é especialmente adequada para problemas de classificação de texto, onde as características são frequentemente contagens de palavras (frequência de palavras) em documentos.
    • Variável de Destino Múltipla: É chamado de "Multinomial" porque lida com variáveis de destino que têm várias categorias, ou seja, uma classe pode pertencer a várias categorias.
  • 3. Funcionamento:
    • Probabilidades Condicionais: O modelo calcula a probabilidade condicional de uma classe dado um conjunto de características. Por exemplo, dada uma palavra-chave específica em um e-mail, qual é a probabilidade de o e-mail ser spam ou não.
    • Atribuição de Classe: O modelo atribui a classe com a maior probabilidade condicional. Ou seja, ele escolhe a categoria que é mais provável dada as características observadas.
  • 4. Treinamento:
    • Representação Vetorial: O modelo usa uma representação vetorial para representar os dados de treinamento.
    • Dados de Treinamento: O modelo usa os dados de treinamento para aprender as probabilidades condicionais de cada classe.
    • Treinamento: O modelo usa os dados de treinamento para aprender as probabilidades condicionais de cada classe.
    • Dados de Teste: O modelo usa os dados de teste para avaliar a eficiência do modelo.
    • Teste: O modelo usa os dados de teste para avaliar a eficiência do modelo.
    • Probabilidades Condicionais: O modelo calcula as probabilidades condicionais de cada classe com base nas características dos exemplos de treinamento.
    • Atribuição de Classe: O modelo atribui a classe com a maior probabilidade condicional.
    • Aprendizado: Durante a fase de treinamento, o modelo calcula as probabilidades condicionais de cada classe com base nas características dos exemplos de treinamento.
    • Estimativa de Parâmetros: Para calcular essas probabilidades, o modelo estima parâmetros, como a probabilidade de uma palavra ocorrer em cada classe.
  • 5. Uso na Classificação de Texto:
    • Representação de Texto: Geralmente, o texto é representado usando uma matriz onde cada linha representa um documento e cada coluna representa a contagem de palavras (ou outras características) em um vocabulário. Isso é chamado de modelo "saco de palavras" (bag-of-words).
    • Previsões: Quando um novo documento é apresentado ao modelo, ele usa as probabilidades condicionais calculadas durante o treinamento para calcular a probabilidade de pertencer a cada classe e atribui a classe com a maior probabilidade como a previsão.
  • 6. Vantagens:
    • Eficiente para grandes conjuntos de dados.
    • Funciona bem em problemas de classificação de texto.
    • Pode lidar com dados esparsos (muitos recursos com valores zero).
  • 7. Desafios:
    • A suposição de independência condicional pode não ser válida em todos os casos.
    • Não leva em consideração a ordem das palavras no texto.
    • Sensível à qualidade dos dados de treinamento.
  • 8. Aplicações:
    • Filtragem de spam em e-mails.
    • Classificação de documentos em categorias.
    • Análise de sentimentos em análises de texto.
  • 9. Conclusão: O modelo de classificação com Regressão Multinomial Naive Bayes é um modelo poderoso e eficiente para problemas de classificação de texto.

O Multinomial Naive Bayes é um modelo versátil e amplamente usado para classificação de texto e outros problemas de classificação com múltiplas categorias. Ele é eficaz quando a independência condicional entre características é uma boa aproximação e quando há muitos recursos, como na análise de texto. No entanto, é importante lembrar que ele é uma simplificação e pode não funcionar bem em todos os cenários. Portanto, a escolha do modelo deve ser baseada na natureza do problema e nos dados disponíveis.

Exemplo: Classificação com Naive Bayes Multinomial

O exemplo a seguir mostra como treinar um modelo de classificação de texto, usando o algoritmo Naive Bayes Multinomial para distinguir, como "spam" e "não spam", nos emails que chegam à redação da empresa, entre diferentes categorias de assuntos das notícias.

Os dados utilizados são do dataset fetch_20newsgroups da biblioteca sklearn.

A classificação de textos é uma tarefa fundamental no processamento de linguagem natural (PLN) e é amplamente utilizada em várias aplicações, desde a filtragem de spam até a categorização de notícias.

Neste contexto, o código apresentado demonstra como treinar um modelo de classificação de textos usando o algoritmo Naive Bayes Multinomial para distinguir entre diferentes categorias de notícias.

O conjunto de dados utilizado é o conjunto de dados "20 Newsgroups", que contém documentos de texto pertencentes a 20 categorias diferentes.

import sklearn
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer  # Adicione esta linha
from sklearn.datasets import fetch_20newsgroups

Carregue os dados de spam

noticias = fetch_20newsgroups(subset='train')

Imprima as dimensoões dos dados e alvos do conjunto noticias.

print("Tipo do vetor de dados: ", type(noticias.data))
print("Tipo do vetor de alvos: ", type(noticias.target))

Imprima as dimensões dos dados e alvos do conjunto noticias.

print("Número de linhas de dados (uma coluna) = ", len(noticias.data))
print("Número de linhas e colunas de alvos    = ", noticias.target.shape)

Imprima a classe do objeto noticias.

print(type(noticias))

Imprima as propriedades do objeto da classe.

print(noticias.keys())

O objeto noticias não possui a propriedade feature_names de nomes das colunas de dados, pois tem apenas uma coluna, com de conteúdo, entretanto possui a propriedade chamada target_names com os rótulos das classes das categorias de notícias. Chamamos classe a relação de valores inteiros das variáveis categóricas identificadas por rótulos alfanuméricos.

Imprima os nomes dos rótulos das classes no conjunto de alvos.

[print(categoria) for categoria in noticias.target_names]

Imprima os dados do primeiro índice dos dados do dataset noticias.data.

print(noticias.data[0])

Separe os dados em dois conjuntos: um de treino e outro de teste.

dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(noticias.data, noticias.target, test_size=0.2)

O argumento test_size é o tamanho do conjunto de teste. O valor padrão é 0.25, e está sendo usado 0.2, o que significa que o conjunto de teste terá 20% de linhas do conjunto de dados e o conjunto de treino terá 80%.

Ambos conjuntos de treino e de teste são contituidos de dois conjunto com os valores dos dados e os valores dos alvos.

Imprima os dados de treino do primeiro índice.

print(dados_treino[0])

Imprima os dados de teste do primeiro índice.

print(dados_teste[0])

Imprima os alvos de treino.

print(alvos_treino)

Imprima os alvos de teste.

print(alvos_teste)

Converta os dados de texto em uma representação de vetor

vectorizer = CountVectorizer()
dados_treino = vectorizer.fit_transform(dados_treino)
dados_teste = vectorizer.transform(dados_teste)

Crie o modelo.

mnb = MultinomialNB()

Treine o modelo com os dados de treinamento

mnb.fit(dados_treino, alvos_treino)

Faça as previsões para os dados de teste.

alvos_previstos = mnb.predict(dados_teste)

Avalie o desempenho do modelo.

escore = mnb.score(dados_teste, alvos_teste)

Imprima o desempenho do modelo.

print(f"Acurácia: {escore:.4f}")

O modelo tem uma precisão de 0,9872. Isso significa que ele pode prever com 98.72% de precisão se um e-mail é spam ou não.

O código começa carregando os dados e dividindo-os em conjuntos de treinamento e teste.

Em seguida, realiza a conversão desses dados de texto em uma representação vetorial usando o CountVectorizer, que é uma técnica comum de PLN para transformar texto em recursos numéricos.

Em seguida, o modelo Naive Bayes Multinomial é treinado com os dados de treinamento vetorializados.

Finalmente, o desempenho do modelo é avaliado usando a métrica de acurácia.

A acurácia é uma métrica importante para medir o desempenho de modelos de classificação, indicando a proporção de previsões corretas em relação ao total de previsões.

Este código fornece uma introdução prática à classificação de texto e mostra como o algoritmo Naive Bayes Multinomial pode ser usado para classificar documentos de texto com uma boa acurácia.

Agora, vamos usar o modelo para fazer uma previsão para um e-mail com o seguinte conteúdo:

frases_teste = [
    "Hello, I want to sell you a computer.",
    "Do you believe in God and Saints?",
    "I hate guns."
]

Transforme o e-mail em uma matriz de características.

email_vetorizado = vectorizer.transform(frases_teste)

Imprima o conteúdo do e-mail vetorizado.

print(email_vetorizado)

Faça uma previsão para o e-mail.

alvos_previstos = mnb.predict(email_vetorizado)

Imprima a previsão.

print("Tamanho da lista de alvos previstos: ", len(alvos_previstos))
print("Alvos previstos: ", alvos_previstos)
print("Rótulos dos alvos previstos:")
for i in range(0,len(frases_teste)):
    frase_teste = frases_teste[i]
    categoria = alvos_previstos[i]
    rotulo = noticias.target_names[categoria]
    print(f"[{categoria}] {rotulo} ({frase_teste})")

8.2 - Árvore de Decisão

A árvore de decisão de classificação (DTC - Decision Tree Classifier) é uma forma gráfica de representação de um conjunto de regras de decisão, consistindo em nós (representando testes em atributos), ramas (representando os resultados de testes) e folhas (representando as classes de saída ou decisões).

  • Funcionamento Básico: O algoritmo DTC divide repetidamente o conjunto de dados com base nos atributos mais informativos. A divisão é realizada em cada nó, com o objetivo de maximizar a pureza dos subconjuntos resultantes, geralmente usando critérios como Gini Impurity ou Entropia. O processo continua até que uma condição de parada seja atingida, como profundidade máxima da árvore ou número mínimo de amostras em um nó.
  • Seleção de Atributos: Em cada nó da árvore, o algoritmo decide qual atributo usar para dividir o conjunto de dados. O atributo que leva à maior redução na impureza é escolhido.
  • Poda (Pruning): Árvores de decisão tendem a se ajustar muito bem aos dados de treinamento (sobreajuste ou overfitting). Poda é um processo para reduzir o tamanho da árvore, removendo ramos que não fornecem muita informação.
  • Vantagens: As vantagens das DTC são a simplicidade, a eficiência, precisando de menos pré-processamento para lidar com dados categóricos e numéricos sem a necessidade de muita engenharia de características, tratando bem relações não-lineares, e a interpretabilidade, pois podem ser facilmente visualizadas e compreendidas, tornando-se úteis para tomada de decisões.
  • Desafios: Os desafios são evitar a tendência ao sobreajuste, pois as DTC podem se ajustar demais aos dados de treinamento, levando a um desempenho ruim em novos dados, e serem sensíveis a pequenas variações nos dados, quando pequenas mudanças nos dados de treinamento podem resultar em árvores de decisão significativamente diferentes.
  • Aplicações: As principais aplicações são a classificação, regressão e previsão de valores numéricos, para identificar padrões e prever valores futuros, ou outras ações como detecção de fraudes, realização de diagnóstico médico, entre outras.
  • Conclusão: O DTC é uma ferramenta poderosa para tarefas de classificação devido à sua interpretabilidade e capacidade de lidar com uma variedade de tipos de dados. No entanto, é importante lidar com o sobreajuste usando técnicas como a poda da árvore ou usando algoritmos mais avançados, como florestas aleatórias ou gradient boosting. A escolha do critério de divisão, profundidade máxima da árvore e outros hiperparâmetros deve ser ajustada cuidadosamente para obter os melhores resultados em um problema específico.

O modelo de classificação DecisionTreeClassifier é um algoritmo de aprendizado de máquina supervisionado que pertence à família de algoritmos baseados em DTC.

Modelo de Classificação com Árvore de Decisão

Câncer de Mama com o Dataset Breast Cancer

A classificação é uma tarefa fundamental em aprendizado de máquina, onde o objetivo é prever a categoria à qual um determinado exemplo pertence.

Este código ilustra a aplicação de três algoritmos de classificação em um conjunto de dados de câncer de mama.

O conjunto de dados usado contém informações médicas relevantes e o objetivo é prever se um tumor é benigno ou maligno.

# Importe as bibliotecas necessárias
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_breast_cancer

# Carregue os dados do conjunto de dados Spam.
cancer_mama = load_breast_cancer()

# Separe os dados em um conjunto de treino e um conjunto de teste.
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(cancer_mama.data, cancer_mama.target, test_size=0.2)

# Crie um modelo de classificação de DTC.
dtc = DecisionTreeClassifier()

# Treine os modelos nos conjuntos de treino.
dtc.fit(dados_treino, alvos_treino)

# Faça previsões nos conjuntos de teste.
alvos_previstos = dtc.predict(dados_teste)

# Avalie os desempenhos dos modelos.
escore_acuracia = accuracy_score(alvos_teste, alvos_previstos)

# Imprima os desempenhos dos modelos.
print(f"Árvore de decisão: {escore_acuracia:.4f}")

O modelos tem uma precisão de 0,92 e, assim, pode prever com aproximadamente 92% de precisão se a paciente tem câncer de mama ou não.

  • O código começa importando as bibliotecas necessárias e carregando o conjunto de dados de câncer de mama.
  • Em seguida, os dados são divididos em conjuntos de treinamento e teste.
  • O modelo de classificação de DTC é criado e e treinado com os dados de treinamento.
  • O modelo faz previsões nos dados de teste e a acurácia é calculada para avaliar o desempenho.

A acurácia é uma métrica comum usada para medir o desempenho de modelos de classificação, representando a proporção de previsões corretas em relação ao total de previsões.

Esse código fornece uma introdução prática à construção e avaliação de modelos de classificação em Python, destacando a importância da escolha do algoritmo correto para um determinado conjunto de dados.

8.3 - K Vizinhos Mais Próximos

O modelo de classificação com KNeighborsClassifier, ou classificador k-vizinhos mais próximos, é uma técnica de aprendizado supervisionado usada para classificação de dados. Aqui está uma explicação detalhada:

  • 1. Fundamentos:
    • O classificador k-vizinhos mais próximos é um algoritmo de aprendizado baseado em instância, o que significa que ele não aprende um modelo explícito durante o treinamento, mas memoriza os dados de treinamento.
  • 2. Funcionamento Básico:
    • Quando um novo ponto de dados precisa ser classificado, o algoritmo encontra os k pontos de dados mais próximos (vizinhos) no conjunto de treinamento.
    • A classe do novo ponto de dados é determinada com base na classe mais comum entre os k vizinhos mais próximos.
  • 3. Hiperparâmetro K:
    • O valor de k é um hiperparâmetro importante neste algoritmo. Ele define quantos vizinhos mais próximos devem ser considerados ao fazer uma previsão.
    • Um valor pequeno de k (como 1) pode tornar o modelo sensível ao ruído nos dados.
    • Um valor grande de k pode tornar o modelo suave, mas pode não ser sensível a pequenas variações nos dados.
  • 4. Distância entre Pontos:
    • O algoritmo usa uma métrica de distância (geralmente a distância euclidiana) para medir a proximidade entre pontos de dados.
    • A escolha da métrica de distância depende do tipo de dados e do problema.
  • 5. Treinamento:
    • O treinamento do modelo k-vizinhos mais próximos envolve simplesmente armazenar os dados de treinamento em uma estrutura de dados eficiente para pesquisa, como uma árvore KD (k-dimensional) ou uma estrutura de hash.
  • 6. Uso na Classificação:
    • Para classificar um novo ponto de dados, o modelo calcula as distâncias entre o novo ponto e todos os pontos de dados de treinamento.
    • Em seguida, ele seleciona os k vizinhos mais próximos (com base nas distâncias calculadas) e determina a classe comum entre eles como a classe prevista.
  • 7. Vantagens:
    • Simplicidade: É fácil de entender e implementar.
    • Não paramétrico: Não faz suposições sobre a distribuição dos dados.
    • Funciona bem em dados com características não-lineares.
  • 8. Desafios:
    • Sensibilidade à escolha de k.
    • Pode ser computacionalmente caro em grandes conjuntos de dados.
    • Não lida bem com características irrelevantes ou ruidosas.
  • 9. Aplicações:
    • Classificação de texto.
    • Reconhecimento de padrões em imagens.
    • Sistemas de recomendação.
  • 10. Conclusão: O classificador k-vizinhos mais próximos é um algoritmo de classificação simples e eficaz, especialmente quando se lida com problemas onde a distribuição das classes não é conhecida com antecedência e os dados têm uma estrutura não-linear. No entanto, a escolha adequada de k é crucial e deve ser feita com base na natureza dos dados e no problema de classificação específico. Além disso, ele pode não ser a escolha ideal para conjuntos de dados muito grandes devido ao seu custo computacional. Portanto, a seleção do algoritmo deve ser feita com base nas características do problema em questão.

Classificação com o modelo KNeighborsClassifier

Câncer de Mama com o Dataset Breast Cancer

A classificação é uma tarefa fundamental em aprendizado de máquina, onde o objetivo é prever a categoria à qual um determinado exemplo pertence.

Este código ilustra a aplicação do modelo KNeighborsClassifier com o algoritmo K-Vizinhos Mais Próximos (KNN - K Nearest Neighbors) para a classificação de câncer de mama.

O conjunto de dados usado contém informações médicas relevantes e o objetivo é prever se um tumor é benigno ou maligno.

# Importe as bibliotecas necessárias.
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_breast_cancer

# Carregue os dados do conjunto de dados load_breast_cancer.
cancer_mama = load_breast_cancer()

# Separe os dados em um conjunto de treino e um conjunto de teste.
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(cancer_mama.data, cancer_mama.target, test_size=0.2)

# Crie um modelo de classificação de KNN.
knc = KNeighborsClassifier(n_neighbors=5)

# Treine os modelos nos conjuntos de treino.
knc.fit(dados_treino, alvos_treino)

# Faça previsões nos conjuntos de teste.

alvos_previstos = knc.predict(dados_teste)

# Avalie os desempenhos dos modelos.

escore_acuracia_knc = accuracy_score(alvos_teste, alvos_previstos)

# Imprima os desempenhos dos modelos.

print(f"Escore acurácia do modelo KNN: {escore_acuracia_knc:.4f}")

O código começa importando as bibliotecas necessárias e carregando o conjunto de dados de câncer de mama.

Em seguida, os dados são divididos em conjuntos de treinamento e teste.

O modelo de classificação KNeighborsClassifier é criado e treinado com os dados de treinamento, fazendo previsões nos dados de teste e a acurácia é calculada para avaliar o desempenho do modelo.

O modelo tem uma acurâcia em torno de 0,96 e, assim, pode prever com aproximadamente 96% de precisão se a paciente tem câncer de mama ou não.

A acurácia é uma métrica comum usada para medir o desempenho de modelos de classificação, representando a proporção de previsões corretas em relação ao total de previsões.

8.4 - Regressão logística

A Regressão Logística é um algoritmo de aprendizado de máquina amplamente utilizado para problemas de classificação binária, onde o objetivo é prever uma de duas classes possíveis, como sim/não, positivo/negativo, spam/não spam, etc.

Apesar do nome "regressão," a Regressão Logística é realmente um modelo de classificação.

É especialmente útil quando se lida com dados nos quais a variável de saída é categórica.

A Regressão Logística estima a probabilidade de uma instância pertencer a uma classe específica.

Ela utiliza uma função logística (também chamada de função sigmoide) para modelar essa probabilidade.

A função logística é uma curva em forma de "S" que mapeia qualquer número real para um valor entre 0 e 1.

A equação da função logística é:

$P(Y = 1) = \frac{1}{1 + e^{b_0 + b_1 X_1 + b_2 X_2 + … + b_p X_p}}$, onde $P(Y=1)$ é a probabilidade de a instância pertencer à classe 1, $X_1$, $X_2$, …, $X_p$ são as features (variáveis independentes de entrada) e $b_0$, $b_1$, …, $b_p$ são os coeficientes do modelo que são aprendidos durante o treinamento.

O treinamento da Regressão Logística envolve encontrar os valores dos coeficientes $b_0$, $b_1$, …, $b_p$ que melhor se ajustam aos dados de treinamento.

Isso é geralmente feito usando técnicas de otimização, como a descida de gradiente.

Durante o treinamento, o modelo tenta minimizar uma função de custo, que mede a diferença entre as previsões do modelo e as classes reais dos exemplos de treinamento. Uma função de custo comum usada na Regressão Logística é a Entropia Cruzada (Cross-Entropy).

Depois de treinado, o modelo pode ser usado para fazer previsões. A Regressão Logística geralmente assume um limite de decisão de 0,5. Se a probabilidade estimada for maior que 0,5, a instância é atribuída à classe 1; caso contrário, é atribuída à classe 0.

Vantagens da Regressão Logística:

  • É uma técnica de fácil interpretação, pois fornece probabilidades.
  • Pode ser regularizada para evitar overfitting.
  • Lida bem com problemas de classificação binária.

Limitações da Regressão Logística:

  • É adequada apenas para problemas de classificação binária.
  • Pode não funcionar bem em casos de classes muito desbalanceadas ou quando as fronteiras de decisão são altamente não lineares.

A Regressão Logística é uma ferramenta valiosa no arsenal de modelos de aprendizado de máquina para problemas de classificação binária. Ela é amplamente utilizada em aplicações do mundo real, como detecção de spam, previsões médicas e muito mais. No entanto, é importante lembrar que, para problemas mais complexos ou com múltiplas classes, outros modelos, como Support Vector Machines ou Árvores de Decisão, podem ser mais apropriados.

8.5 - Modelos diversos

A classificação é uma tarefa fundamental em aprendizado de máquina, onde o objetivo é prever a categoria à qual um determinado exemplo pertence.

Este código ilustra a aplicação de três algoritmos de classificação em um conjunto de dados de câncer de mama.

Os modelos utilizados incluem Árvore de Decisão, Regressão Logística e K-Vizinhos Mais Próximos (KNN).

O conjunto de dados Breast Cancer usado contém informações médicas relevantes e o objetivo é prever se um tumor é benigno ou maligno.

  • O código começa importando as bibliotecas necessárias e carregando o conjunto de dados de câncer de mama.
  • Em seguida, os dados são divididos em conjuntos de treinamento e teste.
  • Três modelos de classificação diferentes são criados e treinados com os dados de treinamento.
  • Cada modelo faz previsões nos dados de teste e a acurácia é calculada para avaliar o desempenho de cada modelo.
# Importe as bibliotecas necessárias.
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_breast_cancer

# Carregue os dados do conjunto de dados Spam.
cancer_mama = load_breast_cancer()

# Separe os dados em um conjunto de treino e um conjunto de teste.
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(cancer_mama.data, cancer_mama.target, test_size=0.2)

# Crie um modelo de classificação de árvore de decisão.
dtc = DecisionTreeClassifier()

# Crie um modelo de classificação de regressão logística.
lg = LogisticRegression()

# Crie um modelo de classificação de KNN.
knc = KNeighborsClassifier(n_neighbors=5)

# Treine os modelos nos conjuntos de treino.
dtc.fit(dados_treino, alvos_treino)
lg.fit(dados_treino, alvos_treino)
knc.fit(dados_treino, alvos_treino)

# Faça previsões nos conjuntos de teste.
alvos_previstos_1 = dtc.predict(dados_teste)
alvos_previstos_2 = lg.predict(dados_teste)
alvos_previstos_3 = knc.predict(dados_teste)

# Avalie os desempenhos dos modelos.

escore_acuracia_dtc = accuracy_score(alvos_teste, alvos_previstos_1)
escore_acuracia_lg = accuracy_score(alvos_teste, alvos_previstos_2)
escore_acuracia_knc = accuracy_score(alvos_teste, alvos_previstos_3)

# Imprima os desempenhos dos modelos.

print("Escore acurácia dos modelos:")
print(f"Árvore de decisão: {escore_acuracia_dtc:.4f}")
print(f"Regressão logística: {escore_acuracia_lg:.4f}")
print(f"KNN: {accuracy_score(alvos_teste, alvos_previstos_3):.4f}")

A acurácia é uma métrica comum usada para medir o desempenho de modelos de classificação, representando a proporção de previsões corretas em relação ao total de previsões.

Os resultados são impressos para que possamos comparar o desempenho dos três modelos.

Esse código fornece uma introdução prática à construção e avaliação de modelos de classificação em Python, destacando a importância da escolha do algoritmo correto para um determinado conjunto de dados.

Os modelos têm uma precisão de, respectivamente, aproximadamente 0,90, 0,94 e e 0,92.

Isso significa que eles podem prever com 90%, 94% e 92% de precisão se a paciente tem câncer de mama ou não.

Portanto o modelo de classificação de regressão logística é o melhor, seguido pelo modelo KNN e por último pelo modelo de árvore de decisão.

Entretanto ambos modelos têm uma precisão bem próximos, com com desempenho e alto valor percentual de precisão, de modo que servem na avaliação e ajuste de um tipo de ML de classificação confiável.

Arduino
Coautor
Betobyte
Autor
Autores
||| Áreas ||| Estatística ||| Python ||| Projetos ||| Dicas & Truques ||| Quantum ||| Python com ML Básico || Python para Iniciantes || Python Básico || Matplotlib || Numpy || Seaborn || Pandas || Django || Estatística para Cientistas de Dados || Python com ML Básico || Python com ML Básico || Aulas | Introdução (Introdução ao ML) | Fundamentos (Programação, dados, modelos, algoritmos, tipos, treinamento, teste, avaliação e Métricas, generalização, engenharia de características, viés (bias) e interpretabilidade, tamanho do conjunto de dados, hiperparâmetros) | Python (Scikit-Learn, TensorFlow, Keras, PyTorch, XGBoost, LightGBM, Pandas, Numpy, Seaborn, Matplotlib) | Dados (Dados) | Modelos e Algoritmos (Modelos e Algoritmos) | Avaliação dos Modelos (Avaliação dos Modelos) | Regressão (Regressão) | Classificação (Classificação) | Tipos (Tipos) | Aprendizado Supervisionado (Aprendizado Supervisionado) | Aprendizado Não Supervisionado (Aprendizado Não Supervisionado) | Aprendizado por Reforço (Aprendizado por Reforço) | ML Profundo (Aprendizado profundo) |