머신 러닝 실습 1. 필기 인식하기

J. Hwang·2024년 1월 7일

ML practice

목록 보기
1/4

scikit-learn을 이용해서 지도 학습으로 필기로 쓰인 숫자를 컴퓨터가 인식할 수 있도록 학습시켜보자.
머신 러닝에서 가장 까다로운 작업 중 하나는 데이터 샘플을 준비하는 것인데, scikit-learn은 이 샘플을 제공해 주기도 한다.

from sklearn.datasets import load_digits
digits = load_digits()

load_digits() 함수를 이용하면 필기로 쓰인 숫자들이 컴퓨터가 인식할 수 있는 형태의 샘플로 나타난다. 이렇게 불러진 digits는
digits.data → 필기를 데이터화 한 것
digits.target → 정답 데이터
로 구성되어 있다.

이를 이미지로 확인하고 싶다면, 아래 코드로 그려본다.

from matplotlib import pyplot as plt

fig = plt.figure(figsize=(6, 6))

for i in range(64):
    ax = fig.add_subplot(8, 8, i + 1, xticks=[], yticks=[])
    ax.imshow(digits.images[i], cmap=plt.cm.binary, interpolation='nearest')

위 그림에서 각 패널 좌측 하단의 숫자는 필기로부터 컴퓨터가 인식한 숫자를 의미한다.

지도 학습에서는 크게 아래 두 종류의 데이터가 필요할 것이다.
1) (학습시킬) 정답이 주어진 샘플
2) (성능을 테스트할) 정답이 주어지지 않은 샘플

이를 나눠주는 코드는 아래와 같다.

from sklearn.model_selection import train_test_split

train_data, test_data, train_answer, test_answer = train_test_split(digits.data, digits.target)

# train_data = 학습시키는 데이터
# test_data = 학습시키는 데이터의 정답
# train_answer = 학습 후 테스트에 쓰일 데이터
# test_answer = 학습 후 테스트에 쓰일 데이터의 정답

필기를 숫자로 인식하는 학습을 시키려면 모델이 필요하다. 어떤 모델이 가장 적합할지 결정하는 것은 많은 고민이 필요한 일이다. 여기서는 머신 러닝 코드를 개괄적으로 이해하고자 하므로 임의의 모델을 하나 골라보자.

from sklearn.naive_bayes import GaussianNB

GNB = GaussianNB()

이 모델의 fit 함수를 이용하면 학습을 시킬 수 있다. 이 과정은 코드 한 줄로 매우 간단하다!

GNB.fit(train_data, train_answer)

위 한 줄로 학습이 이루어졌고, 이제 학습이 잘 되었는지 그 성능을 test_data로 확인해보자.

predicted_answer = GNB.predict(test_data)

그러면 predicted_answer와 test_answer를 비교함으로써 성능을 평가할 수 있을 것이다.
학습이 잘 되었는지 평가하는 것은 또 다른 어려운 일이기 때문에 다른 포스팅에서 공부해보도록 하자.

References

https://scipy-lectures.org/packages/scikit-learn/index.html
https://zephyrus1111.tistory.com/8

profile
Let it code

0개의 댓글