회귀
실제 값과 예측 값의 차이를 최소화하는 식을 찾는 것
y=wx+b의 식에서 독립변수의 값에 영향을 미치는 회귀 계수의 최적의 값을 찾는 것
y = wx + b
- w: 회귀 계수(cofficient)
독립변수 x가 1 증가할 때마다 종속변수 y는 w만큼 증가
→ 직선의 기울기
- 절편(intercept): 독립변수가 모두 0일때 종속변수 y의 값
위의 식에서 독립변수 x = 0이면 y = b가 됨
MSE(평균제곱오차)
MSE(Mean Squared Error)는 오차를 제곱한 값의 평균을 의미한다
오차는 알고리즘이 예측한 값과 실제 값의 차이를 의미하는 것으로, 알고리즘이 정답을 잘 맞출수록 MSE의 값은 작아진다.
경사하강법
Gradient Decent
점진적으로 반복적인 계산을 통해 파라미터 값을 업데이트하면서 오류 값이 최소가 되는 파라미터를 구하는 방식
최적의 RSS(Residual Sum of Square)를 도출하기 위해 사용되는 W 파라미터를 구하기 위한 방법
*RSS
머신러닝을 통한 선형회귀의 목적은 잔차를 최소로 가지는 회귀 계수를 도출하는 것
여기서 말하는 잔차는 RSS가 되며 즉, RSS를 최소로 가지는 회귀계수 w0, w1을 기계학습을 통해 도출
이렇게 RSS와 같이 머신러닝 모델이 계속해서 학습할지를 결정하는 것을 비용함수 혹은 손실함수(Loss Function)라고 함
경사하강법의 원리
2차함수 그래프에서 최초 초기 랜덤값을 찍고 점진적인 학습을 통해 계속해서 손실함수가 최소가 되는 point를 찾는 것
단순 선형 회귀 분석
독립변수(X)와 종속변수(y)가 하나씩 존재하는 회귀
Data points들을 대표하는 Linear regression을 생성하여 새로운 X값에 대해 y값을 예측하는 것이 가능
여기서 예측값은 y^ = wx + b 로 계산이 가능
실제 Data points들은 선형식과의 잔차가 존재할 수 있어 wx + b +(-) error 로 계산
정리하자면 선형 회귀를 통해 해당 데이터 포인트를 대표할 수 있는 선형식을 계산한 다음 새로운 데이터에 대해 선형식을 적용하여 y^을 예측하는 것
import matplotlib.pyplot as plt
import numpy as np
rng = np.random.RandomState(42)
X = 10 * rng.rand(50)
y = 2*X -1 + rng.randn(50)
plt.scatter(X, y)
plt.show()
import pandas as pd
import seaborn as sns
df = pd.DataFrame()
df['x'] = pd.Series(X)
df['y'] = pd.Series(y)
sns.lmplot(x='x', y='y', data=df)
plt.show()
scikit-learn 패키지 사용
fit() 메서드로 가중치 값을 추정
coef_: 추정된 가중치 벡터
intercept_: 추정된 상수항
predict() 메서드로 새로운 입력 데이터에 대한 출력 데이터 예측
from sklearn.linear_model import LinearRegression
model = LinearRegression(copy_X=True, fit_intercept=True, normalize=False)
model.fit(X, y)
#model.coef_
#array([1.9776566])
#model.intercept_
#-0.9033107255311164
xx = np.linspace(-1, 10, 10)
yy = model.predict(xx.reshape(-1, 1))
plt.figure(figsize=(5, 5))
plt.scatter(X, y)
plt.plot(xx, yy, c='r', marker='o')
plt.show()
다중 선형 회귀 분석
X와 y가 하나씩 존재하는 선형회귀, X의 변수가 여러개인 다중선형회귀
다중선형회귀는 여러개의 특성을 이용해 종속변수를 예측하기 때문에 일반 선형회귀보다 더 좋은 성능을 기대할 수 있다.
맨해튼 집값 데이터
from sklearn.datasets import load_boston
house = load_boston()
df = pd.DataFrame(house.data, columns=house.feature_names)
df.head()
df['MEDV'] = house.target
df.head()
df.describe()
df.corr()
X = df.copy()
y = X.pop('MEDV')
model = LinearRegression()
model.fit(X, y)
pred = model.predict(X)
from sklearn.metrics import mean_squared_error
print('score= ', model.score(X, y))
print('MSE= ', mean_squared_error(df['MEDV'], pred))
출처
https://mindscale.kr/course/basic-stat-python/9/
https://heytech.tistory.com/362
https://kimdingko-world.tistory.com/233
https://kimdingko-world.tistory.com/103
'Study > AI' 카테고리의 다른 글
[AI][ML]k-최근접 이웃 알고리즘(KNN, K-Nearest Neighbor) (0) | 2022.08.09 |
---|---|
[AI][ML]Logistic Regression(로지스틱 회귀) (0) | 2022.07.31 |
[AI][ML]상관계수 (0) | 2022.07.20 |
[AI][ML]데이터 스케일링 (0) | 2022.07.20 |
로지스틱 회귀 (0) | 2022.06.04 |