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