4 · 선형 분류 모델
분류 모델의 목표는 입력 데이터들이 주어졌을 때, 그에 해당하는 이산 클래스 변수를 예측하는 것이다. 선형 분류 모델에서는 결정 표면들이 입력 데이터에 대해 선형 함수를 사용한다.

4.1 판별 함수
- 분류 문제에서 입력값들은
개의 이산 클래스 , 중 하나에 할당되며, 입력 공간은 결정 경계decision boundary 또는 결정 표면decision surface이라 불리는 경계를 바탕으로 여러 결정 구역decision region으로 나뉜다. 클래스들이 선형 결정 표면들로 정확히 나뉘는 데이터 집합을 선형 분리 가능linearly separable한 집합이라 한다. - 실수 표적값을 쓰는 회귀와 달리 분류에서는 원 핫 인코딩one-hot encoding된 표적값 벡터를 사용한다.
개의 클래스가 있고 에 속하면 는 차원 벡터로 , 나머지는 이다. - 판별 함수discriminant function는 입력 벡터
를 개의 클래스 중 하나에 배정하는 함수이며, 결정 표면이 초평면인 경우를 선형 판별linear discriminant이라 한다.
4.1.1 두 개의 클래스
- 선형 판별 함수는 입력 벡터의 선형 함수다.

그림 4.1 · 이차원 선형 판별 함수의 기하학. 적색 결정 표면은
는 결정 표면의 방향을, 은 위치를 결정한다. 가변수 을 도입해 , 로 두면 로 간단해지고, 결정 표면은 차원 확장 공간에서 원점을 지나는 차원 초평면이 된다.
4.1.2 다중 클래스
인 경우, 클래스 에 포함되는 점과 그렇지 않은 점을 구분하는 이진 분류기를 개 쓰는 일대다one-versus-the-rest 분류기, 또는 모든 클래스 쌍에 대해 개의 이진 분류기를 쓰는 일대일one-versus-one 분류기를 생각할 수 있다. 둘 다 불확실한 영역이 생긴다.


그림 4.2 · 이진 분류기 집합으로
개의 선형 함수로 이루어진 하나의 클래스 판별 함수를 쓰면 이 문제를 피할 수 있다.
이런 판별의 결정 영역은 언제나 단일하게 연결되어 있으며 볼록하다.

그림 4.3 · 다중 클래스 선형 판별의 결정 경계. 결정 영역은 단일하게 연결되어 있으며 볼록하다.
4.1.3 분류를 위한 최소 제곱법
개 클래스 모델을 로 쓸 수 있다( 의 번째 열은 ). 번째 행이 인 , 인 를 정의하면 제곱합 오류는
에 대한 미분을 으로 두고 정리하면 닫힌 형태의 해와 판별 함수를 얻는다.
- 최소 제곱법은 해를 정확히 닫힌 형태로 구할 수 있으나, 이상값에 강건하지 못하다. 또한 가우시안 조건부 분포 가정하의 최대 가능도와 연관되어 있어, 표적값이 명확히 가우시안이 아니면 제대로 작동하지 않는다.



그림 4.4 · (왼쪽) 두 클래스에 대한 최소 제곱 결정 경계(보라색). (가운데) 이상값이 추가되면 결정 경계가 크게 흔들린다. (오른쪽) 세 클래스에서 녹색 클래스가 대부분 오분류된다.
4.1.4 피셔의 선형 판별
- 선형 분류는 차원 감소로도 해석된다.
차원 를 로 일차원에 투영할 때, 를 잘 고르면 클래스 간 분리를 최대화할 수 있다. 두 클래스의 평균은
- 투영 후 평균 차이
만 키우면 의 크기로 임의로 값을 키울 수 있으므로, 피셔는 클래스 간 분리는 최대화하면서 각 클래스 내 분산은 최소화하는 기준을 제안했다. 클래스 내 분산 에 대해 피셔 기준은
여기서 클래스 간between-class 공분산
를 미분해 정리하면 피셔의 선형 판별Fisher's linear discriminant을 얻는다.


