Exercício Prático: Avaliação de Classificadores KNN com K-Fold Cross-Validation - Dataset Vinhos (UCI)
Objetivo
Neste exercício, você implementará um classificador K-Nearest Neighbors (KNN) utilizando o dataset de vinhos da UCI, avaliando seu desempenho com diferentes configurações de random_state e número de vizinhos k. A avaliação será realizada por meio de k-fold cross-validation usando a função KFold da biblioteca sklearn. Este exercício reforçará a compreensão do processo de validação cruzada e a importância da escolha de hiperparâmetros no KNN.
Instruções
1. Leitura dos Dados
Primeiro, carregue o dataset de vinhos da UCI utilizando o código abaixo:
import pandas as pd
# URL do dataset Wine
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data'
# Nome das colunas em português BR
column_names_pt_br = [
'classe',
'alcool',
'acido_malico',
'cinzas',
'alcalinidade_de_cinzas',
'magnesio',
'fenois_totais',
'flavanoides',
'fenois_nao_flavanoides',
'proantocianinas',
'intensidade_de_cor',
'matiz',
'od280_od315_de_vinhos_diluidos',
'prolina'
]
# Ler o arquivo CSV com as colunas especificadas, definindo a coluna 'classe' como object
vinhos = pd.read_csv(url, names=column_names_pt_br, dtype={'classe': object})
2. Pré-processamento dos Dados
Separe as variáveis da seguinte forma:
- X: Todas as colunas, exceto
classe.
- y: Coluna
classe, que será a variável-alvo para a classificação.
3. Configuração do Experimento
Realize três experimentos, alterando o random_state para os valores 42, 17 e 24. Para cada experimento, aplique o KNN com k=3 e k=5.
4. Estrutura de Cross-Validation com KFold
Para cada valor de random_state, siga estas instruções:
- Use
KFold para dividir o dataset em 10 folds, com shuffle=True e o random_state especificado.
- Para cada fold, divida os dados em treino e teste.
- Treine o classificador KNN para cada valor de
k (3 e 5) e avalie o desempenho usando accuracy_score.
- Armazene as acurácias de cada fold para calcular a média e o desvio padrão para cada valor de
k.
Exemplo de Estrutura para o Código
Aqui está um trecho de código para estruturar o processo de KFold. Este código está incompleto e deve ser complementado pelos alunos, adicionando o treinamento do modelo, as previsões, e o cálculo da acurácia em cada fold.
from sklearn.model_selection import KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# Configuração do KFold com 10 splits
kf = KFold(n_splits=10, shuffle=True, random_state=42)
# Exemplo de loop para k-fold cross-validation
for train_index, test_index in kf.split(X):
X_train, X_test = X.iloc[train_index], X.iloc[test_index]
y_train, y_test = y.iloc[train_index], y.iloc[test_index]
# Aqui você deve treinar o modelo KNN com k=3 e k=5
# knn = KNeighborsClassifier(n_neighbors=k)
# knn.fit(X_train, y_train)
# Em seguida, faça as previsões e calcule a acurácia para cada fold
# y_pred = knn.predict(X_test)
# accuracy = accuracy_score(y_test, y_pred)
# Armazene e calcule a acurácia média no final do loop
# Este é apenas um exemplo de estrutura
5. Análise dos Resultados
Após realizar o k-fold cross-validation, siga as instruções abaixo:
- Calcule a média e o desvio padrão da acurácia para cada valor de
k em cada experimento.
- Identifique o melhor valor de
k para cada random_state.
- Caso haja empate nas acurácias médias para
k=3 e k=5, registre o empate nos resultados.
Entregáveis
- Notebook (.ipynb) com o código completo e os comentários explicativos.
- Saídas que mostrem a acurácia média e o desvio padrão para cada configuração de
k e random_state.
- Uma análise final identificando o melhor valor de
k em cada experimento e observações de empate, quando aplicável.
Observações
- Use o Google Colab para criar e compartilhar seu notebook.
- Organize e comente seu código para melhorar a compreensão do experimento.
- Inclua as saídas com o
accuracy_score de cada fold, e apresente a análise final.
- Utilize o espaço de discussão desta issue para tirar dúvidas e compartilhar seu progresso.
Bons estudos!
Exercício Prático: Avaliação de Classificadores KNN com K-Fold Cross-Validation - Dataset Vinhos (UCI)
Objetivo
Neste exercício, você implementará um classificador K-Nearest Neighbors (KNN) utilizando o dataset de vinhos da UCI, avaliando seu desempenho com diferentes configurações de
random_statee número de vizinhosk. A avaliação será realizada por meio dek-fold cross-validationusando a funçãoKFoldda bibliotecasklearn. Este exercício reforçará a compreensão do processo de validação cruzada e a importância da escolha de hiperparâmetros no KNN.Instruções
1. Leitura dos Dados
Primeiro, carregue o dataset de vinhos da UCI utilizando o código abaixo:
2. Pré-processamento dos Dados
Separe as variáveis da seguinte forma:
classe.classe, que será a variável-alvo para a classificação.3. Configuração do Experimento
Realize três experimentos, alterando o
random_statepara os valores 42, 17 e 24. Para cada experimento, aplique o KNN comk=3ek=5.4. Estrutura de Cross-Validation com
KFoldPara cada valor de
random_state, siga estas instruções:KFoldpara dividir o dataset em 10 folds, comshuffle=Truee orandom_stateespecificado.k(3 e 5) e avalie o desempenho usandoaccuracy_score.k.Exemplo de Estrutura para o Código
Aqui está um trecho de código para estruturar o processo de
KFold. Este código está incompleto e deve ser complementado pelos alunos, adicionando o treinamento do modelo, as previsões, e o cálculo da acurácia em cada fold.5. Análise dos Resultados
Após realizar o
k-fold cross-validation, siga as instruções abaixo:kem cada experimento.kpara cadarandom_state.k=3ek=5, registre o empate nos resultados.Entregáveis
kerandom_state.kem cada experimento e observações de empate, quando aplicável.Observações
accuracy_scorede cada fold, e apresente a análise final.Bons estudos!