머신러닝(Machine Learning)의 개념은 다양하게 표현할 수 있으나, 일반적으로는 애플리케이션을 수정하지 않고도 데이터를 기반으로 패턴을 학습하고 결과를 예측하는 알고리즘 기법을 통칭한다. 현실 세계의 매우 복잡한 조건으로 인해 기존의 소프트웨어 코드만으로는 해결하기 어려웠던 많은 문제점들을 이제 머신러닝을 이용해 해결해 나가고 있다.
업무적으로 복잡한 조건/규칙들이 다양한 형태로 결합하고 시시각각 변하면서 도저히 소프트웨어 코드로 로직을 구성하여 이들을 관통하는 일정한 패턴을 찾기 어려운 경우에 머신러닝은 훌륭한 솔루션을 제공한다.
머신러닝 알고리즘은 데이터를 기반으로 통계적인 신뢰도를 강화하고 예측 오류를 최소화하기 위한 다양한 수학적 기법을 적용해 데이터 내의 패턴을 스스로 인지하고 신뢰도 있는 예측 결과를 도출해 낸다.
만많은 데이터 분석가와 데이터 과학자가 머신러닝 알고리즘 기반의 새로운 예측 모델을 이용해 더욱 정확한 예측 및 의사 결정을 도출하고 있으며, 데이터에 감춰진 새로운 의미와 인사이트를 발굴해 놀랄 만한 이익으로 연결시키고 있다.
데이터마이닝, 영상 인식, 음성 인식, 자연어 처리에서 개발자가 데이터나 업무 로직의 특성을 직접 감안한 프로그램을 만들 경우 난이도와 개발 복잡도가 너무 높아질 수 밖에 없는 분야에서 머신러닝은 급속하게 발전을 이루고 있다.
-머신러닝의 분류
일반적으로 머신러닝은 지도학습(Supervised Learning)과 비지도학습(Un-supervised Learning), 강화학습(Reinforcement Learning)으로 나뉜다.
●지도학습
- 분류
- 회귀
- 추천 시스템
- 시각/음성 감지/인지
- 텍스트 분석, NLP
●비지도학습
- 클러스터링
- 차원 축소
- 강화학습
위 그림과 같이 AI라는 범주 안에 머신러닝이 속해있고 머신러닝이라는 범주 안에 딥러닝이 속해있다.
이렇듯 이들은 다른듯하면서도 매우 밀접한 관계를 갖고 있다.
train_test_split()
먼저 테스트 데이터 세트를 이용하지 않고 학습 데이터 세트로만 학습하고 예측하면 무엇이 문제인지 살펴보자.
다음 예제는 학습과 예측을 동일한 데이터 세트로 수행한 결과이다.
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
iris = load_iris()
dt_clf = DecisionTreeClassifier()
train_data = iris.data
train_label = iris.target
dt_clf.fit(train_data, train_label)
# 학습 데이터 셋으로 예측 수행
pred = dt_clf.predict(train_data)
print('예측 정확도:',accuracy_score(train_label,pred))
예측 정확도 : 1.0
위의 예측 결과가 100% 정확한 이유는 이미 학습한 학습 데이터 세트를 기반으로 예측했기 때문이다.
즉, 모의고사를 이미 한 번 보고 답을 알고 있는 상태에서 모의고사 문제와 똑같은 본고사 문제가 출제된 것과 같은 것이다.
따라서 예측을 수행하는 데이터 세트는 학습을 수행한 학습용 데이터 세트가 아닌 전용의 테스트 데이터 세트이어야 한다. 사이킷런의 train_test_split을 통해 원본 데이터 세트에서 학습 및 테스트 데이터 세트를 쉽게 분리할 수 있다.
교차 검증
앞에서 알고리즘을 학습시키는 학습 데이터와 이에 대한 예측 성능을 평가하기 위한 별도의 테스트용 데이터가 필요하다고 했다. 하지만 이 방법 역시 과적합(Overfitting)에 취약한 약점을 가질 수 있다. 과적합은 모델이 학습 데이터에만 과도하게 최적화되어, 실제 예측을 새로운 데이터로 수행할 경우에는 예측 성능이 과도하게 떨어지는 것을 의미한다.
과적합은 머신러닝에서 굉장히 중요한 문제이고, 실제로 데이터 분석 대회를 참가할때도 자주 마주치기 때문에 다른 포스팅에서 과적합에 대해 정리할 예정이다.
이러한 문제점을 개선하기 위해 교차 검증을 이용해 더 다양한 학습과 평가를 수행한다.
교차 검증을 좀 더 간략히 앞에서 설명했던 것처럼 설명하자면 본고사를 치르기 전에 모의고사를 여러 번 보는 것이다.
즉, 본고사가 테스트 데이터 세트에 대해 평가하는 거라면 모의고사는 교차 검증에서 많은 학습과 검증 세트에서 알고리즘 학습과 평가를 수행하는 것이다.