Classificação de Íris Usando SVM

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como classificar o conjunto de dados iris usando um modelo Support Vector Classifier (SVC). O conjunto de dados iris é um conjunto de dados clássico de aprendizado de máquina que contém informações sobre diferentes espécies de íris, incluindo o comprimento da sépala, a largura da sépala, o comprimento da pétala e a largura da pétala.

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como importar as bibliotecas necessárias e carregar o conjunto de dados iris
  • Como dividir o conjunto de dados em conjuntos de treinamento e teste
  • Como criar e treinar um modelo Support Vector Classifier
  • Como fazer previsões usando o modelo treinado
  • Como avaliar o desempenho do modelo usando a pontuação de acurácia (accuracy score) e o relatório de classificação (classification report)

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Usar a biblioteca scikit-learn para trabalhar com o conjunto de dados iris
  • Dividir um conjunto de dados em conjuntos de treinamento e teste
  • Criar e treinar um modelo Support Vector Classifier
  • Fazer previsões usando um modelo treinado
  • Avaliar o desempenho de um modelo usando a pontuação de acurácia (accuracy score) e o relatório de classificação (classification report)
Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível intermediário com uma taxa de conclusão de 61%. Recebeu uma taxa de avaliações positivas de 78% dos estudantes.

Importar as Bibliotecas Necessárias e Carregar o Conjunto de Dados

Nesta etapa, você aprenderá como importar as bibliotecas necessárias e carregar o conjunto de dados iris. Siga os passos abaixo para completar esta etapa:

Em iris_classification_svm.py, importe as bibliotecas necessárias, incluindo aquelas para carregar o conjunto de dados, dividir os dados, criar o modelo SVM e avaliar seu desempenho.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report

Carregue os dados iris de sklearn.datasets e divida o conjunto de dados em conjuntos de treinamento e teste. O conjunto de dados é dividido usando uma proporção de 80-20 para treinamento e teste, com uma semente aleatória de 42 para reprodutibilidade.

## Continue in the same file
def load_and_split_data() -> tuple:
    """
    Returns:
        tuple: [X_train, X_test, y_train, y_test]
    """
    iris = load_iris()
    X, y = iris.data, iris.target
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.2, random_state=42
    )
    return X_train, X_test, y_train, y_test

Este código carrega o conjunto de dados Iris e o divide em conjuntos de treinamento e teste para fins de aprendizado de máquina. Aqui está uma análise de cada parte:

  1. Importando as bibliotecas necessárias:
    • sklearn.datasets é usado para carregar conjuntos de dados, incluindo o conjunto de dados Iris.
    • sklearn.model_selection fornece utilitários para dividir conjuntos de dados em conjuntos de treinamento e teste.
    • sklearn.svm contém classes para Máquinas de Vetores de Suporte (Support Vector Machines - SVM), um tipo de algoritmo de aprendizado de máquina.
    • sklearn.metrics inclui ferramentas para avaliar o desempenho de modelos, como acurácia (accuracy) e relatórios de classificação (classification reports).
  2. Definição da Função: Uma função chamada load_and_split_data é definida. Esta função realiza as seguintes tarefas:
    • Carrega o conjunto de dados Iris: load_iris() é uma função fornecida por sklearn.datasets que carrega o conjunto de dados de flores Iris, que é um conjunto de dados popular para tarefas de classificação. Ele contém medições de 150 flores de íris de três espécies diferentes.
    • Separação de Dados: O conjunto de dados é separado em características (X) e rótulos alvo (y). Neste caso, X seriam as medições de 4 dimensões das flores de íris, e y seriam os rótulos das espécies correspondentes (0, 1 ou 2).
    • Divisão dos Dados: train_test_split de sklearn.model_selection é usado para dividir os dados em subconjuntos de treinamento e teste. O parâmetro test_size=0.2 significa que 20% dos dados serão usados para teste, enquanto os 80% restantes serão usados para treinamento. random_state=42 garante a reprodutibilidade da divisão; usar a mesma semente (42 aqui) produzirá a mesma divisão toda vez que o código for executado.
    • Valores de Retorno: A função retorna uma tupla contendo X_train, X_test, y_train e y_test, que são os conjuntos de características e alvos para os dados de treinamento e teste.
✨ Verificar Solução e Praticar

Criar e Treinar o Modelo SVM

Nesta etapa, você aprenderá como criar um modelo Support Vector Classifier e treiná-lo com os dados de treinamento.

