728x90
1.회귀(Regression)
인공지능과 머신러닝에서 입력 변수(독립 변수)와 출력 변수(종속 변수) 간의 관계를 모델링하여 연속적인 값을 예측하는 기법
1-1.선형 회귀(Linear Regression)
입력 변수(독립 변수)와 출력 변수(종속 변수) 간의 선형적인 관계를 모델링하여 값을 예측하는 통계적 방법
주어진 데이터가 직선으로 표현될 수 있다고 가정하며, 이를 기반으로 새로운 입력 데이터에 대해 종속 변수를 예측한다.
- : 예측 값(종속 변수)
- x: 입력 값(독립 변수)
- w: 회귀 계수(기울기)
- b: 절편(바이어스)
import numpy as np
from sklearn.linear_model import LinearRegression
# 데이터 생성
X = np.array([[1], [2], [3], [4], [5]]) # 독립 변수
y = np.array([2, 4, 6, 8, 10]) # 종속 변수
# 모델 생성 및 학습
model = LinearRegression()
model.fit(X, y)
# 회귀 계수 출력
print(f"회귀 계수 (w): {model.coef_[0]}")
print(f"절편 (b): {model.intercept_}")
# 예측
new_data = np.array([[6]])
predicted = model.predict(new_data)
print(f"예측 값: {predicted[0]}")
#결과
회귀 계수 (w): 2.0
절편 (b): 0.0
예측 값: 12.0
1-2.다중 선형 회귀(Multiple Linear Regression)
여러 독립 변수들이 종속 변수에 미치는 영향을 동시에 고려하여 선형적인 관계를 모델링하여 값을 예측하는 통계적 방법
import numpy as np
from sklearn.linear_model import LinearRegression
# 데이터 생성
X = np.array([[1, 2], [2, 4], [3, 6], [4, 8]]) # 독립 변수
y = np.array([5, 10, 15, 20]) # 종속 변수
# 모델 생성 및 학습
model = LinearRegression()
model.fit(X, y)
# 회귀 계수 및 절편 확인
print(f"회귀 계수 (w1, w2): {model.coef_}")
print(f"절편 (b): {model.intercept_}")
# 예측
new_data = np.array([[5, 10]])
predicted = model.predict(new_data)
print(f"예측 값: {predicted[0]}")
#결과
회귀 계수 (w1, w2): [1. 2.]
절편 (b): 0.0
예측 값: 25.0
1-3.회귀 계수(Regression Coefficient)
각 독립 변수(x)가 종속 변수(y)에 미치는 영향을 나타낸다.
기울기(Slope)라고도 불리며, 단위 변화에 따른 종속 변수의 변화량을 의미
1-4.절편(Intercept)
독립 변수(x)의 값이 모두 0일 때 종속 변수(y)의 예측 값을 말한다.
회귀식의 시작점 역할을한다.
2.비용 함수(Cost function)
모델의 예측값과 실제값 간의 차이를 측정하는 함수
머신러닝에서 모델의 성능을 평가하고 최적화하는 데 사용된다.
평균 제곱 오차(Mean Squared Error, MSE)가 대표적으로 회귀에서 사용된다.
2-1.평균 제곱 오차(Mean Squared Error, MSE)
회귀 분석에서 예측값과 실제값 간의 차이를 측정하는 비용 함수
MSE는 예측된 값과 실제 값의 차이를 제곱하여 평균을 낸 값으로 정의한다.
MSE는 항상 0 이상의 값을가지고 예측값이 실제값과 같을 때 MSE는 0이다.
MSE는 경사하강법(Gradient Descent) 등 최적화 알고리즘에서 사용되어 모델을 학습시키는 데 핵심적인 역할을한다.
- n: 데이터 포인트의 개수
- y: 실제 값 (목표 값)
- y^: 모델이 예측한 값
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 데이터 생성 (오차 포함)
np.random.seed(42) # 랜덤 시드 고정
X = np.array([[1], [2], [3], [4], [5]]) # 독립 변수
y = 2 * X.flatten() + 1 + np.random.normal(0, 1, size=X.shape[0]) # y = 2x + 1 + N(0, 1)
# 모델 생성 및 학습
model = LinearRegression()
model.fit(X, y)
# 회귀 계수 및 절편 확인
print(f"회귀 계수 (w): {model.coef_[0]}")
print(f"절편 (b): {model.intercept_}")
# 예측 값 확인
new_data = np.array([[6]])
predicted = model.predict(new_data)
print(f"예측 값: {predicted[0]}")
#MSE
y_pred = model.predict(X) #모델이 예측한 각x 에 대한 y값
mse = np.mean((y - y_pred) ** 2)
print("MSE:",mse)
# 시각화
plt.scatter(X, y, color='blue') # 데이터 포인트
plt.plot(X, model.predict(X), color='red') # 회귀선
plt.scatter(new_data, predicted, color='green', label=f'(6, {predicted[0]:.2f})')
# 그래프 꾸미기
plt.xlabel("(X)")
plt.ylabel("(y)")
plt.legend()
plt.grid()
plt.show()
#결과
회귀 계수 (w): 2.019955910211007
절편 (b): 1.399135243692065
예측 값: 13.518870704958108
MSE: 0.40047782397034676
728x90
'AI' 카테고리의 다른 글
[AI] 경사하강법(Gradient Descent) (0) | 2024.12.28 |
---|---|
[AI] 머신 러닝(Machine Learning) 용어 (2) | 2024.12.27 |
[AI] 코사인 유사도 (0) | 2024.12.27 |