import numpy as np
import matplotlib.pyplot as plt
r = np.random.RandomState(15)
# x = 입력 데이터
x = 10 * r.rand(100)
# y = 정답 데이터
y = 2 * x - 3 * r.rand(100)
# shape 확인
x.shape
>>> (100,)
y.shape
>>> (100,)
# 시각화
plt.scatter(x, y)
두 변수 모두 1차원 벡터이다.
그래프를 보면 일반선형회귀로 예측이 가능할 것이란 추측을 할 수 있다.
from sklearn.linear_model import LinearRegression
# 모델 생성
model = LinearRegrssion()
# x를 행렬로 변환한다.
X = x.reshape(100, 1)
# 모델 학습
model.fit(X, y)
# 예측모델 생성
# reshape 함수는 -1을 인자로 넣어주면 자동으로 남은 숫자를 계산한다.
x_new = np.linspace(-1, 11, 100)
X_new = x_new.reshape(100,1)
y_new = model.predict(X_new)
X_ = x_new.reshape(-1,1)
X_.shape
>>> (100,1)
X_ = x_new.reshape(2,-1)
X_.shape
>>> (2, 50)
# 회귀모델의 평가는 일반적으로 RMSE를 사용한다.
from sklearn.metrics import mean_squared_error
error = np.sqrt(mean_squared_error(y,y_new))
print(error)
>>> 9.299028215052264
# 시각화
plt.scatter(x, y, label='input data')
plt.plot(X_new, y_new, color='red', label='regression line')
회귀선이 실제 값과 어느 정도 일치하는지 확인할 수 있다.