Nesta segunda lição de classificação, irá explorar mais formas de classificar dados numéricos. Também aprenderá sobre as ramificações de escolher um classificador em vez de outro.
Assumimos que completou as lições anteriores e que tem um conjunto de dados limpo na sua pasta data chamado cleaned_cuisines.csv na raiz desta pasta de 4 lições.
Carregámos o seu ficheiro notebook.ipynb com o conjunto de dados limpo e dividimo-lo em dataframes X e y, prontos para o processo de construção do modelo.
Anteriormente, aprendeu sobre as várias opções que tem ao classificar dados utilizando o cheat sheet da Microsoft. O Scikit-learn oferece um cheat sheet semelhante, mas mais granular, que pode ajudar a restringir ainda mais os seus estimadores (outro termo para classificadores):
Dica: visite este mapa online e clique ao longo do percurso para ler a documentação.
Este mapa é muito útil quando tem uma compreensão clara dos seus dados, pois pode 'percorrer' os 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, uma vez que temos dados numéricos
- Podemos tentar um ✨ KNeighbors Classifier
- Se isso não funcionar, tente ✨ SVC e ✨ Ensemble Classifiers
- Podemos tentar um ✨ KNeighbors Classifier
Este é um caminho muito útil a seguir.
Seguindo este percurso, devemos começar por importar 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 os seus dados de treino e de teste:
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
O Support-Vector clustering (SVC) é um método da família de máquinas de vetores de suporte (Support-Vector machines) em ML (saiba mais sobre estes abaixo). Neste método, 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 definimo-lo como 'linear' para garantir que utilizamos o SVC linear. A probabilidade é por defeito 'false'; aqui definimo-la como 'true' para recolher estimativas de probabilidade. Definimos o estado aleatório para '0' para embaralhar os dados e obter probabilidades.
Comece por criar um array de classificadores. Irá adicionar progressivamente a este array conforme formos testando.
-
Comece com um Linear SVC:
C = 10 # Criar diferentes classificadores. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
Treine o 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 é bastante 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 ML, que podem ser usados para aprendizagem supervisionada e não supervisionada. Neste método, um número predefinido de pontos é criado e os dados são agrupados à volta destes pontos de forma a prever etiquetas generalizadas para os dados.
O classificador anterior foi bom, e funcionou bem com os dados, mas talvez consigamos 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 ML Support-Vector Machine que são usados para tarefas de classificação e regressão. Os SVMs "mapeiam exemplos de treino para pontos no espaço" para maximizar a distância entre duas categorias. Os dados subsequentes são mapeados neste espaço para que a sua categoria possa ser prevista.
Vamos tentar obter 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 percurso até ao fim, embora o teste anterior tenha sido bastante bom. Vamos experimentar alguns 'Classificadores Ensemble', especificamente Random Forest e AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)O resultado é muito bom, especialmente para o 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 Aprendizagem Automática "combina as previsões de vários estimadores base" para melhorar a qualidade do modelo. No nosso exemplo, usamos Árvores Aleatórias e AdaBoost.
-
Random Forest, um método de média, constrói uma 'floresta' de 'árvores de decisão' com aleatoriedade para evitar o sobreajuste. O parâmetro n_estimators é definido para o número de árvores.
-
AdaBoost ajusta um classificador a um conjunto de dados e depois ajusta cópias desse classificador ao mesmo conjunto de dados. Foca-se nos pesos dos itens classificados incorretamente e ajusta o ajuste para o classificador seguinte corrigir.
Cada uma destas técnicas tem um número grande de parâmetros que pode ajustar. Pesquise os parâmetros por defeito de cada uma e pense no que ajustar estes parâmetros significaria para a qualidade do modelo.
Há muita terminologia nestas lições, por isso reserve um minuto para rever esta lista de termos úteis!
Aviso Legal:
Este documento foi traduzido utilizando o serviço de tradução automática Co-op Translator. Embora nos esforcemos para garantir a precisão, note que traduções automáticas podem conter erros ou imprecisões. O documento original, na sua língua nativa, deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por um tradutor humano. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas resultantes da utilização desta tradução.
