선형회귀
입력 변수(또는 특성)와 출력 변수(또는 타깃) 간의 선형적인 관계를 가정
각 Feature들에 가중치(Weight)를 곱하고 편향(bias)를 더해 예측 결과를 출력
모델 - 추론하는 과정은 같음 / 최적화하는 방법만 다른 것 (w를 찾는 과정)
가장 기본적인 선형 회귀 모델
주어진 훈련 데이터를 기반으로 최적의 회귀 계수를 찾는 최소 제곱법(Least Squares)을 사용
각 Feauture에 가중합으로 Y값을 추론
데이터 전처리
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # Train set으로 학습 + 변환
X_test_scaled = scaler.transform(X_test) # Test set : train set으로 학습한 scaler 이용해 변환
weight조회 : 각 feature들에 곱할 가중치들
lr.coef_
→
💡 Coeficient의 부호
추론 : Train dataset에 대한 선형회귀 추정결과 모델을 이용해 추론
pred_train = lr.predict(X_train_scaled)
정답, 모델 추정값 간의 차이를 비교
from sklearn.linear_model import Ridge
가중치의 크기를 제한하여 가중치의 값이 커지지 않도록 함
→ 모델의 복잡도를 낮추고 모든 특성이 예측에 조금씩 기여
모든 특성을 포함하는 모델을 유지하면서 일반화 성능을 개선
손실함수(Loss Function)
손실을 크게 만들어 줌
→ 손실 함수에 가중치의 크기를 나타내는 L2 norm의 제곱을 추가하여 적용
→ 가중치의 크기가 커지는 것을 제한함으로써 모델의 복잡도를 낮추는 역할
→ 노이즈에 민감한 모델을 줄이는 효과
alpha = 1
ridge = Ridge(alpha=alpha, random_state=0) # alpha : 규제강도, default : 1
ridge.fit(X_train_scaled, y_train)
print_metrics_regression(y_train, ridge.predict(X_train_scaled))
print("=========================")
print_metrics_regression(y_test, ridge.predict(X_test_scaled))
from sklearn.linear_model import Lasso
로지스틱 회귀 (LogisticRegression)
0과 1사이의 실수를 반환
시그모이드 함수(sigmoid function)
logistic 함수 시각화
import matplotlib.pyplot as plt
import numpy as np
def logistic_func(X):
return 1 / (1 + np.exp(-X))
X = np.linspace(-10, 10, 1000)
y = logistic_func(X)
plt.figure(figsize=(13, 6))
plt.plot(X, y, color='b', linewidth=2)
plt.axhline(y=0.5, color='r', linestyle=':') # 빨간색 점선 그려주는 것
# plt.axvline(x=5, color='b', linestyle=':')
plt.ylim(-0.15, 1.15)
plt.yticks(np.arange(-0.1,1.2,0.1)) # y축 눈금 설정
# spine : 그래프 박스선
# set_position : 위치를 정해줌 , left - y축, bottom - x축
ax = plt.gca()
ax.spines['left'].set_position("center") # spine 중앙에 위치
ax.spines['bottom'].set_position(('data', 0.0)) # spine 위치를 data=0.0에 맞춤
# ax.spines['bottom'].set_color('blue') # spine 색깔 지정
# 필요없는 spine 지우기
ax.spines['top'].set_visible(False) # 위쪽 spine 안보이게
ax.spines['right'].set_visible(False) # 오른쪽 spine 안보이게
plt.show()
Log loss (로그 손실 함수)
log(모델이 예측한 정답에 대한 확률)
실제 클래스 레이블이 1인 경우 : y=1인 경우의 로그 확률(p)에 음의 로그를 취한 값을 계산
실제 클래스 레이블이 0인 경우 : y=0인 경우의 로그 확률(1-p)에 음의 로그를 취한 값을 계산
손실 값이 낮을수록 모델의 성능이 좋다고 판단
다중분류 또는 이진분류에 따라 log loss를 만드는 공식이 다름
다중분류에 대한 log loss 공식
소프트맥스 활성화 함수와 함께 사용
모델의 예측 확률과 실제 클래스 레이블 간의 차이를 평가
손실 값이 낮을수록 모델의 성능이 좋다고 판단
실제 클래스 레이블과 해당 클래스에 대한 로그 확률의 곱을 모든 클래스에 대해 합산한 값
이진분류 추론 결과에 대한 cross entropy 계산
penalty
: 과적합을 줄이기 위한 규제방식C
: 규제강도(기본값 1) - 작을 수록 규제가 강하다(단순).max_iter
: (기본값 100) - 경사하강법 반복횟수최적화 - 경사하강법
평가 함수와는 다름
모델의 성능을 측정하고 최적화하는 데 사용되는 함수
모델이 예측한 값과 실제 값 사이의 차이를 계산하여 모델의 예측 오차를 나타냄
목적 : 최적화 과정에서 손실 함수를 최소화하는 방향으로 모델의 매개변수를 조정하고 개선하는 것
Classification(분류) - cross entropy
Regression(회귀) - MSE(Mean Squared Error)
다양한 종류의 문제에서 최적의 해법을 찾을 수 있는 일반적인 최적화 알고리즘
손실함수를 최소화하는 파라미터를 찾기위해 반복해서 조정
파라미터 벡터 W에 대해 손실함수의 현재 gradient(기울기) 계산
gradient가 감소하는 방향으로 벡터 W 조정, 0이 될 때 까지 반복
gradient - 양수 : loss와 weight가 비례 관계, loss를 더 작게 하려면 weight가 작아져야 함
gradient - 음수 : loss와 weight가 반비례 관계, loss를 더 작게 하려면 weight가 커져야 함
최적의 매개변수 값을 찾음
파라미터 조정 - 학습률 (Learning rate)