Python 데이터 분석

Python 데이터분석 기초 53 - 다항회귀모델, 차원확대, 차원축소

코딩탕탕 2022. 11. 17. 11:34

 

상관계수는 충분히 있지만, 데이터가 선형이 아닌, 비선형 데이터일 경우 선형회귀모델을 다항회귀모델로 변환한다.

 

# 선형회귀모델을 다항회귀모델로 변환
# 선형 가정이 신뢰도가 떨어질 경우 대처방법으로 다항식을 추가할 수 있다.

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5])
y = np.array([4, 2, 1, 3, 7])

print(np.corrcoef(x, y)) # 0.48076197

# plt.scatter(x, y)
# plt.show()

# 선형회귀모델 작성
from sklearn.linear_model import LinearRegression

x = x[:, np.newaxis] # 차원확대
# print(x)
model = LinearRegression().fit(x, y)
y_pred = model.predict(x)
print(y_pred)

# plt.scatter(x, y)
# plt.plot(x, y_pred, c = 'r')
# plt.show()

# 좀 더 복잡한 형태의 모델을 필요 : 다항식 특징(feature)을 추가한 다항회귀모델 작성
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree = 3, include_bias = False)  # degree = 추가 할 열의 갯수
x2 = poly.fit_transform(x) # 특징행렬 작성(제곱한 값이 추가)
print(x2)

model2 = LinearRegression().fit(x2, y) # 특징행렬 값으로 학습 진행
y_pred2 = model2.predict(x2)
print(y_pred2)

plt.scatter(x, y)
plt.plot(x, y_pred2, c = 'r')
plt.show()


<console>
[[1.         0.48076197]
 [0.48076197 1.        ]]
[2.  2.7 3.4 4.1 4.8]
[[  1.   1.   1.]
 [  2.   4.   8.]
 [  3.   9.  27.]
 [  4.  16.  64.]
 [  5.  25. 125.]]
[4.04285714 1.82857143 1.25714286 2.82857143 7.04285714]

PolynomialFeatures(degree = 3, include_bias = False) = degree는 열의 갯수를 부여하는 것인데 많이 주면 많이 줄 수록 값은 더 정확해진다. 그러나 오버피팅의 경우를 생각하여야 된다.

 

 

 

비선형 데이터이지만 선형으로 그어졌다.(안 좋은 예)

비선형 데이터지만 추세선은 선형으로 그어졌다. 위와 같은 경우 다항회귀모델을 사용한다.

 

 

다항회귀모델로 변환한 모습

비선형으로 변형되었다.

 

 

 

차원확대, 차원축소는 이곳을 참조

 

Daum 카페

 

cafe.daum.net