
p.28
머신러닝은 규칙을 일일이 프로그래밍하지 않아도 자동으로 데이터에서 규칙을 학습하는 알고리즘을 연구하는 분야입니다.
대표적인 머신러닝 라이브러리는 사이킷런입니다.
사이킷런 라이브러리는 파이썬 API를 사용하는데 파이썬 언어는 배우기 쉽고 컴파일하지 않아도 되기 때문에 사용하기 편리합니다.

대표적인 머신러닝 알고리즘을 카테고리별로 정리하면 다음과 같다.
- 지도학습 (분류/회귀)
- 비지도학습
- 딥러닝
- 앙상블 기법
- 강화학습
XGBoost는 지도학습 알고리즘이다.
분류: 정상/아크 같은 이진 분류, 또는 다중 클래스 분류
회귀: 연속값 예측 (ex: 온도, 위험도 점수 등)
p.46
머신러닝에서 여러 개의 종류(클래스라고 부릅니다) 중 하나를 구별해 내는 문제를 분류라고 부릅니다.
2개의 클래스 중 하나를 고르는 문제를 이진 분류라고 합니다.
분류란?
입력 데이터를 미리 정해진 여러 카테고리(클래스)중 하나로 할당하는 지도학습 문제이다.
모델은 학습 과정에서 각 데이터가 어떤 클래스에 속하는지 정답을 보고 패턴을 학습한 뒤, 새로운 데이터가 들어오면 어느 클래스에 속할지 예측한다.
p.53

머신러닝에서 2개를 구분하는 경우 찾으려는 대상을 1로 놓고 그 외에는 0으로 놓습니다. 위의 예는 도미를 찾는 대상으로 정의했기 때문에 도미를 1로 놓고 빙어를 0으로 놓았습니다. 반대로 빙어를 찾는 대상으로 놓고 빙어를 1로 놓아도 됩니다.
from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
kn.fit(fish_data, fish_target) # 훈련: 데이터 + 정답 라벨 모두 필요
kn.score(fish_data, fish_target) # 검증: 정답과 비교해서 정확도 계산 (라벨 필요)
# 추론(실제 예측): 라벨 없이 피처만 입력
new_fish = [[30, 600]] # 예: 길이, 무게
prediction = kn.predict(new_fish) # 라벨 없이 예측값만 리턴
fish_data와 fish_target을 전달하여 도미를 찾기 위한 기준을 학습시킵니다. 이런 과정을 머신러닝에서는 훈련이라고 부릅니다.
사이킷런에서는 fit()메서드가 이런 역할을 합니다.
이제 객체 kn이 얼마나 잘 훈련되었는지 평가해 보겠습니다. 사이킷런에서 모델을 평가하는 메서드는 score() 메서드입니다.
이 메서드는 0에서 1사이의 값을 반환합니다. 1은 모든 데이터를 정확히 맞혔다는 것을 나타냅니다. 예를 들어 0.5라면 절반만 맞혔다는 의미죠.
정답 값을 대게 target이라고 부른다.
정답이 없으면 모델이 학습할 방향 자체가 없어진다. 그냥 데이터만 던져주면 이게 도미인지 빙어인지 모델이 무슨 기준으로 구별해야 하는지 알 수 없다.
p.54
k-최근접 이웃 알고리즘
k개의 최근접 이웃을 둘러보고 이웃들이 어떤 샘플/클래스인지를 판단하여 예측하는 알고리즘 (k 기본 값은 5)
k값을 바꾸는 설정이 KNeighborsClassifier(n_neighbors=49) 이다.

어떤 데이터에 대한 답을 구할 때 주위의 다른 데이터를 보고 다수를 차지하는 것을 정답으로 사용합니다.
예를 들어 다음 그림에 삼각형으로 표시된 새로운 데이터가 있다고 가정해 보죠. 이 삼격형은 도미와 빙어 중 어디에 속할까요?
아마도 여러분은 직관적으로 이 삼각형은 도미라고 판단할 것입니다. 왜냐하면 삼각형 주변에 다른 도미 데이터가 많기 때문이죠.
k-최근접 이웃 알고리즘도 마찬가지입니다. 이 삼각형 주위에 도미 데이터가 많으므로 삼각형을 도미라고 판단할 것입니다.
kn.predict([[30, 600]])
결과 값 array([1])

