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:
Existem diferentes modelos de ML com classificação.
Existem diferentes tipos de ML com classificação, cada um com seus próprios pontos fortes e fracos.
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:
A classificação é uma ferramenta poderosa que pode ser usada para resolver uma ampla variedade de problemas.
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:
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.
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})")
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).
O modelo de classificação DecisionTreeClassifier é um algoritmo de aprendizado de máquina supervisionado que pertence à família de algoritmos baseados em DTC.
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.
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.
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:
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.
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:
Limitações da Regressão Logística:
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.
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.
# 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.