## Continue in the same file
def create_and_train_SVM(X_train: list, y_train: list) -> SVC:
    """
    Args:
        X_train: [features for training]
        y_train: [labels for training]

    Returns:
        SVC: [Trained Support Vector Classifier model]
    """
    svm = SVC()
    svm.fit(X_train, y_train)
    return svm

Esta função, create_and_train_SVM, é projetada para instanciar um modelo Support Vector Classifier (SVM) usando a classe sklearn.svm.SVC e, em seguida, treiná-lo com os dados de treinamento fornecidos. Aqui está uma explicação detalhada:

  • Assinatura da Função: A função recebe dois argumentos:
    • X_train: Uma lista ou objeto semelhante a um array contendo as características (variáveis de entrada) para o conjunto de dados de treinamento.
    • y_train: Uma lista ou objeto semelhante a um array contendo os rótulos correspondentes (variáveis de saída) para o conjunto de dados de treinamento.
  • Instanciando um Modelo SVM: Dentro da função, SVC() é chamado sem nenhum parâmetro. Isso cria um modelo Support Vector Classifier padrão. A classe SVC no scikit-learn oferece vários parâmetros para personalizar o modelo, como tipo de kernel, regularização, etc., mas neste exemplo básico, os valores padrão são usados.
  • Treinando o Modelo: O método fit do objeto svm é chamado com X_train e y_train. É aqui que o treinamento real ocorre — o modelo aprende padrões a partir das características (X_train) associadas aos seus respectivos rótulos de classe (y_train).
  • Retornando o Modelo Treinado: Após o treinamento, a função retorna o modelo SVC treinado. Este modelo pode então ser usado para fazer previsões em dados novos e não vistos ou para avaliar seu desempenho usando um conjunto de dados de teste.
✨ Verificar Solução e Praticar

Fazer Previsões

Nesta etapa, você aprenderá como fazer previsões usando o modelo SVM treinado.

## Continue in the same file
def make_predictions(model: SVC, X_test: list) -> list:
    """
    Args:
        model: [Trained Support Vector Classifier model]
        X_test: [features for testing]

    Returns:
        list: [Predictions]
    """
    predictions = model.predict(X_test)
    return predictions

A função make_predictions recebe um modelo SVM treinado e um conjunto de características de teste como entradas e retorna uma lista de rótulos previstos para os dados de teste. Aqui está uma análise:

  • Argumentos da Função:
    • model: Esta é uma instância da classe SVC (Support Vector Classifier) que já foi treinada em um conjunto de dados. Assume-se que o modelo sabe como classificar novas instâncias com base nos padrões que aprendeu durante a fase de treinamento.
    • X_test: Uma lista ou objeto semelhante a um array contendo as características (variáveis de entrada) para o conjunto de dados de teste. Estes são os exemplos não vistos para os quais o modelo fará previsões de rótulos.
  • Fazendo Previsões: Dentro da função, o método predict do model é invocado com X_test como seu argumento. O método predict aplica o modelo aprendido a cada instância no conjunto de teste para estimar seus rótulos de classe. Ele não requer os rótulos verdadeiros (y_test), apenas as características de entrada.
  • Retornando Previsões: A função então retorna esses rótulos estimados como uma lista. Cada elemento na lista retornada corresponde ao rótulo de classe previsto da respectiva instância no conjunto de dados X_test.
✨ Verificar Solução e Praticar

Avaliar o Modelo

Avalie o modelo calculando a pontuação de acurácia e exibindo o relatório de classificação.

## Continue in the same file
if __name__ == "__main__":
    ## Load and split the data
    X_train, X_test, y_train, y_test = load_and_split_data()

    ## Create and train the SVM model
    svm_model = create_and_train_SVM(X_train, y_train)

    ## Make predictions
    predictions = make_predictions(svm_model, X_test)

    ## Evaluate the model
    accuracy = accuracy_score(y_test, predictions)
    print(f"Accuracy: {accuracy:.2f}")

    ## Display classification report
    print("Classification Report:")
    print(classification_report(y_test, predictions))

Agora, execute o script a partir do terminal:

python iris_classification_svm.py

A saída deve ser:

Accuracy: 1.00
Classification Report:
              precision    recall  f1-score   support

           0       1.00      1.00      1.00        10
           1       1.00      1.00      1.00         9
           2       1.00      1.00      1.00        11

    accuracy                           1.00        30
   macro avg       1.00      1.00      1.00        30
weighted avg       1.00      1.00      1.00        30

Seguindo estas etapas, você concluiu o projeto de classificação do conjunto de dados iris usando um modelo Support Vector Classifier (SVC).

✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.