Classificação - Introdução
Introdução à Classificação
A classificação pode ser definida como o processo de predizer classe ou categoria a partir de valores observados ou dados dados. A saída categorizada pode ter a forma “Preto” ou “Branco” ou “spam” ou “sem spam”.
Matematicamente, a classificação é a tarefa de aproximar uma função de mapeamento (f) das variáveis de entrada (X) às variáveis de saída (Y). Ele basicamente pertence ao aprendizado de máquina supervisionado, no qual os alvos também são fornecidos junto com o conjunto de dados de entrada.
Um exemplo de problema de classificação pode ser a detecção de spam em emails. Pode haver apenas duas categorias de saída, “spam” e “sem spam”; portanto, esta é uma classificação de tipo binário.
Para implementar essa classificação, primeiro precisamos treinar o classificador. Para este exemplo, os emails “spam” e “sem spam” seriam usados como dados de treinamento. Depois de treinar com sucesso o classificador, ele pode ser usado para detectar um e-mail desconhecido.
Tipos de alunos na classificação
Temos dois tipos de alunos em relação aos problemas de classificação -
Aprendizes Preguiçosos
Como o nome sugere, esse tipo de aluno espera que os dados de teste apareçam depois de armazenar os dados de treinamento. A classificação é feita somente após obter os dados de teste. Eles gastam menos tempo treinando, mas mais tempo prevendo. Exemplos de alunos preguiçosos são K-vizinho mais próximo e raciocínio baseado em casos.
Alunos ansiosos
Ao contrário dos alunos preguiçosos, os alunos ansiosos constroem um modelo de classificação sem esperar que os dados de teste apareçam após o armazenamento dos dados de treinamento. Eles passam mais tempo treinando, mas menos tempo fazendo previsões. Exemplos de alunos ansiosos são Árvores de Decisão, Naïve Bayes e Redes Neurais Artificiais (RNA).
Construindo um classificador em Python
Scikit-learn, uma biblioteca Python para aprendizado de máquina, pode ser usada para construir um classificador em Python. As etapas para construir um classificador em Python são as seguintes -
Etapa 1: importando o pacote python necessário
Para construir um classificador usando o scikit-learn, precisamos importá-lo. Podemos importá-lo usando o seguinte script -
import sklearn
Etapa 2: Importar conjunto de dados
Depois de importar o pacote necessário, precisamos de um conjunto de dados para construir o modelo de previsão de classificação. Podemos importá-lo do conjunto de dados sklearn ou usar outro de acordo com nossa necessidade. Vamos usar o Breast Cancer Wisconsin Diagnostic Database da sklearn. Podemos importá-lo com a ajuda do seguinte script -
from sklearn.datasets import load_breast_cancer
O script a seguir carregará o conjunto de dados;
data = load_breast_cancer()
Também precisamos organizar os dados e isso pode ser feito com a ajuda dos seguintes scripts -
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']
O seguinte comando irá imprimir o nome das etiquetas, 'malignant'e'benign'no caso de nosso banco de dados.
print(label_names)
A saída do comando acima são os nomes dos rótulos -
['malignant' 'benign']
Esses rótulos são mapeados para valores binários 0 e 1. Malignant câncer é representado por 0 e Benign câncer é representado por 1.
Os nomes e valores dos recursos desses rótulos podem ser vistos com a ajuda dos seguintes comandos -
print(feature_names[0])
A saída do comando acima são os nomes dos recursos para rótulo 0, ou seja Malignant câncer -
mean radius
Da mesma forma, os nomes dos recursos para etiqueta podem ser produzidos da seguinte forma -
print(feature_names[1])
A saída do comando acima são os nomes dos recursos para o rótulo 1, ou seja, Benign câncer -
mean texture
Podemos imprimir os recursos para essas etiquetas com a ajuda do seguinte comando -
print(features[0])
Isso dará a seguinte saída -
[
1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
4.601e-01 1.189e-01
]
Podemos imprimir os recursos para essas etiquetas com a ajuda do seguinte comando -
print(features[1])
Isso dará a seguinte saída -
[
2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
2.750e-01 8.902e-02
]
Etapa 3: Organização de dados em conjuntos de treinamento e teste
Como precisamos testar nosso modelo em dados não vistos, dividiremos nosso conjunto de dados em duas partes: um conjunto de treinamento e um conjunto de teste. Podemos usar a função train_test_split () do pacote sklearn python para dividir os dados em conjuntos. O seguinte comando importará a função -
from sklearn.model_selection import train_test_split
Agora, o próximo comando dividirá os dados em dados de treinamento e teste. Neste exemplo, estamos usando 40 por cento dos dados para fins de teste e 60 por cento dos dados para fins de treinamento -
train, test, train_labels, test_labels = train_test_split(
features,labels,test_size = 0.40, random_state = 42
)
Passo 4: Avaliação do modelo
Depois de dividir os dados em treinamento e teste, precisamos construir o modelo. Estaremos usando o algoritmo Naïve Bayes para este propósito. Os seguintes comandos irão importar o módulo GaussianNB -
from sklearn.naive_bayes import GaussianNB
Agora, inicialize o modelo da seguinte maneira -
gnb = GaussianNB()
Em seguida, com a ajuda do seguinte comando, podemos treinar o modelo -
model = gnb.fit(train, train_labels)
Agora, para fins de avaliação, precisamos fazer previsões. Isso pode ser feito usando a função predict () da seguinte maneira -
preds = gnb.predict(test)
print(preds)
Isso dará a seguinte saída -
[
1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1
0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1
1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0
0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1
1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0
1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0
1
]
A série acima de 0s e 1s na saída são os valores previstos para o Malignant e Benign classes de tumor.
Etapa 5: Encontrar a precisão
Podemos encontrar a precisão da construção do modelo na etapa anterior, comparando as duas matrizes, ou seja, test_labels e preds. Estaremos usando a função precision_score () para determinar a precisão.
from sklearn.metrics import accuracy_score
print(accuracy_score(test_labels,preds))
0.951754385965
A saída acima mostra que o classificador NaïveBayes é 95,17% preciso.
Métricas de avaliação de classificação
O trabalho não está concluído, mesmo que você tenha concluído a implementação de seu aplicativo ou modelo de aprendizado de máquina. Devemos ter que descobrir o quão eficaz é o nosso modelo? Pode haver diferentes métricas de avaliação, mas devemos escolhê-las com cuidado porque a escolha das métricas influencia como o desempenho de um algoritmo de aprendizado de máquina é medido e comparado.
A seguir estão algumas das importantes métricas de avaliação de classificação entre as quais você pode escolher com base em seu conjunto de dados e tipo de problema -
Matriz de confusão
É a maneira mais fácil de medir o desempenho de um problema de classificação em que a saída pode ser de dois ou mais tipos de classes. Uma matriz de confusão nada mais é do que uma mesa com duas dimensões viz. "Real" e "Previsto" e, além disso, ambas as dimensões têm "Verdadeiros positivos (TP)", "Verdadeiros negativos (TN)", "Falsos positivos (FP)", "Falsos negativos (FN)" conforme mostrado abaixo -
A explicação dos termos associados à matriz de confusão é a seguinte -
True Positives (TP) - É o caso quando a classe real e a classe prevista do ponto de dados são 1.
True Negatives (TN) - É o caso quando a classe real e a classe prevista do ponto de dados são 0.
False Positives (FP) - É o caso quando a classe real do ponto de dados é 0 e a classe prevista do ponto de dados é 1.
False Negatives (FN) - É o caso quando a classe real do ponto de dados é 1 e a classe prevista do ponto de dados é 0.
Podemos encontrar a matriz de confusão com a ajuda da função confused_matrix () de sklearn. Com a ajuda do seguinte script, podemos encontrar a matriz de confusão do classificador binário construído acima -
from sklearn.metrics import confusion_matrix
Resultado
[
[ 73 7]
[ 4 144]
]
Precisão
Pode ser definido como o número de previsões corretas feitas por nosso modelo de ML. Podemos calculá-lo facilmente pela matriz de confusão com a ajuda da seguinte fórmula -
$$ = \ frac {+} {+++} $$Para o classificador binário construído acima, TP + TN = 73 + 144 = 217 e TP + FP + FN + TN = 73 + 7 + 4 + 144 = 228.
Portanto, Precisão = 217/228 = 0,951754385965, que é o mesmo que calculamos após criar nosso classificador binário.
Precisão
A precisão, usada na recuperação de documentos, pode ser definida como o número de documentos corretos retornados por nosso modelo de ML. Podemos calculá-lo facilmente pela matriz de confusão com a ajuda da seguinte fórmula -
$$ = \ frac {} {+ FP} $$Para o classificador binário construído acima, TP = 73 e TP + FP = 73 + 7 = 80.
Portanto, Precisão = 73/80 = 0,915
Rechamada ou Sensibilidade
A recuperação pode ser definida como o número de positivos retornados por nosso modelo de ML. Podemos calculá-lo facilmente pela matriz de confusão com a ajuda da seguinte fórmula -
$$ = \ frac {} {+ FN} $$Para o classificador binário construído acima, TP = 73 e TP + FN = 73 + 4 = 77.
Portanto, Precisão = 73/77 = 0,94805
Especificidade
A especificidade, em contraste com a recordação, pode ser definida como o número de negativos retornados por nosso modelo de ML. Podemos calculá-lo facilmente pela matriz de confusão com a ajuda da seguinte fórmula -
$$ = \ frac {N} {N + FP} $$Para o classificador binário construído acima, TN = 144 e TN + FP = 144 + 7 = 151.
Portanto, Precisão = 144/151 = 0,95364
Vários algoritmos de classificação de ML
A seguir estão alguns algoritmos de classificação de ML importantes -
Regressão Logística
Máquina de vetor de suporte (SVM)
Árvore de Decisão
Baías ingénuas
Floresta Aleatória
Discutiremos todos esses algoritmos de classificação em detalhes nos próximos capítulos.
Formulários
Algumas das aplicações mais importantes de algoritmos de classificação são as seguintes -
Reconhecimento de fala
Reconhecimento de caligrafia
Identificação Biométrica
Classificação de Documentos