그림 4.6 · (왼쪽) 클래스 평균을 잇는 선에 투영하면 중복이 크다. (오른쪽) 피셔 판별 투영은 클래스 분리가 개선된다.
실습 · 피셔의 선형 판별
클래스 내 산포가 평균 차이 방향으로 늘어나 있어, 평균을 잇는 방향에 투영하면 두 클래스가 겹칩니다.
import numpy as np
rng = np.random.default_rng(7)
N1 = N2 = 100
cov = np.array([[3.0, 0.0], [0.0, 0.25]]) # 한 방향으로 길쭉한 산포
th = np.deg2rad(-35); R = np.array([[np.cos(th),-np.sin(th)],[np.sin(th),np.cos(th)]])
cov = R @ cov @ R.T
X1 = rng.multivariate_normal([0, 0], cov, N1)
X2 = rng.multivariate_normal([2.2, 0], cov, N2)
m1, m2 = X1.mean(0), X2.mean(0)
Sw = (X1-m1).T@(X1-m1) + (X2-m2).T@(X2-m2) # 클래스 내 공분산
w_fisher = np.linalg.solve(Sw, m2-m1); w_fisher /= np.linalg.norm(w_fisher)
w_mean = (m2-m1)/np.linalg.norm(m2-m1) # 평균 연결 방향
def J(w):
p1, p2 = X1@w, X2@w
return (p1.mean()-p2.mean())**2 / (p1.var()+p2.var())
print(f"평균 연결 방향 J = {J(w_mean):.2f}")
print(f"피셔 판별 방향 J = {J(w_fisher):.2f} (더 큼 = 더 잘 분리)")4.1.5 퍼셉트론
- 퍼셉트론perceptron은 입력을 고정된 비선형 변환으로 특징 벡터
로 바꾼 뒤 일반화된 선형 모델 을 만든다. 비선형 활성화 함수nonlinear activation function는 , 이며, 표적값은 을 쓴다. - 퍼셉트론 기준perceptron criterion
( : 오분류 집합)에 확률적 경사 하강법을 적용하면
선형 분리 가능한 데이터에 대해서는 유한 번의 갱신으로 수렴함이 보장된다(퍼셉트론 수렴 정리).
실습 · 퍼셉트론 학습
선형 분리 가능한 두 클래스에 대해 오분류된 표본마다
import numpy as np
rng = np.random.default_rng(4)
Np = 40
X = np.vstack([rng.normal([-1.4,-1.4], 0.85, (Np,2)),
rng.normal([ 1.4, 1.4], 0.85, (Np,2))])
t = np.concatenate([-np.ones(Np), np.ones(Np)]) # 표적값 t ∈ {-1, +1}
Phi = np.column_stack([np.ones(len(X)), X]) # 편향 + 특징 2개
w = np.zeros(3); eta = 0.1
for epoch in range(30):
mis = 0
for n in rng.permutation(len(X)):
pred = 1.0 if Phi[n]@w >= 0 else -1.0
if pred != t[n]:
w = w + eta*Phi[n]*t[n]; mis += 1 # w ← w + η φ_n t_n
print(f"에폭 {epoch+1}: 오분류 {mis}개")
if mis == 0: break
print("최종 w =", np.round(w, 3).tolist())4.2 확률적 생성 모델
- 생성적 접근은 클래스별 조건부 밀도
와 클래스 사전 분포 를 모델링한 뒤 베이즈 정리로 사후 확률 를 계산한다. 두 클래스의 경우 사후 확률은 로지스틱 시그모이드logistic sigmoid 로 표현된다.
- 시그모이드는 대칭성
를 만족하며, 그 역함수를 로짓logit 함수 라 한다. 인 경우는 시그모이드를 일반화한 소프트맥스 함수softmax function를 쓴다.
4.2.1 연속 입력
- 클래스별 조건부 밀도를 가우시안으로 두고 모든 클래스가 같은 공분산
를 공유한다고 가정하면, 두 클래스의 사후 확률은 에 대한 선형 함수의 시그모이드가 된다.
공분산 공유 가정으로 가우시안 지수부의


그림 4.10 · (왼쪽) 두 클래스의 조건부 밀도. (오른쪽) 사후 확률
4.2.2 최대 가능도 해
- 클래스 조건부 밀도의 함수 형태를 정하면 최대 가능도로 매개변수와 사전 확률을 추정할 수 있다. 두 클래스·공유 공분산·
가정하에서 가능도는
- 각 매개변수에 대해 미분을
으로 두면 직관적인 최대 가능도 추정값을 얻는다. 사전 확률은 클래스 비율, 평균은 각 클래스 표본 평균, 공유 공분산은 클래스별 공분산의 가중 평균이다.
실습 · 생성적 가우시안 분류기 (공유 공분산)
두 클래스의 평균·공유 공분산을 최대 가능도로 추정한 뒤
import numpy as np
def sig(a): return 1/(1+np.exp(-a))
rng = np.random.default_rng(3)
Nc = 80
C1 = rng.multivariate_normal([ 1, 1], [[1,0.3],[0.3,1]], Nc)
C2 = rng.multivariate_normal([-1, -1.5], [[1,0.3],[0.3,1]], Nc)
mu1, mu2 = C1.mean(0), C2.mean(0)
pi = Nc/(2*Nc)
S1 = (C1-mu1).T@(C1-mu1)/Nc; S2 = (C2-mu2).T@(C2-mu2)/Nc
S = pi*S1 + (1-pi)*S2 # 공유 공분산
Sinv = np.linalg.inv(S)
w = Sinv@(mu1-mu2)
w0 = -0.5*mu1@Sinv@mu1 + 0.5*mu2@Sinv@mu2 + np.log(pi/(1-pi))
print("w =", np.round(w, 3).tolist(), " w0 =", round(float(w0), 3))
for x in [mu1, mu2, (mu1+mu2)/2]:
print(f" x={np.round(x,2).tolist()}: p(C1|x)={sig(w@x+w0):.3f}")
Xall = np.vstack([C1, C2]); tall = np.concatenate([np.ones(Nc), np.zeros(Nc)])
acc = np.mean((sig(Xall@w + w0) > 0.5) == tall)
print("분류 정확도 =", f"{acc:.1%}")4.3 확률적 판별 모델
- 판별적 접근은 일반화된 선형 모델의 함수 형태를 명시적으로 쓰고 최대 가능도로 매개변수를 직접 구한다. 생성적 모델링과 달리 조절할 매개변수가 대체로 더 적고, 클래스 조건부 밀도 가정이 실제 분포와 어긋날 때 더 나은 성능을 보인다. 이 해를 구하는 효율적 알고리즘이 반복 재가중 최소 제곱법iterative reweighted least squares; IRLS이다.


그림 4.12 · 비선형 기저 함수의 역할. (왼쪽) 원 입력 공간
4.3.1 고정된 기저 함수
- 앞의 알고리즘들은 원 입력
뿐 아니라 기저 함수 벡터 에 대해서도 그대로 적용된다. 결정 경계는 특징 공간 에서 선형이지만 공간에서는 비선형일 수 있다. 적절한 비선형 변환은 클래스 조건부 밀도가 크게 겹치는 경우에도 사후 확률 모델링을 쉽게 만든다.
4.3.2 로지스틱 회귀
- 두 클래스 문제에서
의 사후 확률을 특징 벡터의 선형 함수에 대한 시그모이드로 쓴 모델을 로지스틱 회귀logistic regression라 한다.
- 데이터
( )에 대한 가능도 의 음의 로그값이 교차 엔트로피cross-entropy 오류 함수다.
- 시그모이드의 미분
를 이용하면 기울기가 회귀와 같은 간단한 형태가 된다.
4.3.3 반복 재가중 최소 제곱법
- 로지스틱 회귀는 시그모이드의 비선형성 때문에 해가 닫힌 형태가 아니지만, 오류 함수가 볼록해 유일한 최솟값을 가진다. 뉴턴–라프슨Newton–Raphson 갱신
을 적용한다. 교차 엔트로피에 대한 기울기와 헤시안은
- 헤시안이
을 통해 에 종속되므로 갱신을 반복해야 한다. 갱신식은 가중 최소 제곱의 정규 방정식 형태를 띤다.
매 반복마다 새
실습 · 로지스틱 회귀 (IRLS/뉴턴–라프슨)
import numpy as np
def sig(a): return 1/(1+np.exp(-a))
rng = np.random.default_rng(2)
Na = 60
X = np.vstack([rng.normal([-1,-1], 1.3, (Na,2)),
rng.normal([1.2,1.2], 1.3, (Na,2))])
t = np.concatenate([np.zeros(Na), np.ones(Na)])
Phi = np.column_stack([np.ones(len(X)), X]) # 편향 + 특징 2개
w = np.zeros(3)
for it in range(8):
y = sig(Phi@w); R = y*(1-y) # R_nn = y_n(1-y_n)
H = (Phi*R[:,None]).T@Phi + 1e-8*np.eye(3) # 헤시안 ΦᵀRΦ
w_new = w - np.linalg.solve(H, Phi.T@(y-t)) # 뉴턴–라프슨 갱신
step = np.linalg.norm(w_new-w); w = w_new
ce = -np.sum(t*np.log(y+1e-12) + (1-t)*np.log(1-y+1e-12))
print(f"반복 {it+1}: 교차엔트로피={ce:7.3f} |Δw|={step:.2e}")
if step < 1e-6: break
print("수렴 w =", np.round(w,3).tolist(),
" 정확도 =", f"{np.mean((sig(Phi@w)>0.5)==t):.1%}")4.4 라플라스 근사
- 라플라스 근사Laplace approximation는 연속 변수 집합에 대한 확률 밀도의 가우시안 근사를 찾는 방법이다.
라플라스 근사법
단일 연속 변수
최빈값
을 구한다: . 주변에서 를 테일러 전개한다: , . 이 지역적 최댓값이라 일차항이 사라지고, 지수를 취하면 .정규화하면
.


그림 4.14 · 분포
차원 로 확장하면 임계점 에서 전개해 다변량 가우시안 근사를 얻는다.
중심 극한 정리에 따라 데이터가 많을수록 사후 분포가 가우시안에 가까워지므로, 데이터가 많을 때 라플라스 근사가 더 유용하다.
실습 · 라플라스 근사 (그림 4.14 재현)
import numpy as np
def sig(a): return 1/(1+np.exp(-a))
def lnf(z): return -0.5*z*z + np.log(sig(20*z+4)) # ln f(z)
zs = np.linspace(-3, 3, 60001); dz = zs[1]-zs[0]
z0 = zs[np.argmax(lnf(zs))] # 최빈값
u = 20*z0 + 4; s = sig(u)
A = 1 + 400*s*(1-s) # 곡률 A = -d²/dz² ln f
print(f"최빈값 z0 = {z0:.4f}, 곡률 A = {A:.3f}, 근사 분산 A⁻¹ = {1/A:.5f}")
fz = np.exp(lnf(zs))
Z_num = float(np.sum(fz)*dz) # 수치 적분
Z_lap = float(np.exp(lnf(z0)) * np.sqrt(2*np.pi/A)) # 라플라스 근사
print(f"Z(수치 적분) = {Z_num:.4f} Z(라플라스) = {Z_lap:.4f}")4.4.1 모델 비교와 베이지안 정보 기준
- 라플라스 근사로 정규화 상수
를 얻는다. 이를 모델 증거 에 적용하면
첫 항은 최적 매개변수의 로그 가능도, 나머지는 모델 복잡도에 벌점을 주는 오컴 인자Occam factor다.
- 사전 분포가 넓게 퍼지고 헤시안이 최대 계수라 가정하면 위 식은 다음으로 근사되며, 이를 베이지안 정보 기준Bayesian information criterion; BIC 또는 슈바르츠 기준Schwarz criterion이라 한다(
: 데이터 수, : 매개변수 수).
4.5 베이지안 로지스틱 회귀
4.5.1 사후 분포 계산
- 베이지안 로지스틱 회귀의 사후 분포는 가능도가 각 데이터 포인트의 시그모이드를 곱한 형태라 정확한 계산이 어렵다. 라플라스 근사로 비교적 쉽게 다룬다. 가우시안 사전 분포
을 두면 로그 사후 분포는
- 이를 최대화해
를 구하고, 공분산은 음의 로그 사후 분포의 헤시안의 역으로 얻는다.
따라서 사후 분포의 가우시안 근사는
4.5.2 예측 분포
- 새 특징 벡터
에 대한 예측 분포는 에 대해 주변화해 구한다. 가 가우시안 을 따르므로
이 일차원 적분은 사후 분포의 불확실성을 반영해, 결정 경계에서 멀어질수록 예측이 더 완만해진다.
연습문제
문제 4.1
로지스틱 시그모이드 함수가
풀이
대칭성 — 정의
역함수 —
이것이 로짓 함수다.
문제 4.2
데이터 집합
풀이
정의 — 선형 분리 가능이란 모든
볼록 집합이 교차하면 분리 불가능 — 두 볼록 집합이 공통점
(각 항이 양수이고
같은 값이 양수이면서 음수일 수는 없으므로 모순이다. 따라서 볼록 집합이 교차하면 선형 분리가 불가능하다.
대우 — 위 명제의 대우가 곧 "선형 분리 가능하면 두 볼록 집합은 교차하지 않는다"이므로 함께 증명된다.
문제 4.3
식 (4.15)의 제곱합 오류 최소화를 고려하자. 훈련 집합의 모든 표적값 벡터가 선형 제약
풀이
최소 제곱 해는
여기서
즉 표적값에 걸린 선형 제약이 예측값에서도 그대로 성립한다.
문제 4.4
사전 클래스 확률
풀이
데이터
제약
각 클래스의 사전 확률 최대 가능도 추정값은 그 클래스에 속한 데이터의 비율이다.