Nesta segunda aula de classificação, você explorará mais maneiras de classificar dados numéricos. Você também aprenderá sobre as ramificações de escolher um classificador em vez de outro.
Pressupomos que você tenha concluído as lições anteriores e possua um conjunto de dados limpo na sua pasta data chamado cleaned_cuisines.csv na raiz desta pasta de 4 aulas.
Carregamos seu arquivo notebook.ipynb com o conjunto de dados limpo e o dividimos em dataframes X e y, prontos para o processo de construção do modelo.
Anteriormente, você aprendeu sobre as várias opções que existem ao classificar dados usando a folha de dicas da Microsoft. O Scikit-learn oferece uma folha de dicas semelhante, mas mais granular, que pode ajudar ainda mais a afunilar seus estimadores (outro termo para classificadores):
Dica: visite este mapa online e clique ao longo do caminho para ler a documentação.
Este mapa é muito útil assim que você tiver uma compreensão clara dos seus dados, pois pode “percorrer” seus caminhos até uma decisão:
- Temos >50 amostras
- Queremos prever uma categoria
- Temos dados rotulados
- Temos menos de 100K amostras
- ✨ Podemos escolher um Linear SVC
- Se isso não funcionar, já que temos dados numéricos
- Podemos tentar um classificador ✨ KNeighbors
- Se isso não funcionar, tente ✨ SVC e ✨ Classificadores Ensemble
- Podemos tentar um classificador ✨ KNeighbors
Este é um caminho muito útil para seguir.
Seguindo este caminho, devemos começar importando algumas bibliotecas para usar.
-
Importe as bibliotecas necessárias:
from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve import numpy as np
-
Divida seus dados de treino e teste:
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
Support-Vector clustering (SVC) é um membro da família de máquinas de suporte vetorial (Support-Vector machines) de técnicas de ML (saiba mais sobre elas abaixo). Neste método, você pode escolher um 'kernel' para decidir como agrupar as etiquetas. O parâmetro 'C' refere-se à 'regularização', que regula a influência dos parâmetros. O kernel pode ser um de vários; aqui definimos como 'linear' para garantir que aproveitamos o linear SVC. A probabilidade tem padrão 'false'; aqui definimos como 'true' para reunir estimativas de probabilidade. Definimos o estado aleatório para '0' para embaralhar os dados para obter probabilidades.
Comece criando um array de classificadores. Você irá adicionar progressivamente a esse array conforme testamos.
-
Comece com um Linear SVC:
C = 10 # Criar diferentes classificadores. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
Treine seu modelo usando o Linear SVC e imprima um relatório:
n_classifiers = len(classifiers) for index, (name, classifier) in enumerate(classifiers.items()): classifier.fit(X_train, np.ravel(y_train)) y_pred = classifier.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) print(classification_report(y_test,y_pred))
O resultado é bem bom:
Accuracy (train) for Linear SVC: 78.6% precision recall f1-score support chinese 0.71 0.67 0.69 242 indian 0.88 0.86 0.87 234 japanese 0.79 0.74 0.76 254 korean 0.85 0.81 0.83 242 thai 0.71 0.86 0.78 227 accuracy 0.79 1199 macro avg 0.79 0.79 0.79 1199 weighted avg 0.79 0.79 0.79 1199
K-Neighbors faz parte da família "neighbors" de métodos de ML, que podem ser usados tanto para aprendizagem supervisionada quanto não supervisionada. Neste método, um número predefinido de pontos é criado e os dados são agrupados em torno desses pontos para que rótulos generalizados possam ser previstos para os dados.
O classificador anterior foi bom e funcionou bem com os dados, mas talvez possamos obter uma melhor precisão. Experimente um classificador K-Neighbors.
-
Adicione uma linha ao seu array de classificadores (adicione uma vírgula após o item Linear SVC):
'KNN classifier': KNeighborsClassifier(C),
O resultado é um pouco pior:
Accuracy (train) for KNN classifier: 73.8% precision recall f1-score support chinese 0.64 0.67 0.66 242 indian 0.86 0.78 0.82 234 japanese 0.66 0.83 0.74 254 korean 0.94 0.58 0.72 242 thai 0.71 0.82 0.76 227 accuracy 0.74 1199 macro avg 0.76 0.74 0.74 1199 weighted avg 0.76 0.74 0.74 1199✅ Saiba mais sobre K-Neighbors
Os classificadores Support-Vector fazem parte da família de métodos de ML Support-Vector Machine usados para tarefas de classificação e regressão. SVMs "mapeiam exemplos de treinamento para pontos no espaço" para maximizar a distância entre duas categorias. Dados subsequentes são mapeados neste espaço para que sua categoria possa ser prevista.
Vamos tentar uma precisão um pouco melhor com um classificador Support Vector.
-
Adicione uma vírgula após o item K-Neighbors e depois adicione esta linha:
'SVC': SVC(),
O resultado é bastante bom!
Accuracy (train) for SVC: 83.2% precision recall f1-score support chinese 0.79 0.74 0.76 242 indian 0.88 0.90 0.89 234 japanese 0.87 0.81 0.84 254 korean 0.91 0.82 0.86 242 thai 0.74 0.90 0.81 227 accuracy 0.83 1199 macro avg 0.84 0.83 0.83 1199 weighted avg 0.84 0.83 0.83 1199✅ Saiba mais sobre Support-Vectors
Vamos seguir o caminho até o fim, embora o teste anterior tenha sido muito bom. Vamos tentar alguns 'Classificadores Ensemble', especificamente Random Forest e AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)O resultado é muito bom, especialmente para Random Forest:
Accuracy (train) for RFST: 84.5%
precision recall f1-score support
chinese 0.80 0.77 0.78 242
indian 0.89 0.92 0.90 234
japanese 0.86 0.84 0.85 254
korean 0.88 0.83 0.85 242
thai 0.80 0.87 0.83 227
accuracy 0.84 1199
macro avg 0.85 0.85 0.84 1199
weighted avg 0.85 0.84 0.84 1199
Accuracy (train) for ADA: 72.4%
precision recall f1-score support
chinese 0.64 0.49 0.56 242
indian 0.91 0.83 0.87 234
japanese 0.68 0.69 0.69 254
korean 0.73 0.79 0.76 242
thai 0.67 0.83 0.74 227
accuracy 0.72 1199
macro avg 0.73 0.73 0.72 1199
weighted avg 0.73 0.72 0.72 1199
✅ Saiba mais sobre Classificadores Ensemble
Este método de Machine Learning "combina as previsões de vários estimadores base" para melhorar a qualidade do modelo. No nosso exemplo, usamos Random Trees e AdaBoost.
-
Random Forest, um método de média, constrói uma 'floresta' de 'árvores de decisão' infundidas com aleatoriedade para evitar overfitting. O parâmetro n_estimators é definido para o número de árvores.
-
AdaBoost ajusta um classificador a um conjunto de dados e então ajusta cópias desse classificador ao mesmo conjunto de dados. Ele foca nos pesos dos itens classificados incorretamente e ajusta o ajuste para o próximo classificador corrigir.
Cada uma dessas técnicas tem um grande número de parâmetros que você pode ajustar. Pesquise os parâmetros padrão de cada uma e pense sobre o que ajustar esses parâmetros significaria para a qualidade do modelo.
Há muita terminologia nestas lições, então reserve um minuto para revisar esta lista de termos úteis!
Aviso Legal:
Este documento foi traduzido usando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em sua língua nativa deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.