predict() 메서드는 새로운 데이터의 정답을 예측합니다.
반환되는 값은 1입니다. 우리는 앞서 도미는 1, 빙어는 0으로 가정했습니다. 즉 삼각형은 도미입니다.
k-최근접 이웃 알고리즘을 위해 준비해야 할 일은 데이터를 모두 가지고 있는 게 전부입니다. 새로운 데이터에 대해 예측할 때는 가장 가까운 직선거리에 어떤 데이터가 있는지를 살피기만 하면 됩니다. 단점은 k-최근접 이웃 알고리즘의 이런 특징 때문에 데이터가 아주 많은 경우 사용하기 어렵습니다. 데이터가 크기 때문에 메모리가 많이 필요하고 직선거리를 계산하는 데도 많은 시간이 필요합니다.
p.61
k-최근접 이웃 알고리즘은 가장 간단한 머신러닝 알고리즘 중 하나입니다. 사실 어떤 규칙을 찾기보다는 전체 데이터를 메모리에 가지고 있는 것이 전부입니다.
머신러닝 프로그램에서는 알고리즘이 구현된 객체를 모델이라고 부릅니다. 종종 알고리즘 자체를 모델이라고 부르기도 합니다.
p.67
머신러닝 알고리즘은 크게 지도 학습과 비지도 학습으로 나눌 수 있습니다. 지도 학습 알고리즘은 훈련하기 위한 데이터와 정답이 필요합니다.
마켓과 머신러닝에서 보았던 도미와 빙어의 예를 보면 생선의 길이와 무게를 알고리즘에 사용했습니다. 이 경우 정답은 도미인지 아닌지 여부입니다.
지도 학습에서는 데이터와 정답을 입력과 타식이라고 하고, 이 둘을 합쳐 훈련 데이터라고 부릅니다.
그리고 앞서 언급했듯이 입력으로 사용된 길이와 무게를 특성이라고 합니다. 도미와 빙어를 구분하는 데 사용한 길이와 무게가 특성인 거죠.
반면 비지도 학습 알고리즘은 타깃 없이 입력 데이터만 사용합니다. 이런 종류의 알고리즘은 정답을 사용하지 않으므로 무언가를 맞힐 수가 없습니다.
대신 데이터를 잘 파악하거나 변형하는 데 도움을 줍니다.
p.68
도미와 빙어의 데이터와 타깃을 주고 훈련한 다음, 같은 데이터로 테스트한다면 모두 맞히는 것이 당연합니다. 연습 문제와 시험 문제가 달라야 올바르게 학생의 능력을 평가할 수 있듯이 머신러닝 알고리즘의 성능을 제대로 평가하려면 훈련 데이터와 평가에 사용할 데이터가 각각 달라야 합니다.
이렇게 하는 가장 간단한 방법은 평가를 위해 또 다른 데이터를 준비하거나 이미 준비된 데이터 중에서 일부를 떼어 내어 활용하는 것입니다. 일반적으로 후자의 경우가 많습니다. 평가에 사용하는 데이터를 테스트 세트, 훈련에 사용되는 데이터를 훈련 세트라고 부릅니다.
p.73
상식적으로 훈련하는 데이터와 테스트하는 데이터에는 도미와 빙어가 골고루 섞여 있어야 합니다.
일반적으로 훈련 세트와 테스트 세트에 샘플이 골고루 섞여 있지 않으면 샘플링이 한쪽으로 치우쳤다는 의미로 샘플링 편향이라고 부릅니다.

p.105
샘플의 두 특성인 길이와 무게의 스케일이 다르기 때문입니다. 길이보다 무게의 크기에 따라 예측값이 좌지우지됩니다. 대부분의 머신러닝 알고리즘은 특성의 스케일이 다르면 잘 작동하지 않습니다.
이를 위해 특성을 표준점수로 변환했습니다.

사실 특성의 스케일을 조정하는 방법은 표준점수 말고도 더 있습니다. 하지만 대부분의 경우 표준점수로 충분합니다. 또 가장 널리 사용하는 방법입니다.
데이터를 전처리할 때 주의할 점은 훈련 세트를 변환한 방식 그대로 테스트 세트를 변환해야 한다는 것입니다. 그렇지 않으면 특성값이 엉뚱하게 변환될 것이고 훈련 세트로 훈련한 모델이 제대로 동작하지 않을 것입니다.

