이 글에서는 Python 3.x(또는 그 이하 버전)를 활용해 머신러닝의 기본 개념을 배워보겠습니다.
머신러닝 환경 설정하기
가장 먼저 할 일은 기존에 잘 만들어진 라이브러리들을 활용해 머신러닝 개발 환경을 구축하는 것입니다. 아래 명령어로 필요한 패키지들을 설치할 수 있습니다.
>>> pip install numpy
>>> pip install scipy
>>> pip install matplotlib
>>> pip install scikit-learn
머신러닝은 경험과 사실(data)을 학습하여, 주어진 입력(intent)을 바탕으로 예측을 수행하는 분야입니다. 일반적으로 데이터베이스가 클수록 더 좋은 성능의 머신러닝 모델을 만들 수 있습니다.
머신러닝의 전체 흐름
머신러닝 프로젝트는 일반적으로 다음과 같은 단계로 진행됩니다.
- 데이터 정제(Cleaning the data)
- 데이터셋 입력(Feeding the dataset)
- 모델 학습(Training the model)
- 데이터셋 테스트(Testing the dataset)
- 모델 구현 및 배포(Implementing the model)
주요 라이브러리와 그 역할
그렇다면 각 라이브러리는 어떤 용도로 사용될까요?
NumPy — 대규모 다차원 배열(list)과 행렬(matrix)을 지원하며, 이러한 배열을 효율적으로 처리할 수 있는 다양한 수학 함수들을 제공합니다.
SciPy — 과학·수학 연산을 위한 무료 오픈소스 Python 라이브러리입니다. 알고리즘 최적화, 데이터 적분, 보간(interpolation), 특수 함수, 선형대수 등을 위한 모듈을 포함하고 있습니다.
Matplotlib — 차트와 그래프를 생성하는 데 사용되는 시각화 라이브러리입니다. 데이터를 시각적으로 표현함으로써 모델을 더 깊이 이해할 수 있게 도와줍니다.
Scikit-learn — 분류(classification), 군집화(clustering), 회귀(regression) 등 다양한 알고리즘을 제공하여 데이터를 체계적으로 분류하고 조직화할 수 있게 해줍니다.
scikit-learn으로 첫 번째 머신러닝 모델 만들기
이제 scikit-learn을 이용해 기본적인 머신러닝 모델을 만들어 보겠습니다. 여기서는 scikit-learn에 내장된 iris(붓꽃) 데이터셋과 digits(숫자 필기체) 데이터셋을 사용합니다.
from sklearn import datasets
iris = datasets.load_iris()
digits = datasets.load_digits()
데이터셋의 실제 데이터를 확인하려면 다음과 같이 작성합니다.
print(digits.data)
실행 결과는 아래와 같이 숫자 이미지가 픽셀 값 배열로 표현됩니다.
[[ 0. 0. 5. ... 0. 0. 0.]
[ 0. 0. 0. ... 10. 0. 0.]
[ 0. 0. 0. ... 16. 9. 0.]
...
[ 0. 0. 1. ... 6. 0. 0.]
[ 0. 0. 2. ... 12. 0. 0.]
[ 0. 0. 10. ... 12. 1. 0.]]
.target 속성은 모델이 학습해야 할 정답(label), 즉 각 이미지가 나타내는 숫자를 보여줍니다.
digits.target
array([0, 1, 2, ..., 8, 9, 8])
digits 데이터셋의 형태(shape)를 확인하려면 다음 코드를 사용합니다.
digits.images[0]
array([[ 0., 0., 5., 13., 9., 1., 0., 0.],
[ 0., 0., 13., 15., 10., 15., 5., 0.],
[ 0., 3., 15., 2., 0., 11., 8., 0.],
[ 0., 4., 12., 0., 0., 8., 8., 0.],
[ 0., 5., 8., 0., 0., 9., 8., 0.],
[ 0., 4., 11., 0., 1., 12., 7., 0.],
[ 0., 2., 14., 5., 10., 12., 0., 0.],
[ 0., 0., 6., 13., 10., 0., 0., 0.]])
학습과 예측
이제 본격적으로 모델을 학습시키고 예측을 수행해 보겠습니다.
from sklearn import svm
clf = svm.SVC(gamma=0.001, C=100.)
여기서 SVC(Support Vector Classification)는 서포트 벡터 분류기로, 우리 모델의 내장 추정기(estimator) 역할을 합니다.
clf.fit(digits.data[:-1], digits.target[:-1])
SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape='ovr', degree=3, gamma=0.001,
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False)
fit 메서드를 사용해 데이터셋을 모델에 입력함으로써 학습을 진행합니다. 여기서는 마지막 이미지 하나를 제외한 모든 이미지를 학습 데이터로 사용하고, 남겨둔 마지막 이미지는 테스트용으로 활용합니다.
모델 학습이 완료되면 .predict 함수를 통해 테스트 데이터에 대한 결과를 예측할 수 있습니다.
clf.predict(digits.data[-1:])
array([8])
모델이 마지막 이미지를 숫자 '8'로 정확하게 예측했습니다. 이제 학습된 모델의 정확도(efficiency)와 처리 시간(time-cycle)을 측정하여 성능을 평가할 수 있습니다.
결론
이번 글에서는 머신러닝의 기본 개념과 Python에서 이를 구현하기 위해 사용되는 핵심 라이브러리들을 살펴보았습니다. 또한 scikit-learn의 내장 데이터셋을 활용해 간단한 SVM 분류 모델을 직접 학습시키고 예측까지 수행해 보았습니다. 이 기초를 바탕으로 더 복잡한 데이터셋과 다양한 알고리즘에 도전해 보시기 바랍니다.