소개
이 프로젝트에서는 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 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



