데이터를 가장 잘 설명하는 모델을 찾아 입력값에 따른 결과값을 예측하는 알고리즘

완벽한 예측은 불가능하기 때문에, 데이터의 실제값과 예측값의 차이를 최소한으로 하는 선을 찾아야한다.
선형 회귀는 크게 두 가지 종류로 나눌 수 있다.
데이터를 설명하는 모델을 직선형태로 가정하며, 독립변수와 종속변수가 1개
데이터를 가장 잘 설명하는 모델이란 ?
실제값과 예측값과의 차이가 가장 작은 것

Yi (Dependent Variable)
Constant/Intercept
Slope/Coefficient
Independent Variable

독립 변수 여러 개 (2개 이상), 종속 변수 1개
다중 선형 회귀는 입력값이 1개일 경우 적용하는 단순 선형 회귀 알고리즘과 달리 입력값 X가 여러 개일 때 사용할 수 있는 회귀 알고리즘이다.
LinearRegression 클래스를 다중 선형 회귀에서도 사용이 가능하다.


다항 회귀는 2차, 3차 방정식과 같은 다항식을 사용한 회귀
각 특성(feature)의 제곱을 새로운 특성으로 추가하여 선형 모델을 학습
fit()은 새롭게 만들 특성 조합을 찾고, transform()은 실제로 데이터를 변화한다.
from sklearn.preprocessing import PolynomialFeatures
np.random.seed(0)
X = 3 * np.random.rand(50, 1) + 1
y = X**2 + X + 2 + 5 * np.random.rand(50, 1)
poly = PolynomialFeatures(degree=2, include_bias=True)
poly_X = poly.fit_transform(X)
poly = PolynomialFeatures(degree, include_bias): Polynomial 객체 poly를 생성한다.
degree: 다항식의 차수
include_bias : 편향 변수의 추가 여부 (True/False)
True로 설정하게 되면, 해당 다항식의 모든 거듭제곱이 0일 경우 편향 변수를 추가한다.
poly.fit_transform(X): 데이터 X와 X의 degree 제곱을 추가한 데이터를 반환

Polynomial이 더 잘 나타냄
그럼 어떻게? -> 실제 값과 예측 값 차이의 제곱의 합으로 비교하자
머신러닝이나 딥러닝 모델이 예측한 값과 실제 값 사이의 차이를 측정하는 함수
손실함수의 값을 최소화하는 것이 모델 학습의 목표
비용 함수(cost function) = 손실 함수(loss function) = 오차 함수(error function) = 목적 함수(objective function) 다 같은 말
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split'''
```python
np.random.seed(0)
X = 5 * np.random.rand(100, 1)
y = 2 * X + np.random.rand(100, 1)```
train_X, test_X, train_y ,test_y = train_test_split(X, y, test_size = 0.3)
model = LinearRegression()
model.fit(train_X, train_y)
predicted = model.predict(test_X)
print("학습 데이터 평가점수 : {}".format(model.score(train_X, train_y)))
print("학습 데이터 평가점수 : {}".format(model.score(test_X, test_y)))
beta_0 = model.intercept_
beta_1 = model.coef_
plt.figure(figsize = (12, 6))
plt.scatter(train_X, train_y)
plt.scatter(test_X, test_y)
plt.plot(test_X, predicted, color='b')
plt.show()```