
- y는 예측값
- n은 특성 수
- xi는 i번째 특성
- 세타는 모델 파라미터. 만약 평가 지표가 rmse라면 이를 최소화 시키는 값을 찾아야함.
- 모델을 훈련시킨다 == 모델이 훈련세트에 가장 적합한 모델 파라미터를 설정하는것.
정규 방정식 normal quation
- 비용함수를 최소화하는 세타 값을 찾기 위한 수학적인 방법
- 세타는 비용함수를 최소화 하는 값
- y는 y(1)부터 y(m)까지 포함하는 타킷 벡터
- 계산 복잡도는 일반적으로 O(n^2.4) ~ O(n^4)이다.




import numpy as np
from sklearn.preprocessing import add_dummy_feature
import matplotlib.pyplot as plt
# --데이터 생성
np.random.seed(42)
samples = 100
X = 2 * np.random.rand( samples , 1) # 열 벡터 생성
y = 4 + 3*X + np.random.rand( samples , 1 ) # 데이터를 생성하기 위한 함수. y = 4 + 3x + 가우스 잡음
# --정규 방정식을 이용하여 세타를 계산... 넘파이의 선형대수 모듈 np.linalg를 사용
X_b = add_dummy_feature( X )
theta_best = np.linalg.inv(X_b.T @ X_b ) @ X_b.T @ y
print("절편(intercept, 𝜃0) , 기울기( slope , 𝜃1 ) ")
print(f'기대한 세타 0값은 4 , 세타 1값은 3입니다. 하지만 각각 잡음으로 인하여 {theta_best[0]} 과 {theta_best[1]}을 얻었습니다.')
# ---세타 햇을 사용하여 예측 수행
X_pre = np.array( [ [0] , [2] ] )
X_b = add_dummy_feature( X_pre )
y_pre = X_b @ theta_best
print( f'예측하여 얻은 값은 각각 {y_pre[0]} 과 {y_pre[1]}입니다.' )
# --plot하기
plt.plot( X_pre , y_pre , "r-" , label="predict")
plt.plot( X , y , "b." )
[ ...]
plt.show()
from sklearn.linear_model import LinearRegression
lin = LinearRegression()
lin.fit( X , y)
print(f'특성의 편향은 {lin.intercept_}이며, 가중치는 {lin.coef_}입니다.')
y_pre = lin.predict( X_pre )
print( f'예측하여 얻은 값은 각각 {y_pre[0]} 과 {y_pre[1]}입니다.' )
경사하강법 Gradient Descent ( GD )
- 최적의 해법을 찾는 최적화 알고리즘
- 파라미터를 반복적으로 조정하며, 비용함수를 최소화한다.
- 학습률 인자가 중요. 너무 크거나 작으면 안된다.
- 전역 최소값에 도달 못하고 지역 최소값에 수렴하는 경우 존재.
- global minimum , local minimum
확률적 경사하강법 Stochastic GD
- 배치 경사하강법은 전체 훈련 세트를 사용하니, 세트의 크기가 클수록 속도가 느리다.
- 이를 개선하기 위해, 전체 데이터를 계산하는 것이 아닌, 일부 데이터만 이용한다.
- 그래서, 손실함수와 1차 미분값을 근사적으로 계산함
- n개의 샘플을 뽑는 방법은 미니배치 SGD라고 한다.
'코딩 및 기타' 카테고리의 다른 글
| 수학 메모 (6) | 2024.10.23 |
|---|---|
| 피자 메시지를 생성하는 클래스( orderId , shopId , pizzaName , customerInfo ) (0) | 2024.10.15 |
| 이진 분류(SGDClassifer) , 다중 분류 ,성능 측정: 교차검증 k-fold && 오차행렬, 정밀도 및 재현율 , 다중 레이블 분류 classifier chain (0) | 2024.10.13 |
| RMSE , MAE , describe() , value_counts() , 데이터 섞고 나누는 함수 (0) | 2024.10.13 |
| drift 및 MLM 블로그 A Gentle Introduction to Transfer Learning for Deep Learning (8) | 2024.10.09 |