간단한 필기체 문자 인식 분류기

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 scikit-learn 라이브러리에서 제공하는 DIGITS 데이터셋을 사용하여 간단한 필기체 문자 인식 분류기를 구축하는 방법을 배우게 됩니다. 필기체 문자 인식은 머신 러닝의 고전적인 문제이며, 이 프로젝트는 필기체 문자 이미지에 표시된 숫자를 정확하게 예측할 수 있는 분류기를 만드는 과정을 안내합니다.

🎯 과제

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

  • DIGITS 데이터셋을 로드하고 훈련 및 테스트 세트로 분할하는 방법
  • 훈련 데이터에 대한 Support Vector Machine (SVM) 분류기를 생성하고 훈련하는 방법
  • 단일 필기체 문자 이미지를 분류하는 함수를 구현하는 방법
  • 샘플 필기체 문자 이미지로 분류기를 테스트하는 방법

🏆 성과

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

  • 머신 러닝 작업을 위해 데이터셋을 로드하고 전처리합니다.
  • scikit-learn 을 사용하여 SVM 분류기를 생성하고 훈련합니다.
  • 새로운 샘플을 분류하는 예측 함수를 구현합니다.
  • 머신 러닝 기술을 사용하여 필기체 문자 인식의 기본 사항을 이해합니다.

DIGITS 데이터 세트 로드

이 단계에서는 scikit-learn 라이브러리에서 DIGITS 데이터셋을 로드하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:

handwritten_digit_classifier.py 파일을 열고, 필요한 라이브러리를 import 합니다:

from sklearn import datasets
from sklearn.model_selection import train_test_split

datasets.load_digits() 함수를 사용하여 DIGITS 데이터셋을 로드합니다:

digits = datasets.load_digits()
X, y = digits.data, digits.target

X 변수는 평탄화된 8x8 픽셀 이미지를 포함하고, y 변수는 해당 숫자 레이블 (0-9) 을 포함합니다.

train_test_split()을 사용하여 데이터셋을 훈련 및 테스트 세트로 분할합니다:

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

이렇게 하면 데이터가 80% 훈련 세트와 20% 테스트 세트로 분할됩니다.

✨ 솔루션 확인 및 연습

SVM 분류기 생성 및 훈련

이 단계에서는 훈련 데이터에 대한 Support Vector Machine (SVM) 분류기를 생성하고 훈련하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:

handwritten_digit_classifier.py 파일에서 sklearn.svm 모듈에서 SVC 클래스를 import 합니다:

from sklearn.svm import SVC

선형 커널과 1 의 정규화 매개변수를 사용하여 SVM 분류기를 생성합니다:

clf = SVC(kernel="linear", C=1)

fit() 메서드를 사용하여 훈련 데이터에 대한 SVM 분류기를 훈련합니다:

clf.fit(X_train, y_train)

이렇게 하면 훈련 데이터에 대한 SVM 분류기가 훈련됩니다.

✨ 솔루션 확인 및 연습

예측 함수 구현

이 단계에서는 단일 필기체 이미지 (handwritten character image) 를 분류하는 predict(sample) 함수를 구현합니다. 이 단계를 완료하려면 아래 단계를 따르세요:

handwritten_digit_classifier.py 파일에서 numpy 모듈을 import 합니다:

import numpy as np

predict(sample) 함수를 정의합니다:

def predict(sample):
    """
    Parameters:
    sample -- 필기체 이미지의 픽셀 값 목록

    Returns:
    pred -- 정수 형태의 필기체 이미지에 대한 예측 레이블
    """
    ## 입력 샘플 재구성
    sample = np.array(sample).reshape(1, -1)

    ## 훈련된 분류기를 사용하여 예측 수행
    pred = clf.predict(sample)

    return int(pred[0])

predict(sample) 함수에서:

  • 입력 sample 목록을 NumPy 배열로 변환하고 훈련 데이터와 동일한 형식의 단일 샘플을 갖도록 재구성합니다.
  • 훈련된 clf 분류기를 사용하여 predict() 메서드를 사용하여 재구성된 입력 샘플에 대한 레이블을 예측합니다.
  • 예측된 레이블을 정수로 반환합니다.
✨ 솔루션 확인 및 연습

분류기 테스트

이제 샘플 필기체 이미지 (handwritten character image) 로 predict(sample) 함수를 테스트할 수 있습니다. 다음은 handwritten_digit_classifier.py 파일의 예시입니다:

sample = [
    0.0, 0.0, 6.0, 14.0, 4.0, 0.0, 0.0, 0.0,
    0.0, 0.0, 11.0, 16.0, 10.0, 0.0, 0.0, 0.0,
    0.0, 0.0, 8.0, 14.0, 16.0, 2.0, 0.0, 0.0,
    0.0, 0.0, 1.0, 12.0, 12.0, 11.0, 0.0, 0.0,
    0.0, 0.0, 0.0, 0.0, 11.0, 3.0, 0.0, 0.0,
    0.0, 0.0, 0.0, 0.0, 5.0, 11.0, 0.0, 0.0,
    0.0, 1.0, 4.0, 4.0, 7.0, 16.0, 2.0, 0.0,
    0.0, 7.0, 16.0, 16.0, 13.0, 11.0, 1.0, 0.0
]

result = predict(sample)
print("Predicted Label:", result)

이것은 주어진 필기체 이미지에 대한 예측 레이블을 출력해야 합니다.

예제를 실행하려면 handwritten_digit_classifier.py 파일을 실행하세요:

python handwritten_digit_classifier.py
## Predicted Label: 9
✨ 솔루션 확인 및 연습

요약

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