결정이론이란?
새로운 값 x가 주어졌을 때 확률모델 p(x, t)에 기반해 최적의 결정(예를 들어 분류)을 내리는 것
- 추론단계: 결합확률분포 p(x, Ck)를 구하는 것(p(Ck|x)를 직접 구하는 경우도 있음). 이것만 있으면 모든 것을 할 수 있음.
- 결정단계: 상황에 대한 확률이 주어졌을 때 어떻게 최적의 결정을 내릴 것인지? 추론단계를 거쳤다면 결정단계는 매우 쉬움.
예제: X-Ray의 이미지로 암 판별
- x: X-Ray 이미지
- C1: 암인 경우
- C2: 암이 아닌 경우
- p(Ck|x)의 값을 알기 원함
- 직관적으로 볼 때 p(Ck|x)를 최대화시키는 k를 구하는 것이 좋은 결정
기대손실 최소화 (Minimizing the Expected Loss)
모든 결정이 동일한 리스크를 갖는 것은 아님.
- 암이 아닌데 암인 것으로 진단
- 암이 맞는데 암이 아닌 것으로 진단
손실행렬 (loss matrix)
- Lkj: Ck에 속하는 x를 Cj로 분류할 때 발생하는 손실(또는 비용)
데이터에 대한 모든 지식이 확률분포로 표현되고 있는 것을 기억할 것이며, 한 데이터샘플 x의 실제 클래스를 결정론적으로 알고 있는 것이 아니라 그것의 확률만을 알 수 있다고 가정합니다.
즉, 우리가 관찰할 수 있는 샘플(예를 들어, 암을 가진 환자의 X-Ray 이미지)은 확률분포 p(x, Ck)를 통해서 생성된 것이라고 간주합니다.
따라서, 손실행렬 L이 주어졌을 때, 다음과 같은 기대손실을 최소화하는 것을 목표로 할 수 있습니다.
선형회귀 (Linear Regression) 실습
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
rng = np.random.RandomState(1)
x = 10 * rng.rand(50)
y = 2 * x - 5 + rng.randn(50)
plt.scatter(x, y);
Scikit-Learn의 LinearRegression estimator를 사용해서 위 데이터를 가장 잘 표현하는 직선을 찾을 수 있습니다.
x.shape
(50,)
x[:, np.newaxis].shape
(50, 1)
from sklearn.linear_model import LinearRegression
model = LinearRegression(fit_intercept=True)
model.fit(x[:, np.newaxis], y)
xfit = np.linspace(0, 10, 1000)
yfit = model.predict(xfit[:, np.newaxis])
plt.scatter(x, y)
plt.plot(xfit, yfit);
모델 학습이 끝난 후 학습된 파라미터들은 model."파라미터이름"_ 의 형태로 저장되며, 기울기와 y절편은 아래와 같이 출력할 수 있습니다.
print("Model slope: ", model.coef_[0])
print("Model intercept:", model.intercept_)
Model slope: 2.0272088103606953
Model intercept: -4.998577085553204
LinearRegression estimator는 위의 예제와 같은 1차원 입력뿐만 아니라 다차원 입력을 사용한 선형모델을 다룰 수 있다. 다차원 선형모델은 다음과 같은 형태를 가집니다.
기하학적으로 이것은 hyper-plane으로 데이터를 표현하는 것이라고 말할 수 있습니다.
rng = np.random.RandomState(1)
rng.rand(100, 3).shape
X = 10 * rng.rand(100, 3)
np.dot(X, [1.5, -2., 1.]).shape
rng = np.random.RandomState(1)
X = 10 * rng.rand(100, 3)
y = 0.5 + np.dot(X, [1.5, -2., 1.])
model.fit(X, y)
print(model.intercept_)
print(model.coef_)
𝑦값들은 랜덤하게 생성된 3차원의 𝑥값과 계수들([1.5, -2., 1.])을 곱함으로써 생성되었는데, linear regression을 통해서 이 계수들을 계산해 낼 수 있다는 것을 알 수 있습니다.
'BOOTCAMP > 프로그래머스 인공지능 데브코스' 카테고리의 다른 글
[7주차 - Day4] ML_basics - Probability Distributions (Part 2) (0) | 2023.06.22 |
---|---|
[7주차 - Day3] ML_basics - Probability Distributions (Part 1) (0) | 2023.06.21 |
[7주차-Day1] ML_basics - Probability (0) | 2023.06.21 |
[6주차 - Day5] k-Nearest Neighbor classifier 실습 (0) | 2023.06.20 |
보이스 피싱 AI 구별법(NLP) (1) | 2023.06.08 |