[서론]
- 대부분의 사람들이 생각하는 머신러닝 : 로봇 (믿음직한 집사로봇, 살인병기 터미네이터 등)
- 현재 주변에서 쓰이고 있는 머신러닝: 광학 문자 판독기(OCR), 스팸 필터(첫 번째 머신러닝 애플리케이션 1990년대)
"""
스카이넷: 스스로 생각함
이후 추천과 음성 검색으로 발전했으며, 매일 사용하는 많은 제품과 기능을 소리 없이 향상 시킨 수백개의 머신러닝 애플리케이션이 나왔음
머신러닝은 어디서 시작하고 어디서 끝나는 걸까?
기계가 배운다는 것이 정확히 무엇을 의미하는가
위키백화 문서를 내려받으면 내 컴퓨터가 실제로 무언가를 배울 수 있는가?
컴퓨터가 갑자기 똑똑해지나?
"""
[학습목표]
- 머신러닝은 무엇인지, 왜 머신러닝이 필요한지 살펴보자.
- 지도학습과 비지도 학습, 온라인 학습과 배치 학습, 사례 기반 학습과 모델 기반 학습에 대해 알아봄
- 전형적인 머신러닝 프로젝트의 작업 흐름을 살펴보고 만날 수 있는 주요 문제점에 대해 알아봄
- 머신러닝 시스템을 평가하고 세밀하게 튜닝하는 방법을 알게됨
"""
이 장에서는 모든 데이터 과학자가 꼭 알아야 할 여러가지 기초 개념과 용어를 소개함
거시적인 소개를 담고 있으며 코드가 많지 않은 유일한 장임
간단한 내용이지만 이 책의 나머지를 읽기 전에 반드시 모든 내용을 완벽하게 이해해야 함
"""
1.1 머신러닝이란?
# 머신러닝 정의: 데이터에서부터 학습하도록 컴퓨터를 프로그래밍하는 과학(또는 예술).
- (일반적 정의) 명시적인 프로그래밍 없이 컴퓨터가 학습하는 능력을 갖추게 하는 연구 분야.
- (공학적 정의) 어떤 작업 T에 대한 컴퓨터 프로그램의 성능을 P로 측정했을 때 경험 E로 인해 성능이 향상됐다면, 이 컴퓨터 프로그램은 작업 T와 성능 측정P에 대한 경험 E로 학습한 것임.
Ex) 스팸필터: (사용자가 스팸이라고 지정한) 스팸 메일과 일반 메일의 샘플을 이용해 스팸 메일로 분류하는 머신러닝.
이 경우 작업 T는 새로운 메일이 스팸인지 구분하는 것이고, 경험 E는 훈련 데이터이며, 성능 측정 P는 직접 정의해야 함. 예를 들면 정확히 분류된 메일의 비율을 P로 사용할 수 있음. 이 성능 측정 정확도라고 부르며 분류 작업에 자주 사용됨
# 용어정리
- 훈련 세트: 시스템이 학습하는데 사용하는 샘플
- 훈련 샘플(훈련 사례): 각 훈련 데이터
- 정확도: 머신러닝 분류 모델의 성능이 어느정도인지 측정하는 지표
1.2 왜 머신러닝을 사용하는가?
● 전통적인 프로그래밍 기법을 사용해 스팸 필터를 만들면 유지 보수하기 매우 힘들어짐
ㄴ 이유: 문제가 어렵기 때문에 규칙이 점점 길고 복잡해짐(새로운 규칙의 스팸 메일 내용이 생성되면 수시로 업데이트해야 함)
"""
1. 먼저 스팸에 어떤 단어들이 주로 나타나는지 살펴보자. '4U', '신용카드', '무료', '굉장한' 같은 단어나 구절이 제목에 많이 나타나는 경향이 있다는 것을 알 수 있음. 어쩌면 보낸이의 이름이나 메일 주소, 본문이나 이메일의 다른 요소에서 다른 패턴을 감지할 수도 있음.
2. 발견한 각 패턴을 감지하는 알고리즘을 작성하여 프로그램이 어런 패턴을 발견했을 때 그 메일을 스팸으로 분류하게 됨
3. 프로그램을 테스트하고 론칭할 만큼 충분한 성능이 나올 때까지 1단계와 2단계를 반복함
"""
● 머신러닝 기법에 기반을 둔 스팸 필터는 일반 메일에 비해 스팸에 자주 나타나는 패턴을 감지하여 어떤 단어와 구절이 스팸 메일을 판단하는 데 좋은 기준인지 자동으로 학습함.
특징: (전통적인 프로그래밍 기법보다) 프로그램이 훨씬 좋아지고 유지 보수에 용이하며 대부분 정확도가 더 높음.
● 머신러닝이 적합한 분야
ㄴ 기존 솔루션으로는 많은 수동 조정과 규칙이 필요한 문제에 적합함: 코드가 간결해지고 좋은 성능을 보임.
ㄴ 전통적인 방식으로는 해결 방안이 없는 복잡한 문제.
ㄴ 유동적인 환경: 새로운 데이터에 적응하는 머신러닝의 특성을 활용함.
ㄴ 복합한 문제와 대향의 데이터에서 통찰 얻기.
ㄴ 예) 음성 인식
# 용어정리
- 데이터 마이닝: 머신러닝 기술을 적용해서 대용량의 데이터를 분석하면 겉으로는 보이지 않던 패턴을 발견할 수 있으며, 예상치 못한 연관 관계나 새로운 추세가 발견되기도 해서 해당 문제를 더 잘 이해하도록 도와주는 것을 의미함
1.3 애플리케이션 사례
- 생산 라인에서 제품 이미지를 분석해 자동으로 분류하기: 이미지 분류 작업으로, 일반적으로 CNN(14장)을 사용하여 수행함.
- 뇌를 스캔하여 종양 진단하기: 시맨틱 분할 작업으로, CNN을 사용해 이미지의 각 픽셀을 분류함(종양의 정확한 위치와 모양을 결정해야 함)
- 자동으로 뉴스 기사를 분류하기: 자연어 처리(NLP; 텍스트 분류 모델), RNN, 트랜스포터(16장 참조)를 사용해 해결할 수 있음
- 토론 포럼에서 부정적인 코멘트를 자동으로 구분하기: 자연어 처리(NLP) 사용
- 긴 문서를 자동으로 요약하기: 텍스트 요약이라 불리는 NLP의 한 분야로, NLP를 사용함.
- 챗봇 또는 개인 비서 만들기: 자연어 이해(NLU)와 질문-대답 모듈을 포함해 여러 가지 NLU 컴포넌트가 필요함
- 다양한 성능 지표를 기반으로 회사의 내년도 수익을 예측하기: 선형 회귀나 다항 회귀 모델(4장), 회귀 SVM 모델(5장), 회귀 랜덤 포레스트(7장), 인공신경망(10장)과 같은 회귀 모델을 사용함. 지난 성능 지표의 시퀀스를 고려한다면, RNN, CNN 또는 트랜스포머(15, 16장)를 사용할 수 있음
- 음성 명령에 반응하는 앱 만들기: (음성 인식 작업) 오디오 샘플을 처리해야 함. 이는 길고 복잡한 시퀀스이므로 일반적으로 RNN, CNN 또는 트랜스포머(15, 16장)를 사용함.
- 신용 카드 부정 거래 감지하기: 이상치 탐지 작업(9장).
- 구매 이력을 기반으로 고객을 나누고 각 집합마다 다른 마케팅 전략을 계획하기: 군집 작업(9장).
- 고차원의 복잡한 데이터셋을 명확하고 의미 있는 그래프로 표현하기: (데이터 시각화 작업) 차원 축소 기법을 많이 사용함(8장).
- 과거 구매 이력을 기반으로 고객이 관심을 가질 수 있는 상품 추천하기: (추천 시스템) 과거 구매 이력을 (고객에 관한 다른 정보를) 인공신경망(10장)에 주입하고 다음에 구매할 가능성이 가장 높은 상품을 출력함. 일반적으로 모든 고객의 구매 이력을 기반으로 훈련함.
- 지능형 게임 봇 만들기: (강화학습(RL, 18장)), 시간이 지나면 (게임 같은) 주어진 환경에서 보상이 최대가 되는 행동을 선택하는 (봇과 같은) 에어전트를 훈련하는 머신러닝의 한 분야. (예를 들면, 상대 플레이어가 점수를 잃을 때마다 봇이 보상을 받을 수 있음) 바둑 세계 챔피언을 이긴 유명한 알파고가 강화학습을 사용해 구축되었음.
1.4 머신러닝 시스템의 종류
- 지도, 비지도, 준지도, 강화 학습: 사람의 감독하에 훈련하는 것인지 그렇지 않은 것인지
- 온라인 학습, 배치 학습: 실시간으로 점진적인 학습을 하는지 아닌지
- 사례 기반 학습, 모델 기반 학습: 단순하게 알고 있는 데이터 포인트와 새 데이터 포인트를 비교하는 것인지 아니면 과학자들이 하는 것처럼 훈련 데이터 셋에서 패턴을 발견하여 예측 모델을 만드는지
1.4.1 지도 학습과 비지도 학습
(1) 지도 학습
지도 학습에는 알고리즘에 주입하는 훈련 데이터에 레이블이라는 원하는 답이 포함됨
※ 시스템을 훈련하려면 예측 변수와 레이블(타깃 데이터)가 포함된 데이터가 많이 필요함
| 분류 | 회귀 |
| 스팸필터 분류: 많은 메일 샘플과 소속 정보(스팸인지 아닌지)로 훈련되어야 하며 어떻게 새 메일을 분류할지 학습해야 함 | 중고차 가격 예측: 예측 변수라 부르는 특성(주행거리, 연식, 브랜드 등)을 사용해 중고차 가격 같은 타깃 수치를 예측하는 것 |
일부 회귀 알고리즘은 분류에 사용할 수 있음. 반대로 일부 분류 알고리즘은 회귀에 사용할 수 있음.
예시) 로지스틱 회귀: 클래스에 속할 확률을 출력함
- K-최근접 이웃 (K-Nearest Neighbors)
- 선형 회귀 (Linear Regression)
- 로지스틱 회귀 (Logistic Regression)
- 서포트 벡터 머신 (SVM; Support Vector Machine)
- 결정트리 (Decision Tree) 와 랜덤 포레스트 (Random Forest)
- 신경망 (Neural Networks)
(2) 비지도 학습
비지도 학습에는 말 그대로 훈련 데이터에 레이블이 없음
따라서, 시스템이 아무런 도움 없이 학습해야 함
- 군집 (Clustering)
- K-평균 (K-Means)
- DBSCAN
- 계층 군집 분석 (HCA)
- 이상치 탐지와 측이치 탐지
- 원-클래스
- 아이솔레이션 포레스트
- 시각화와 차원 축소
- 주성분 분석 (PCA)
- 커널 PCA
- 지역적 선형 임베딩 (LLE)
- T-SNE
- 연관 규칙
- 어프아이어리
- 이클렛
예시)
주제: 방대한 블로그 방문자 데이터에 대해 비슷한 방문자들을 그룹으로 묶기 위해 군집 알고리즘을 적용하려고 함
문제: 방문자가 어떤 그룹에 속하는지 알고리즘이 알려줄 수 있는 데이터 포인트가 없는 상황이고, 알고리즘이 스스로 방문자 사이의 연결 고리를 찾아야 함.
알고리즘은 다음과 같은 연결 고리를 찾을 수도 있음.
예를 들어, 40%의 방문자가 만화책을 좋아하며 저녁때 블로그 글을 있는 남성이고, 20%의 방문자는 주말에 방문하는 SF를 좋아하는 젊은 사람임을 알게 될지도 모름.
해결: 계층 군집 알고리즘을 사용하면 각 그룹을 더 작은 그룹으로 세분화할 수 있어, 각 그룹(타깃으로 하는 마케팅 계층)에 맞추어 블로그에 글을 쓰는 데 도움이 될 것임
시각화 알고리즘: 레이블이 없는 대규모의 고차원 데이터를 넣으면 도식화가 가능한 2D, 3D 표현을 만들어 줌
ㄴ 시각화 알고리즘은 가능한 한 구조를 그대로 유지하려고 해서,
데이터가 어떻게 조직되어 있는지(시각화된 그래프를 통해) 이해할 수 있고 예상하지 못한 패턴을 발견할 수도 있음
(예를 들어 입력 공간에서 떨어져 있던 클러스터는 시각화된 그래프에서 겹쳐지지 않게 유지하려고 함)
차원 축소: 비슷한 작업으로는 너무 많은 정보를 잃지 않으면서 데어터를 간소화하는 알고리즘
ㄴ 상관관계가 있는 여러 특성을 하나로 합치는 것
예시) 차의 주행거리는 연식과 강하게 연관되어 있으므로
차원 축소 알고리즘으로 두 특성을 차의 마모 정도를 나타내는 하나의 특성으로 합칠 수 있음
(이를 특성 추출이라고 함)
이상치 탐지:
예를 들어 부정 거래를 막기 위해 이상한 신용카드 거래를 감지하고, 제조 결함을 잡아내고, 학습 알고리즘에 주입하기 전에 데이터셋에서 이상한 값을 자동으로 제거하는 것 등
시스템은 훈련하는 동안 대부분 정상 샘플을 만나 이를 인식하도록 훈련함.
그 다음 새로운 샘플을 보고 정상 데이터인지 혹은 이상치인지 판단함
매우 비슷한 작업으로 특이치 탐지가 있음
훈련 세트에 있는 모든 샘플과 달라 보이는 새로운 샘플을 탐지하는 것이 목적
알고리즘으로 감지하고 싶은 모든 샘플을 제거한 매우 '깨끗한' 훈련 세트가 필요함
예를 들어 강아지 사진 수천 장이 있고 그 중에 1&가 치와와 사진이라면 특이치 탐지 알고리즘이 치와와 사진을 새로운 특이한 것으로 처리하지 못함. 반면 이상치 탐지 알고리즘은 이 강아지 사진을 매우 드물고 다른 강아지와 다르다고 인식하여 이상치로 분류할 것임
연관 규칙 학습: 대량의 데이터에서 특성 간의 흥미로운 관계(규칙)를 찾는 알고리즘
예를 들어 여러분이 슈퍼마켓을 운영한다고 가정하고, 판매기록에 연관 규칙을 적용하면 바비큐 소스와 감자를 구매한 사람이 스테이크도 구매하는 경향이 있다는 것을 찾을지도 모름. 아마 이 상품들을 서로 가까이 진열하고 싶을 것임.
(3) 준지도 학습: 레이블이 일부만 있는 데이터를 학습할 수 있는 알고리즘
필요한 상황: 대량의 데이터에 라벨링을 하는 것은 일반적으로 시간과 비용이 많이 들기 때문에 레이블이 없는 샘플이 많거나, 레이블된 샘플은 적은 경우가 많음.
예시)
구글 포토 호스팅 서비스: 이 서비스에 가족사진을 모두 올리면 사람 A는 사진 1, 5, 11에 있고 사람 B는 2, 5, 7에 있다고 자동으로 인식함. (이는 군집을 활용한 것)
시스템에서 필요로 하는 것: 사람 A, 사람 B가 누구인지에 대한 정보
사람마다 레이블을 하나만 추가하면 사진에 있는 모든 사람의 이름을 알 수 있고, 편리하게 사진을 찾을 수 있음
※ 외모가 비슷한 두 사람이 섞이는 경우도 있어, 여러 번 레이블을 부여하고, 어떤 군집은 수동으로 정리해야 함
(4) 강화학습
정의: 에이전트(학습하는 시스템)가 환경을 관찰해서 행동을 실행하고 그 결과에 대한 보상(또는 부정적인 보상에 해당하는 벌점)을 받게 됨. 시간이 지나면서 가장 큰 보상을 얻기 위해 정책이라고 부르는 최상의 전략을 스스로 학습하게 되고, 정책은 주어진 상황에서 에어전트가 어떤 행동을 선택해야할 지 정의하게 됨.
예시)
보행 로봇을 만들기 위해 강화 학습 알고리즘을 많이 사용함.
딥마인드의 알파고 프로그램도 강화 학습을 활용함: 2017년 5월 바둑 세계 챔피언인 이세돌 선수를 이겨서 신문의 헤드라인을 장식했음. 알파고는 수백만 개의 게임을 분석해서 승리에 대한 전략을 학습했으며 자기 자신과 많은 게임을 했음. 알파고는 세계 챔피언과 게임할 때는 학습 기능을 끄고 그동안 학습했던 전력을 적용한 것임.
※ 강화 학습은 학습 기능을 끄고 켤 수 있음
1.4.2 배치 학습과 온라인 학습
머신러닝 시스템을 분류하는 데 사용하는 다른 기준
- 입력 데이터의 스트림으로부터 점진적으로 학습할 수 있는지 여부에 따라 분류 방식이 달라짐
(1) 배치 학습
시스템이 점진적으로 학습할 수 없음.
가용한 데이터를 모두 사용해 훈련해야 함.
일반적으로 이 반식은 시간과 자원을 많이 소모하므로 보통 오프라인에서 수행됨
먼저 시스템을 훈련시키고 그런 다음 제품 시스템에 적용하면 더 이상의 학습 없이 실행됨
즉, 학습한 것이 단지 적용만 함
이를 오프라인 학습이라고 함
배치 학습 시스템이 (새로운 종류의 스팸 같은) 새로운 데이터에 대해 학습하려면 (새로운 데이터뿐만 아니라 이전 데이터도 포함한) 전체 데이터를 사용하여 시스템의 새로운 버전을 처음부터 다시 훈련해야 함
그런 다음 이전 시스템을 중지시키고 새 시스템으로 교체함
다행히 머신러닝 시스템을 훈련, 평가, 론칭하는 전체 과정이 쉽게 자동화될 수 있어서 배치 학습 시스템도 변화에 적응할 수 있음. 데이터를 업데이트하고 시스템의 새 버전을 필요한 만큼 자주 훈련시키면 됨
이런 방식이 간단하고 잘 작동하지만 전체 데이터셋을 사용해 훈련하는데 몇 시간이 소요될 수 있음. 보통 24시간마다 또는 매주 시스템을 훈련시킴. 시스템이 빠르게 변하는 데이터에 적응해야 한다면 (예를 들면 주식가격) 더 능동적인 방법이 필요함
또한 전체 데이터셋을 사용해 훈련한다면 많은 컴퓨팅 자원이 필요함(CPU, 메모리 공간, 디스크 공간, 디스크 IO, 네트워크 IO 등), 대향의 데이터를 가지고 있는데 매일 처음부터 새로 훈련시키도록 시스템을 자동화한다면 큰 비용이 발생할 것임. 데이터 양이 매우 많으면 배치 학습 알고리즘을 사용하는게 불가능할 수도 있음.
마지막으로, 자원이 제한된 시스템(예를 들면 스마트폰 또는 화성 탐사 로버)이 스스로 학습해야할 때 많은 양의 훈련 데이터에 대해 학습을 위해 매일 몇 시간씩 많은 자원(시간)을 사용하면 심각한 문제를 일으킬 것임.
이런 경우에는 점진적으로 학습할 수 있는 알고리즘을 사용하는 편이 나음.
(2) 온라인 학습
온라인 학습에서는 데이터를 순차적으로 한 개씩 또는 미니배치라 부르는 작은 묶음 단위로 주입하여 시스템을 훈련시킴
매 학습 단계가 빠르고 비용이 적게 들어 시스템은 데이터가 도착하는 대로 즉시 학습할 수 있음
온라인학습은 연속적으로 데이터를 받고 빠른 변화에 스스로 적응해야하는 시스템에 적합함
컴퓨팅 자원이 제한된 경우에도 좋은 선택임
온라인 학습 시스템이 새로운 데이터 샘플은 학습하면 학습이 끝난 데이터는 더는 필요하지 않으므로 버리면 됨(이전 상태로 되돌릴 수 있도록 데이터를 재사용하기 위해 보관할 필요가 없다면) 그러면 많은 공간을 절약할 수 있음
컴퓨터 한대의 메인 메모리에 들어갈 수 없는 아주 큰 데이터셋을 학습하는 시스템에도 온라인 학습 알고리즘을 사용할 수 있음.(=외부 메모리 학습)
알고리즘이 데이터 일부를 읽어 들이고 훈련 단계를 수행함. 전체 데이터가 모두 적용될 때까지 이 과정을 반복함.
CAUTION_
외부 메모리 학습은 보통 오프라인으로 실행됨(즉, 실시간 시스템에서 수행되는 것이 아님)
따라서, 온라인 학습이란 이름이 혼란을 줄 수 있어서 외부 메모리 학습은 점진적 학습이라고 생각하면 됨
온라인 학습 시스템에서 중요한 파라미터 하나는 변화하는 데이터에 얼마나 빠르게 적응할 것인지에 대한 학습률임.
학습률을 높게 하면 시스템이 데이터에 빠르게 적응하지만 예전 데이터를 금방 잊어버릴 것임(최근에 나타난 데이터의 트랜드로만 분류하는 것은 원치 않음)
반대로 학습률이 낮으면 시스템의 관성이 더 커져서 더 느리게 학습됨. 하지만 새로운 데이터에 있는 잡음이나 대표성이 없는 데이터 포인트에 덜 민감해짐
온라인 학습에서 가장 큰 문제점은 시스템에 나쁜 데이터가 주어졌을 때 시스템 성능이 점짐적으로 감소함
운영중인 시스템이라면 사용자가 눈치챌 가능성이 높음
나쁜 데이터가 주어지는 위험을 줄이려면 시스템을 면멸히 모니터링하고 성능 감소가 감지되면 즉각 학습을 중지시켜야 함(가능하면 이전 운영 상태로 되돌려야 함)
입력 데이터를 모니터링해서 비정상 데이터를 잡아낼 수도 있음(예를 들면 이상치 탐지 알고리즘을 사용해서.)
1.4.3 사례 기반 학습과 모델 기반 학습
머신러닝 시스템은 어떻게 일반화되는가에 따라 분류할 수 있음
대부분의 머신러닝 작업은 예측을 만드는 것(=주어진 훈련데이터로 학습하고 훈련 데이터에서는 본 적 없는 새로운 데이터에서 좋은 예측을 만들어야(일반화되어야) 한다는 의미)
훈련 데이터에서 높은 성능을 내는 것이 좋지만 그게 전부는 아님. 진짜 목표는 새로운 샘플에 잘 작동하는 모델임
(1) 사례 기반 학습
- 시스템이 훈련 샘플을 기억함으로써 학습함.
- 유사도 측정을 사용해 새로운 데이터와 학습한 샘플을 (또는 학습한 샘플 중 일부를) 비교하는 방식으로 일반화함
- K-최근접 이웃 (K-Nearest Neighbors)
예시) 스팸 메일과 동일한 메일을 스팸이라고 지정하는 대신 스팸 메일과 매우 유사한 메일을 구분하도록 스팸 필터를 프로그래밍할 수 있음. 이렇게 하려면 두 메일 사이의 유사도를 측정해야 함. 두 메일 사이의 매우 간단한 유사도 측정 방법은 공통으로 포함한 단어의 수를 세는 것임. 스팸 메일과 공통으로 가지고 있는 단어가 많으면 스팸으로 분류함
(2) 모델 기반 학습
- 샘플로부터 일반화시키는 다른 방법은 이 샘플들의 모델을 만들어 예측에 사용하는 것
예시) 주제: 돈이 사람을 행복하게 만드는지 알아보자.
OECD 웹사이트에서 더 나은 삶의 지표 데이터와 IMF 웹사이트에서 1인당 GDP 통계를 내서 시각화한 결과는 아래와 같을 때, 데이터가 흩어져 있지만(즉, 어느정도 무작위성이 있지만) 삶의 만족도가 국가의 1인당 GDP가 증가할수록 선형으로 같이 올라감. 이 단계를 모델 선택이라고 함. 1인당 GDP라는 특정 하나를 가진 삶의 만족도에 대한 선형 모델임... 등등의 과정을 거쳐 시각화 및 모델을 선정함
![]() |
![]() |
요약 정리
- 데이터를 분석함
- 모델을 선택함
- 훈련 데이터로 모델을 훈련시킴(즉, 학습 알고리즘이 비용함수를 최소화하는 모델 파라미터를 찾음)
- 새로운 데이터를 모델에 적용해 예측(추론)하고 해당 모델이 일반화 적용이 잘 되었는지 확인함
1.5 머신러닝의 주요 도전 과제 (데이터 정제)
학습목표
간단하게 말해 우리의 주요 작업은 학습 알고리즘을 선택해서 어떤 데이터에 훈련시키는 것이므로 문제가 될 수 있는 두 가지는 '나쁜 알고리즘'과 '나쁜 데이터'로, 나쁜 데이터의 사례부터 알아보자.
1.5.1 충분하지 않은 양의 훈련 데이터 (많은 데이터 필요; 수천 개~ 수백만 개 정도)
어린아이에게 사과에 대해 알려주려면 사과를 가리키면서 '사과'라고 말하기만 하면 됨(아마도 이 과정을 여러번 반복해야 함). 그러면 아이는 색상과 모양이 달라도 모든 종류의 사과를 구분할 수 있음.
하지만 머신러닝은 아직 이렇게까지는 못함.
대부분의 머신러닝 알고리즘이 잘 작동하려면 데이터가 많아야 함. 아주 간단한 문제에서조차도 수천 개의 데이터가 필요하고 이미지나 음성 인식 같은 복잡한 문제라면 수백만 개가 필요할지도 모름(이미 만들어진 모델을 재사용할 수 없다는 가정 하에).
1.5.2 대표성이 없는 훈련 데이터 (샘플링 편향)
일반화가 잘 되려면 우리가 일반화하기 원하는 새로운 사례를 훈련 데이터가 잘 대표하는 것이 중요함
(이는 사례기반 학습이나 모델 기반 학습 모두 포함)
예시) 앞서 선형 모델을 훈련시키기 위해 사용한 나라의 집합에는 일부 나라가 빠져 있어 대표성이 완벽하지 못함. 누락된 나라를 추가했을 때 데이터가 어떻게 나타나는지 보여줌.

