-
Python 데이터분석 기초 53 - 다항회귀모델, 차원확대, 차원축소Python 데이터 분석 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
'Python 데이터 분석' 카테고리의 다른 글
Python 데이터분석 기초 54 - Logistic Regression(로지스틱 회귀분석) (0) 2022.11.17 다중회귀모델 예제(degree) (0) 2022.11.17 Python 데이터분석 기초 52 - 설명력이 매우 높을 때 Ridge 회귀모형, Lasso 회귀모형, Elastic Net 회귀모형을 사용 (0) 2022.11.17 선형회귀분석 모델 LinearRegression을 사용 예제(train_test_split) mtcars 데이터 사용 (0) 2022.11.16 선형회귀분석 모델 LinearRegression을 사용 예제(train_test_split) (0) 2022.11.16