- y축은 조금만 이동해도 꽤 먼 거리가 된다.
- x축은 꽤 길게 이동해도 먼 거리가 아니게 된다.
- 트리기반 알고리즘은 거리에 영향을 받지 않는다. 이 외에 대부분의 모델들은 거리에 영향을 받기 때문에 데이터 전처리가 필요하다.
p.114
"농어 무게를 재측정해야 한다는데, 다른 데이터는 정상이라니까 이걸로 무게를 예측할 수 있을까?"
"무언가 고르는 문제가 아니고 무게를 예측해야 하는군요? 무게는 어떤 숫자도 될 수 있겠네요."
"맞아, 인터넷에서 검색해 보니 이런 문제를 회귀라고 하던데. 지금 농어의 길이, 높이, 두께를 측정한 데이터가 있어. 이걸 가지고 예측할 수 있지 않을까?"
k-최근접 이웃 회귀
지도 학습 알고리즘은 크게 분류와 회귀로 나뉩니다. 회귀는 클래스 중 하나로 분류하는 것이 아니라 임의의 어떤 숫자를 예측하는 문제입니다.
예를 들면 내년도 경제 성장률을 예측하거나 배달이 도착할 시간을 예측하는 것이 회귀 문제입니다.
또 여기에서 주어진 문제처럼 농어의 무게를 예측하는 것도 회귀가 됩니다. 회귀는 정해진 클래스가 없고 임의의 수치를 출력합니다.
샘플 X과 이웃한 샘플의 타깃값이 각각 100, 80, 60이고 이를 평균하면 샘플 X의 예측 타깃값은 80이 됩니다.
p.143
선형 회귀 모델은 k-최근접 이웃 회귀와 다르게 훈련 세트를 벗어난 범위의 데이터도 잘 예측했습니다.
다항 회귀라는 것도 있음
p.200
점진적인 학습
훈련 데이터가 한 번에 준비되는 것이 아니라 조금씩 전달된다는 것입니다.
도착하는 대로 생선을 판매해야 하므로 데이터가 쌓을 때까지 무작정 기다릴 수도 없습니다. 그렇다면 기존의 훈련 데이터에 새로운 데이터를 추가하여 모델을 매일매일 다시 훈련하면 어떨까요?
한 가지 단점은 시간이 지날수록 데이터가 늘어나는 것입니다. 몇 달이 지나면 모델을 훈련하기 위해 서버를 늘려야 됩니다. 이는 지속 가능한 방법은 아닌 것 같습니다.
또 다른 방법은 새로운 데이터를 추가할 때 이전 데이터를 버림으로써 훈련 데이터 크기를 일정하게 유지하는 것입니다. 이렇게 하면 데이터셋의 크기가 너무 커지지 않을 수 있습니다.
하지만 데이터를 버릴 때 다른 데이터에 없는 중요한 생선 데이터가 포함되어 있다면 큰일입니다. 앞으로 모델이 그 생선을 제대로 예측하지 못할 테니까요.
앞서 훈련한 모델을 버리지 않고 새로운 데이터에 대해서만 조금씩 더 훈련할 수 없을까요?
이런 식의 훈련 방식을 점진적 학습 또는 온라인 학습이라고 부릅니다.
대표적인 점진적 학습 알고리즘은 확률적 경사 하강법입니다.
p.201
이제 확률적이란 말을 이해할 차례입니다. 경사 하강법으로 내려올 때 가장 가파른 길을 찾는 방법은 무엇일까요?
훈련 세트를 사용해 모델을 훈련하기 때문에 경사 하강법도 당연히 훈련 세트를 사용하여 가장 가파른 길을 찾을 것입니다. 그런데 전체 샘플을 사용하지 않고 딱 하나의 샘플을 훈련 세트에서 랜덤하게 골라 가장 가파른 길을 찾습니다.
이처럼 훈련 세트에서 랜덤하게 하나의 샘플을 고르는 것이 바로 확률적 경사 하강법입니다.
p.227
와! 훈련 세트에 대한 점수가 엄청 높군요. 거의 모두 맞춘 것 같습니다. 테스트 세트의 성능은 그에 비해 조금 낮습니다.
과대적합된 모델이라고 볼 수 있겠네요.
p.229
결정 트리에서 예측하는 방법은 간단합니다. 리프 노드에서 가장 많은 클래스가 예측 클래스가 됩니다.
앞에서 보았던 k-최근접 이웃과 매우 비슷하네요. 만약 이 결정 트리의 성장을 여기서 멈춘다면 왼쪽 노드에 도달한 샘플과 오른쪽 노드에 도달한 샘플은 모두 양성 클래스로 예측됩니다.
두 노드 모두 야성 클래스의 개수가 많기 때문이죠.
p.235
가을 신상품으로 준비한 캔 와인은 실수로 와인의 종류(레드 와인/화이트 와인)가 캔에 인쇄되지 않았습니다.
혼공머신은 알코올 도수, 당도, pH 데이터를 기준으로 화이트 와인을 골라내는 이진 분류 로지스틱 회귀 모델을 훈련했습니다.
p.239
결정 트리는 예/아니오에 대한 질문을 이어나가면서 정답을 찾아 학습하는 알고리즘입니다.
비교적 예측 과정을 이해하기 쉽고 성능도 뛰어납니다.
불순도는 결정 트리가 최적의 질문을 찾기 위한 기준입니다.
'독서' 카테고리의 다른 글
| 로지컬 씽킹 (0) | 2026.07.31 |
|---|---|
| 이기는 결정 (0) | 2026.06.17 |
| 해빗 (0) | 2026.04.27 |
| 순서 파괴 (1) | 2026.04.14 |
| 일 잘하는 팀장의 대화력 원온원 (0) | 2026.03.14 |
| 이세돌, 인생의 수읽기 (0) | 2026.03.07 |
| 리더의 말그릇 (0) | 2026.02.16 |
| 거인이 보낸 편지 (1) | 2026.02.07 |