하나의 독립변수 x와 가중치 w(weigth) 그리고 편향 b (bias)를 통해서 종속변수 y값을 찾아내는 식이다.
하지만, 다변량 선형회귀는 이 독립변수를 여러개 사용하는 선형회귀라고 할 수 있다.
다변량 선형회귀
예를 들어보자 ( 집값을 구하는 예 )
예를 들어서, 집값을 예측하는 함수를 만들어 본다고 가정을 하자.
집값을 예측할 때는 다양한 데이터들이 사용될 수 있다.
집이 속한 지역구의 부의 수준, 편의시설의 수, 기반시설의 수 등 다양한 데이터들이 집값에 영향을 줄 수 있다.
이 때, 예를들어 편의시설의 수 만을 이용해서 집값에 대한 그래프를 그리게 되면하, 하나의 독립변수 ( 편의시설의 수)로 종속변수( 집값)의 그래프를 그리게 된다.
이 경우를 단순 선형회귀 라고 한다.
더 나아가 편의시설의 수 만이 아니라, 기반시설의 수 , 지역구의 부의 수준 등의 데이터를 더 넣어서 그래프를 그리게 된다면, 여러개의 독립변수 ( 편의시설의 수 , 기반시설의 수 , 지역구의 부의 수준 ) 을 이용해서 하나의 종속변수 ( 집값 )에 대한 그래프를 그리게 된다.
이 경우를 다변량 선형회귀 라고 한다.
즉, 여러개의 변수를 사용하여 선형회귀를 하는것이다.
식을 통해 알아보자
그렇다면 다변량 선형회귀에 대한 식은 어떻게 생겼을까.
위의 예제를 참고하여 식을 세워 보면
이렇게 적을 수 있겠다. 이를 행렬로 전환하여,
다음과 같이 표기하면, 식을 간단히 아래와 같이 간단히 적을 수 있다.
W, b를 구하는것은, 단순 선형회귀때와 마찬가지로 최소제곱법, 경사하강법 등을 통해서 구할 수 있다.
코드와 그래프를 통해서 알아보자
"""여기서는 두개의 종속변수 X1, X2를 사용하여Y의 값에 대한 선형회귀를 해볼 것이다. """import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfrom sklearn.linear_model import LinearRegression# 랜덤하게 데이터를 생성한다. # (X1, X2의 값을 생성후, Y의 값을 X1, X2에 적절한 값을 곱한후 더하고, 랜덤한 값을 정해 더해준다)np.random.seed(0)X1 = np.linspace(0, 100, 100)X2 = np.linspace(50, 0, 100)Y =2*X1 +3*X2 +5*np.random.randn(100)# Create a pandas DataFramedata = pd.DataFrame({'X1': X1, 'X2': X2, 'Y': Y})# 선형회귀 모델을 불러와서 선형회귀를 실시한다.# 모델 내의 선형회귀 방법을 사용한다. scikit-learn에서는 최소제곱법을 이용해서 선형회귀를 실시한다.model =LinearRegression()X = data[['X1','X2']]model.fit(X, Y)# 3D 그래프를 그린다.fig = plt.figure()ax = fig.add_subplot(111, projection='3d')ax.scatter(data['X1'], data['X2'], data['Y'], c='red', marker='o')ax.set_xlabel('X1')ax.set_ylabel('X2')ax.set_zlabel('Y')ax.view_init(0, 90)# Plot the regression planex_min, x_max = ax.get_xlim()y_min, y_max = ax.get_ylim()X1, X2 = np.meshgrid(np.linspace(x_min, x_max, 10), np.linspace(y_min, y_max, 10))Y = model.intercept_ + model.coef_[0]*X1 + model.coef_[1]*X2ax.plot_surface(X1, X2, Y, alpha=0.2)plt.show()