이 데이터에 선형 모델을 훈련시키면 실선으로 된 모델을 얻음. 반면 이전 모델은 점선으로 나타나 있음. 위 그래프에서 알 수 있듯이 누락된 나라를 추가하면 모델이 크게 변경될 뿐만 아니라 이런 간단한 선형 모델은 잘 작동하지 않는다는 걸 확실히 보여줌. 매우 부유한 나라가 중간 정보의 나라보다 행복하지 않고, 반대로 일부 가난한 나라가 부유한 나라보다 행복하다는 지표를 확인할 수 있음.
대표성이 없는 훈련 데이터를 사용했으므로 정확한 예측을 하지 못하는, 특히 매우 가난하거나 부유한 나라에서 잘못 예측하는 모델을 훈련시켰음.
일반화하려면 사례들을 대표하는 훈련 세트를 사용하는 것이 매우 중요하지만, 이게 생각보다 어려울 때가 많음.
샘플링 편향: 샘플이 작으면 샘플링 잡음(=우연에 의한 대표성이 없는 데이터)이 생기고, 매우 큰 샘플도 표본 추출 방법이 잘못되면 대표성을 띠지 못함.
1.5.3 낮은 품질의 데이터 (데이터 전처리)
훈련 데이터가 에러, 이상치, 잡음(예를 들면 성능이 낮은 측정 장치 때문에)으로 가득하다면 머신러닝 시스템이 내재된 패턴을 찾기 어려워 잘 작동하지 않을 것임. 하여, 훈련 데이터 정제에 충분한 시간을 투자하는 것이 중요함.
(실제 대부분의 데이터 과학자가 데이터 정제에 많은 시간을 쓰고 있음)
훈련 데이터 정제가 필요한 경우
- 일부 샘플이 이상치라는게 명확하면 간단히 그것들을 무시하거나 수동으로 잘못된 것을 고치는 것이 좋음
- 일부 샘플에 특성 몇개가 빠져있다면(예를 들면 고객 중 5%가 나이를 기록하지 않음), 이 특성을 모두 무시할지, 이 샘플을 무시할지, 빠진 값을 채울지 (예를 들면 평균 나이로), 또는 이 특성을 넣은 모델과 제외한 모델을 따로 훈련시킬 것인지 결정해야 함.
1.5.4 관련 없는 특성 (특성공학)
속담에도 있듯이 엉터리가 들어가면 엉터리가 나옴.
훈련 데이터에 관련 없는 특성이 적고 관련 있는 특성이 충분해야 시스템이 학습할 수 있을 것임.
특성공학이란?
- 성공적인 머신러닝 프로젝트의 핵심 요소는 훈련에 사용할 좋은 특성들을 찾는 것임.
특성공학 작업으로는
- 특성 선택: 가지고 있는 특성 중에서 훈련에 가장 유용한 특성을 선택함
- 특성 추출: 특성에 결합하여 더 유용한 특성을 만듬. 앞서 본 것처럼 차원 축소 알고리즘이 도움될 수 있음.
1.5.5 훈련 데이터 과대적합
(생략)
1.5.6 훈련 데이터 과소적합
과소적합을 해결하는 주요 기법
- 모델 파라미터가 더 많은 강력한 모델을 선택함
- 학습 알고리즘에 더 좋은 특성을 제공함(특성공학)
- 모델의 제약을 줄임(예를 들면 규제 하이퍼파라미터를 감소시킴)
1.5.7 한걸음 물러서서
- 머신러닝은 명시적인 규칙을 코딩하지 않고 기계가 데이터로부터 학습하여 어떤 작업을 더 잘하도록 만드는 것
- 여러 종류의 머신러닝 시스템이 있음; 지도학습과 비지도학습, 배치학습과 온라인학습, 사례기반학습과 모델기반학습 등
- 머신러닝 프로젝트에서는 훈련 세트에 데이터를 모아 학습 알고리즘에 주입함. 학습 알고리즘이 모델 기반이면 훈련 세트에 모델을 맞추기 위해 모델 파라미터를 조정하고(=훈련 세트에서 좋은 예측을 만들기 위해), 새로운 데이터에서도 좋은 예측을 만들 것이라 기대함. 알고리즘이 사례 기반이면 샘플을 기억하는 것이 학습이고 유사도 측정을 사용하여 학습한 샘플과 새로운 샘플을 비교하는 방식으로 새로운 샘플을 일반화함
- 훈련 세트가 너무 적거나, 대표성이 없는 데이터이거나, 잡음이 많고 관련이 없는 특성으로 오염되어 있다면 시스템이 잘 작동하지 않음(엉터리가 들어가면 엉터리가 나옴). 마지막으로, 모델이 너무 단순하거나(과소적합) 너무 복잡하지 않아야 함(과대적합).
1.6 테스트와 검증 (모델 튜닝)
모델이 새로운 샘플에 얼마나 잘 일반화될지 아는 유일한 방법은 새로운 샘플에 실제로 적용해보는 것
이를 위해 실제 서비스에 모델을 넣고 잘 작동하는지 모니터링하는 방법이 있음
이 방법이 괜찮긴 하지만 만약 모델이 아주 나쁘다면 고객이 불만을 토로할 테니 좋은 생각이 아님
더 나은 방법은 훈련 데이터를 훈련 세트와 테스트 세트로 나누는 것
(훈련세트를 사용해 모델을 훈련하고, 테스트 세트를 이용해 모델을 테스트 함)
새로운 샘플에 대한 오류 비율을 일반화 오차(=외부 샘플 오차)라고 하며, 테스트 세트에서 모델을 평가함으로써 이 오차에 대한 추정값을 얻음. 이 값은 이전에 본 적이 없는 새로운 샘플에 모델이 얼마나 잘 작동하는지 알려줌
훈련 오차가 낮지만, 일반화 오차가 높다면 이는 모델이 훈련 데이터에 과대적합 됨을 의미함
1.6.1 하이퍼파라미터 튜닝과 모델 선택
모델 평가는 아주 간단함. 그냥 테스트 세트를 사용하면 됨. 두 모델(선형 모델과 다항 모델) 중 어떤 것을 선택할지 갈등하고 있다고 가정했을 때, 둘 중에 하나를 어떻게 결정할 수 있는가? 두 모델 모두 훈련 세트로 훈련하고 테스트 세트를 사용해 얼마나 잘 일반화되는지 비교해보면 됨.
이제 선형 모델이 더 잘 일반화되었다고 가정하고 과대적합을 피하기 위해 규제를 적용하려고 함.
이때 하이퍼파라미터 값을 어떻게 선택하는가? 100개의 하이퍼파라미터 값으로 100개의 다른 모델을 훈련시키는 방법이 있음. 일반화 가차가 가장 낮은 모델(5%라고 가정)을 만드는 최적의 하이퍼파라미터를 찾았다고 했을 때, 해당 모델을 실제 서비스에 투입함.
하지만 성능이 예상만큼 좋치 않고 오차를 15%나 만듬.
(테스트 세트에 대한 과대적합 발생)
그 이유는 일반화 오차를 테스트 세트에서 여러번 측정했으므로 모델과 하이퍼파라미터가 테스트 세트에 최적화된 모델을 만들었기 때문임. 이는 모델이 새로운 데이터에 잘 작동하지 않을 수 있다는 것을 의미함.
이 문제에 대한 일반적인 해결 방법은 홀드아웃 검증으로, 간단하게 훈련 세트의 일부를 떼어내어 여러 후보 모델을 평가하고 가장 좋은 하나를 선택함. 이 새로운 홀드아웃 세트를 검증 세트(=개발 세트, 데브 세트)라고 부름.
구체적으로 말하면 줄어든 훈련 세트(=전체 훈련 세트에서 검증 세트를 뺀 데이터)에서 다양한 하이퍼파라미터 값을 가진 여러 모델을 훈련함. 그 다음 검증 세트에서 가장 높은 성능을 내는 모델을 선택함. 홀드아웃 검증 과정이 끝나면 이 최선의 모델을 (검증세트를 포함한) 전체 훈련 세트에서 다시 훈련하여 최종 모델을 만듬. 마지막으로 최종 모델을 테스트 세트에서 평가하여 일반화 오차를 추정함.
이 방법은 일반적으로 잘 작동함.
하지만 검증 세트가 너무 작으면 모델이 정확하게 평가되지 않으며, 최적이 아닌 모델로 잘못 선택할 여지가 있음. 반대로 검증 세트가 너무 크면 남은 훈련 세트가 전체 훈련 세트보다 너무 작아지게 된다면,
또 다른 문제를 야기할 수 있음. 최종 모델이 전체 훈련 세트에서 훈련되기 때문에 너무 적은 훈련 세트에서 훈련한 후보 모델을 비교하는 것은 이상적이지 않음.
해결방안
- 작은 검증 세트를 여러 개를 사용해 반복적으로 교차 검증을 수행하는 것; 검증 세트마다 나머지 데이터에서 훈련한 모델을 해당 검증 세트에서 평가함. 모든 모델의 평가를 평균하면 훨씬 정확한 성능을 측정할 수 있음(단점으로는 훈련 시간이 검증 세트의 개수에 비례해 늘어남).
데이터 불일치
어떤 경우에는 쉽게 많은 양의 훈련 데이터를 얻을 수 있지만 이 데이터가 실제 제품에 사용될 데이터를 완변하게 대표하지 못할 수 있음. 예를 들어 꽃 사진을 찍어 꽃 이름을 자동으로 찾아주는 모바일 앱을 만든다고 가정하자. 웹에서 구백만 개의 꽆 사진을 쉽게 다운로드할 수 있음. 하지만 모바일 앱을 사용해 실제오 찍을 사진을 완벽하게 대신하지는 못함. 대신할 수 있는 사진이 10,000개만 있을 수 있음(즉, 앱으로 실제 찍은 사진). 이 경우 가장 중요한 규칙은 검증 세트와 테스트 세트가 실정에서 기대하는 데이터를 가능한 잘 대표해야 한다는 것임.
따라서, 검증 세트와 테스트 세트의 대표 사진이 배타적으로 포함되어야 함. 이 사진을 섞어서 반은 검증 세트에 반은 테스트 세트에 넣음(양쪽 세트에 중복되거나 비슷한 사진이 들어가지 않게 함).
하지만 웹에서 다운로드한 사진에 모델을 훈련한 후에 검증 세트에서 모델의 성능을 측정하면 매우 실망할 것임
모델이 훈련 세트에 과대적합되었기 때문인지 또는 웹 사진과 모바일 앱 사진의 데이터가 불일치하기 때문인지 알기 어려움.
해결방안
- 훈련-개발 세트을 통한 모델 평가; (웹에서 다운로드한) 훈련 사진의 일부를 떼어내어 또 다른 세트를 만드는 것으로, 앤드루 응(Andrew Ng)은 이를 훈련-개발 세트라고 부름. 모델은 (훈련-개발 세트가 아니라 훈련 세트에서) 훈련한 다음 훈련-개발 세트에서 평가함. 모델이 잘 작동하면 훈련 세트에 과대적합된 것이 아님. 이 모델이 검증 세트에서 나쁜 성능을 낸다면 이 문제는 데이터 불일치에서 오는 것임. 웹 이미지를 모바일 앱에서 찍은 사진처럼 보이도록 전처리한 다음 이 모델을 다시 훈련하여 이 문제를 해결할 수 있음.
- 반대로 모델이 훈련-개발 세트에서 잘 작동하지 않는다면 이는 훈련 세트에 과대적합된 것을 의미함. 따라서 모델을 규제하거나 더 많은 훈련 데이터를 모으거나 훈련 데이터 정체를 시도해봐야 함.
1.7 연습문제 (개념 정립)
- 머신러닝을 어떻게 정의할 수 있는가?
- 머신러닝이 도움을 줄 수 있는 문제 유형 네 가지를 설명해보자.
- 레이블된 훈련 세트란 무언인가?
- 가장 널리 사용되는 지도 학습 작업 두 가지는 무엇인가?
- 보편적인 비지도 학습 작업 네 가지는 무엇인가?
- 사전 정보가 없는 여러 지형에서 로봇을 걸어가게 하려면 어떤 종류의 머신러닝 알고리즘을 사용할 수 있는가?
- 고객을 여러 그룹으로 분할하려면 어떤 알고리즘을 사용해야 하는가?
- 스팸 감지의 문제는 지도 학습과 비지도 학습 중 어떤 문제로 볼 수 있는가?
- 온라인 학습 시스템이 무언인가?
- 외부 메모리 학습은 무엇인가?
- 예측을 하기 위해 유사도 측정에 의존하는 학습 알고리즘은 무엇인가?
- 모델 파라미터와 학습 알고리즘의 하이퍼파라미터 사이에는 어떤 차이가 있는가?
- 모델 기반 알고리즘이 찾는 것은 무엇인가? 성공을 위해 이 알고리즘이 사용하는 가장 일반적인 전략은 무엇인가? 예측은 어떻게 만드는가?
- 머신러닝의 주료 도전 과제는 무엇인가?
- 모델이 훈련 데이터에서의 성능은 좋지만 새로운 샘플에서의 일반화 성능이 나쁘다면 어떤 문제가 있는 것인가? 가능한 해결책 세 가지는 무엇인가?
- 테스트 세트가 무엇이고 왜 사용하는가?
- 검증 세트의 목적은 무엇인가?
- 훈련-개발 세트는 무엇인가? 언제 필요하고 어떻게 사용해야 하는가?
- 테스트 세트를 사용해 하이퍼파라미터를 튜닝하면 어떤 문제가 생기는가?
- CHAPTER 1 한눈에 보는 머신러닝 END -

