Классификация ирис-цветов с использованием SVM

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь классифицировать датасет iris с использованием модели Support Vector Classifier (SVC). Датасет iris - это классический датасет машинного обучения, содержащий информацию о различных видах ирисок, включая длину и ширину чашелистика, длину и ширину лепестка.

🎯 Задачи

В этом проекте вы научитесь:

  • Импортировать необходимые библиотеки и загрузить датасет iris
  • Разделить датасет на тренировочный и тестовый наборы
  • Создать и обучить модель Support Vector Classifier
  • Делать предсказания с использованием обученной модели
  • Оценить производительность модели с использованием accuracy score и classification report

🏆 Достижения

После завершения этого проекта вы сможете:

  • Использовать библиотеку scikit-learn для работы с датасетом iris
  • Разделить датасет на тренировочный и тестовый наборы
  • Создать и обучить модель Support Vector Classifier
  • Делать предсказания с использованием обученной модели
  • Оценить производительность модели с использованием accuracy score и classification report

Импортировать необходимые библиотеки и загрузить датасет

В этом шаге вы научитесь импортировать необходимые библиотеки и загрузить датасет iris. Следуйте шагам ниже, чтобы выполнить этот шаг:

В iris_classification_svm.py импортируйте необходимые библиотеки, включая те, которые используются для загрузки датасета, разделения данных, создания модели SVM и оценки ее производительности.

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

Загрузите данные iris из sklearn.datasets и разделите датасет на тренировочный и тестовый наборы. Датасет разделяется с использованием соотношения 80-20 для тренировки и тестирования, с случайным种子ом 42 для воспроизводимости.

## Продолжайте в том же файле
def load_and_split_data() -> tuple:
    """
    Возвращает:
        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

Этот код загружает датасет Iris и разделяет его на тренировочный и тестовый наборы для целей машинного обучения. Вот разбор каждой части:

  1. Импорт необходимых библиотек:
    • sklearn.datasets используется для загрузки датасетов, включая датасет Iris.
    • sklearn.model_selection предоставляет утилиты для разделения датасетов на тренировочные и тестовые наборы.
    • sklearn.svm содержит классы для Support Vector Machines (SVM), типа алгоритма машинного обучения.
    • sklearn.metrics включает инструменты для оценки производительности моделей, таких как точность и отчеты классификации.
  2. Определение функции: Определена функция с именем load_and_split_data. Эта функция выполняет следующие задачи:
    • Загружает датасет Iris: load_iris() - это функция, предоставленная sklearn.datasets, которая загружает датасет цветов ириса, который является популярным датасетом для задач классификации. Он содержит измерения 150 цветов ириса из трех разных видов.
    • Разделение данных: Датасет разделяется на признаки (X) и целевые метки (y). В этом случае X будут 4-мерными измерениями цветов ириса, а y будут соответствующими метками видов (0, 1 или 2).
    • Разделение данных: train_test_split из sklearn.model_selection используется для разделения данных на тренировочные и тестовые подмножества. Параметр test_size=0.2 означает, что 20% данных будут использоваться для тестирования, в то время как оставшиеся 80% будут использоваться для тренировки. random_state=42 обеспечивает воспроизводимость разделения; использование того же种子а (42 здесь) обеспечит один и тот же раздел каждый раз, когда код запускается.
    • Возвращаемые значения: Функция возвращает кортеж, содержащий X_train, X_test, y_train и y_test, которые являются набором признаков и целевых значений как для тренировочных, так и для тестовых данных.
✨ Проверить решение и практиковаться

Создать и обучить модель SVM

В этом шаге вы научитесь создавать модель Support Vector Classifier и обучать ее на тренировочных данных.

## Продолжайте в том же файле
def create_and_train_SVM(X_train: list, y_train: list) -> SVC:
    """
    Аргументы:
        X_train: [признаки для тренировки]
        y_train: [метки для тренировки]

    Возвращает:
        SVC: [Обученная модель Support Vector Classifier]
    """
    svm = SVC()
    svm.fit(X_train, y_train)
    return svm

Эта функция, create_and_train_SVM, предназначена для создания экземпляра модели Support Vector Classifier (SVM) с использованием класса sklearn.svm.SVC и последующего обучения ее на предоставленных тренировочных данных. Вот подробное объяснение:

  • Подпись функции: Функция принимает два аргумента:
    • X_train: Список или объект, подобный массиву, содержащий признаки (входные переменные) для тренировочного датасета.
    • y_train: Список или объект, подобный массиву, содержащий соответствующие метки (выходные переменные) для тренировочного датасета.
  • Создание экземпляра модели SVM: Внутри функции вызывается SVC() без каких-либо параметров. Это создает стандартную модель Support Vector Classifier. Класс SVC в scikit-learn предлагает различные параметры для настройки модели, такие как тип ядра, регуляризация и т.д., но в этом базовом примере используются значения по умолчанию.
  • Обучение модели: Метод fit объекта svm вызывается с X_train и y_train. Именно здесь происходит фактическое обучение - модель учится распознавать паттерны в признаках (X_train), связанных с их соответствующими метками классов (y_train).
  • Возвращение обученной модели: После обучения функция возвращает обученную модель SVC. Эта модель затем может быть использована для предсказаний на новых, невидимых данных или для оценки ее производительности с использованием тестового датасета.
✨ Проверить решение и практиковаться

Делать предсказания

В этом шаге вы научитесь делать предсказания с использованием обученной модели SVM.

## Продолжайте в том же файле
def make_predictions(model: SVC, X_test: list) -> list:
    """
    Аргументы:
        model: [Обученная модель Support Vector Classifier]
        X_test: [признаки для тестирования]

    Возвращает:
        list: [Предсказания]
    """
    predictions = model.predict(X_test)
    return predictions

Функция make_predictions принимает обученную модель SVM и набор тестовых признаков в качестве входных данных и возвращает список предсказанных меток для тестовых данных. Вот разбор:

  • Аргументы функции:
    • model: Это экземпляр класса SVC (Support Vector Classifier), который уже был обучен на датасете. Предполагается, что модель знает, как классифицировать новые экземпляры на основе паттернов, которые она выучила на этапе обучения.
    • X_test: Список или объект, подобный массиву, содержащий признаки (входные переменные) для тестового датасета. Это те невидимые примеры, для которых модель будет предсказывать метки.
  • Делать предсказания: Внутри функции вызывается метод predict модели с X_test в качестве аргумента. Метод predict применяет обученную модель к каждому экземпляру в тестовом наборе, чтобы оценить их метки класса. Он не требует истинных меток (y_test), только входных признаков.
  • Возвращение предсказаний: Затем функция возвращает эти оцененные метки в виде списка. Каждый элемент в возвращаемом списке соответствует предсказанной метке класса соответствующего экземпляра в наборе X_test датасета.
✨ Проверить решение и практиковаться

Оценить модель

Оцените модель, вычислив accuracy score и отобразив отчет о классификации.

## Продолжайте в том же файле
if __name__ == "__main__":
    ## Загрузите и разделите данные
    X_train, X_test, y_train, y_test = load_and_split_data()

    ## Создайте и обучите модель SVM
    svm_model = create_and_train_SVM(X_train, y_train)

    ## Сделайте предсказания
    predictions = make_predictions(svm_model, X_test)

    ## Оцените модель
    accuracy = accuracy_score(y_test, predictions)
    print(f"Точность: {accuracy:.2f}")

    ## Отобразите отчет о классификации
    print("Отчет о классификации:")
    print(classification_report(y_test, predictions))

Теперь запустите скрипт из терминала:

python iris_classification_svm.py

Вывод должен быть таким:

Точность: 1.00
Отчет о классификации:
              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

Следуя этим шагам, вы завершили проект классификации датасета iris с использованием модели Support Vector Classifier (SVC).

✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.