SVM 을 사용한 붓꽃 분류

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 Support Vector Classifier (SVC) 모델을 사용하여 붓꽃 데이터셋을 분류하는 방법을 배우게 됩니다. 붓꽃 데이터셋은 붓꽃의 다양한 종에 대한 정보를 담고 있는 고전적인 머신 러닝 데이터셋으로, 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비 등이 포함되어 있습니다.

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • 필요한 라이브러리를 가져오고 붓꽃 데이터셋을 로드하는 방법
  • 데이터셋을 훈련 및 테스트 세트로 분할하는 방법
  • Support Vector Classifier 모델을 생성하고 훈련하는 방법
  • 훈련된 모델을 사용하여 예측을 수행하는 방법
  • 정확도 점수 (accuracy score) 및 분류 보고서 (classification report) 를 사용하여 모델의 성능을 평가하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • scikit-learn 라이브러리를 사용하여 붓꽃 데이터셋으로 작업할 수 있습니다.
  • 데이터셋을 훈련 및 테스트 세트로 분할할 수 있습니다.
  • Support Vector Classifier 모델을 생성하고 훈련할 수 있습니다.
  • 훈련된 모델을 사용하여 예측을 수행할 수 있습니다.
  • 정확도 점수 (accuracy score) 및 분류 보고서 (classification report) 를 사용하여 모델의 성능을 평가할 수 있습니다.
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 61%입니다.학습자들로부터 78%의 긍정적인 리뷰율을 받았습니다.

필요한 라이브러리 가져오기 및 데이터셋 로드

이 단계에서는 필요한 라이브러리를 가져오고 붓꽃 데이터셋을 로드하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:

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

sklearn.datasets에서 붓꽃 데이터를 로드하고 데이터셋을 훈련 및 테스트 세트로 분할합니다. 데이터셋은 재현성을 위해 random seed 42 를 사용하여 80-20 비율로 훈련 및 테스트용으로 분할됩니다.

## 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

이 코드는 붓꽃 데이터셋을 로드하고 머신 러닝 목적으로 훈련 및 테스트 세트로 분할합니다. 각 부분에 대한 설명은 다음과 같습니다:

  1. 필요한 라이브러리 가져오기:
    • sklearn.datasets는 붓꽃 데이터셋을 포함한 데이터셋을 로드하는 데 사용됩니다.
    • sklearn.model_selection은 데이터셋을 훈련 및 테스트 세트로 분할하기 위한 유틸리티를 제공합니다.
    • sklearn.svm에는 머신 러닝 알고리즘의 한 유형인 Support Vector Machines (SVM) 을 위한 클래스가 포함되어 있습니다.
    • sklearn.metrics에는 정확도 (accuracy) 및 분류 보고서 (classification report) 와 같이 모델의 성능을 평가하기 위한 도구가 포함되어 있습니다.
  2. 함수 정의: load_and_split_data라는 함수가 정의됩니다. 이 함수는 다음 작업을 수행합니다:
    • 붓꽃 데이터셋 로드: load_iris()는 분류 작업에 널리 사용되는 데이터셋인 붓꽃 데이터셋을 로드하는 sklearn.datasets에서 제공하는 함수입니다. 이 데이터셋에는 세 가지 다른 종의 150 개 붓꽃의 측정값이 포함되어 있습니다.
    • 데이터 분리: 데이터셋은 특징 (feature, X) 과 대상 레이블 (y) 로 분리됩니다. 이 경우 X는 붓꽃의 4 차원 측정값이 되고, y는 해당 종 레이블 (0, 1 또는 2) 이 됩니다.
    • 데이터 분할: sklearn.model_selectiontrain_test_split을 사용하여 데이터를 훈련 및 테스트 하위 집합으로 분할합니다. test_size=0.2 매개변수는 데이터의 20% 가 테스트에 사용되고 나머지 80% 가 훈련에 사용됨을 의미합니다. random_state=42는 분할의 재현성을 보장합니다. 동일한 시드 (여기서는 42) 를 사용하면 코드를 실행할 때마다 동일한 분할이 생성됩니다.
    • 반환 값: 이 함수는 훈련 및 테스트 데이터 모두에 대한 특징 및 대상 세트인 X_train, X_test, y_train, y_test를 포함하는 튜플을 반환합니다.
