Skip to content

Tarefa 4 #111

Description

@mlcortex

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!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions