4.1 판별 함수 - 두 개의 클래스
판별 함수는 입력 벡터 x 를 K 개의 클래스들 C_k 중 하나에 배정하는 함수다.
결정 표면이 초평면인 선형 판별 linear discriminant 에 대해 관찰, 먼저 클래스가 두 개인 경우
4.1.1 두 개의 클래스
선형 판별 함수를 가장 단순하게 표현하면 입력 벡터들의 선형 함수가 된다.
y(x) = wx + w_0
w 는 가중 벡터, weight vector 라 하며, w_0 는 편향, bias 이다. 편향의 음의 값은 임계값 threshold 라고 불리기도 한다.
y(x) >= 0 인 경우 C_1 에 아닌 경우 C_2 에 배정, 결정 경계는 y(x) = 0 에 해당하며, D 차원 입력 공간상의 ( D - 1 ) 차원 초평면에 해당한다.
결정 표면상에 존재하는 두 개의 점을 고려, y(x_A) = y(x_B) = 0 이기 때문에 w(x_A - x_B) = 0 이며, 벡터 w 는 결정 표면상의 모든 벡터들과 직교하게 되므로 w 는 결정 표면의 모양을 결정한다.
비슷하게 x 가 결정 표면상의 점이라면 y(x) = 0 이며, 따라서 원점으로부터 결정 표면까지의 수직 최단거리는 다음과 같다.
분자 : 결정 함수의 절대값 -> 초평면에서 얼마나 떨어졌는지
분모 : 벡터 w 의 크기 -> 기울기의 정규화
y(x) 의 값이 크다는 건 결정 경계에서 멀리 떨어진 점이라는 의미
따라서 편향 매개변수 w_0 가 결정 표면의 위치를 결정한다는 것을 알 수 있다.
또한, y(x) 의 절대값은 점 x 와 결정 표면 사이의 수직 거리 r 에 해당함을 알 수 있다.
임의의 점 x 와 x 의 결정 표면에 대한 수직 투영 x⊥ 을 고려
수직 거리 r 은 다음과 같이 계산된다.
분자 : 점이 결정 경계에서 얼마나 떨어졌는지,
분모 : 법선 벡터의 크기 -> 정규화 용도
투영 projection 의 개념
점 x 를 결정 경계로 투영했을 때
import matplotlib.pyplot as plt
import numpy as np
# 선형 결정 경계의 법선 벡터와 편향 설정
w = np.array([1, 1])
w0 = -2
# 결정 경계: w^T x + w0 = 0 → x1 + x2 = 2
x_vals = np.linspace(0, 4, 100)
y_vals = 2 - x_vals # x1 + x2 = 2
# 임의의 점 x
x = np.array([3, 2])
# 결정 경계까지의 수직 거리 계산
w_norm = w / np.linalg.norm(w)
r = (np.dot(w, x) + w0) / np.linalg.norm(w)
x_proj = x - r * w_norm # 투영점 x⊥
# 그래프 그리기
plt.figure(figsize=(6, 6))
plt.rcParams['font.family'] ='Malgun Gothic'
plt.rcParams['axes.unicode_minus'] =False
plt.plot(x_vals, y_vals, 'k--', label='결정 경계 y(x) = 0')
plt.quiver(0, 0, w[0], w[1], angles='xy', scale_units='xy', scale=1, color='gray', label='법선 벡터 w')
plt.plot(x[0], x[1], 'ro', label='점 x')
plt.plot(x_proj[0], x_proj[1], 'bo', label='투영점 x⊥')
plt.plot([x[0], x_proj[0]], [x[1], x_proj[1]], 'r:', label='수직 투영')
plt.xlim(0, 4)
plt.ylim(0, 4)
plt.xlabel('x₁')
plt.ylabel('x₂')
plt.title('결정 경계와 수직 거리 및 투영')
plt.legend()
plt.grid(True)
plt.gca().set_aspect('equal')
plt.tight_layout()
plt.show()