✨ 솔루션 확인 및 연습

SVM 모델 생성 및 훈련

이 단계에서는 Support Vector Classifier 모델을 생성하고 훈련 데이터로 훈련하는 방법을 배우게 됩니다.

## 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

이 함수 create_and_train_SVMsklearn.svm.SVC 클래스를 사용하여 Support Vector Classifier (SVM) 모델을 인스턴스화한 다음 제공된 훈련 데이터로 훈련하도록 설계되었습니다. 자세한 설명은 다음과 같습니다:

  • 함수 시그니처: 이 함수는 두 개의 인수를 받습니다:
    • X_train: 훈련 데이터셋의 특징 (입력 변수) 을 포함하는 목록 또는 배열과 유사한 객체입니다.
    • y_train: 훈련 데이터셋에 해당하는 레이블 (출력 변수) 을 포함하는 목록 또는 배열과 유사한 객체입니다.
  • SVM 모델 인스턴스화: 함수 내부에서 SVC()가 매개변수 없이 호출됩니다. 이렇게 하면 기본 Support Vector Classifier 모델이 생성됩니다. scikit-learn 의 SVC 클래스는 커널 유형, 정규화 등과 같은 모델을 사용자 정의할 수 있는 다양한 매개변수를 제공하지만, 이 기본 예제에서는 기본값이 사용됩니다.
  • 모델 훈련: svm 객체의 fit 메서드가 X_trainy_train으로 호출됩니다. 여기서 실제 훈련이 발생합니다. 즉, 모델은 해당 클래스 레이블 (y_train) 과 관련된 특징 (X_train) 에서 패턴을 학습합니다.
  • 훈련된 모델 반환: 훈련 후 함수는 훈련된 SVC 모델을 반환합니다. 그런 다음 이 모델을 사용하여 새롭고 보이지 않는 데이터에 대한 예측을 수행하거나 테스트 데이터셋을 사용하여 성능을 평가할 수 있습니다.
✨ 솔루션 확인 및 연습

예측 수행

이 단계에서는 훈련된 SVM 모델을 사용하여 예측을 수행하는 방법을 배우게 됩니다.

## 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

make_predictions 함수는 훈련된 SVM 모델과 테스트 특징 집합을 입력으로 받아 테스트 데이터에 대한 예측된 레이블 목록을 반환합니다. 설명은 다음과 같습니다:

  • 함수 인수:
    • model: 데이터셋에 대해 이미 훈련된 SVC 클래스 (Support Vector Classifier) 의 인스턴스입니다. 모델은 훈련 단계에서 학습한 패턴을 기반으로 새로운 인스턴스를 분류하는 방법을 알고 있다고 가정합니다.
    • X_test: 테스트 데이터셋의 특징 (입력 변수) 을 포함하는 목록 또는 배열과 유사한 객체입니다. 이것은 모델이 레이블을 예측할 보이지 않는 예제입니다.
  • 예측 수행: 함수 내부에서 modelpredict 메서드가 X_test를 인수로 호출됩니다. predict 메서드는 학습된 모델을 테스트 세트의 각 인스턴스에 적용하여 해당 클래스 레이블을 추정합니다. 실제 레이블 (y_test) 이 필요하지 않으며, 입력 특징만 필요합니다.
  • 예측 반환: 그런 다음 함수는 이러한 추정된 레이블을 목록으로 반환합니다. 반환된 목록의 각 요소는 X_test 데이터셋의 해당 인스턴스의 예측된 클래스 레이블에 해당합니다.
✨ 솔루션 확인 및 연습

모델 평가

정확도 점수를 계산하고 분류 보고서를 표시하여 모델을 평가합니다.

## 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))

이제 터미널에서 스크립트를 실행합니다:

python iris_classification_svm.py

출력 결과는 다음과 같아야 합니다:

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

이 단계를 따르면 Support Vector Classifier (SVC) 모델을 사용하여 붓꽃 데이터셋을 분류하는 프로젝트를 완료한 것입니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.