다항식 회귀 분석
0. 소개
처음 뵙겠습니다. Qiita 첫 투고입니다.
현재 엔지니어로의 전직을 향해 파이썬에 의한 데이터 분석 등을 학습하고 있습니다.
자신의 비망록으로서 쓰고 있으므로, 실수나 신경이 쓰이는 곳 등 있으면 지적 받을 수 있으면 고맙습니다.
1. 단회귀 분석과 다항식 회귀 분석
둘 다 양적 데이터의 관계를 예측하는 분석 기법이지만,
・단회귀 분석 1차식을 이용하여 직선적으로 예측
· 다항식 회귀 분석 다항식을 이용한 곡선 예측
차이가 있습니다.
식으로 쓰면,
단일 회귀 분석 ... y = wx + b
다항식 회귀 분석 ... y = w0x0 + w1x1 + w2x2 + ... + b0
2.python에서 구현
1. 데이터 로드
sklearn의 데이터 세트 boston.data를 사용하여 구현해 보겠습니다.
(참고 【데이터 분석】 보스턴 주택 가격 데이터 세트를 사용하여 데이터 분석 )
우선, 데이터를 읽은 후,
import pandas as pd
from sklearn.datasets import load_boston
#説明変数となるデータ
boston = load_boston()
boston_df = pd.DataFrame(boston.data, columns=boston.feature_names)
#目的変数の追加
boston_df['MEDV'] = boston.target
2. 데이터 시각화
설명 변수에 RM(평균 방수), 목적 변수에 MEDV(주택 가격)를 사용하고 있습니다.
import matplotlib.pyplot as plt
#平均部屋数RMと住宅価格MEDVの散布図
x = boston_df['RM']
y = boston_df['MEDV']
plt.scatter(x, y)
plt.title('boston.data')
plt.xlabel('RM')
plt.ylabel('MEDV')
plt.show()
3. 학습용 데이터와 테스트 데이터로 분할
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)
4. 모델 만들기
PolynomialFeatures의 인수 degree에 임의의 값을 지정함으로써, N항의 다항식으로 할 수 있다.
이하에서는, degree=1(1항이므로 단회귀 분석), degree=4(4항의 다항식 분석)를 시험하고 있다.
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
x_train = np.array(x_train).reshape(-1, 1)
y_train = np.array(y_train)
#degree=1で単回帰分析
model_1 = Pipeline([
('poly', PolynomialFeatures(degree=1)),
('linear', LinearRegression())
])
model_1.fit(x, y)
#degreeの値に任意の値を指定することで、多項式分析に(以下は4項)
model_2 = Pipeline([
('poly', PolynomialFeatures(degree=4)),
('linear', LinearRegression())
])
model_2.fit(x, y)
5. 산포도와 회귀 모델의 시각화
fig, ax = plt.subplots()
ax.scatter(x_train, y_train, color='blue', label='train')
ax.scatter(x_test, y_test, color='gray', label='test')
x_ = np.linspace(3, 9, 100).reshape(-1, 1)
plt.plot(x_, model_1.predict(x_), color='red', label='degree=1')
plt.plot(x_, model_2.predict(x_), color='yellow', label='degree=4')
plt.legend()
plt.show()
degree의 값을 늘리면, 좀 더 구냐그냐의 선이 되어, 학습 데이터에 대해서 적합한 선이 되어 가지만, 너무 늘리면 과학습이 되어 버리므로, 조정이 필요.
이 외 정규화에 의해 과학습을 억제하는 방법도 있다.
Reference
이 문제에 관하여(다항식 회귀 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ryoichi551124/items/a4439471c3007d5f94a1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
둘 다 양적 데이터의 관계를 예측하는 분석 기법이지만,
・단회귀 분석 1차식을 이용하여 직선적으로 예측
· 다항식 회귀 분석 다항식을 이용한 곡선 예측
차이가 있습니다.
식으로 쓰면,
단일 회귀 분석 ... y = wx + b
다항식 회귀 분석 ... y = w0x0 + w1x1 + w2x2 + ... + b0
2.python에서 구현
1. 데이터 로드
sklearn의 데이터 세트 boston.data를 사용하여 구현해 보겠습니다.
(참고 【데이터 분석】 보스턴 주택 가격 데이터 세트를 사용하여 데이터 분석 )
우선, 데이터를 읽은 후,
import pandas as pd
from sklearn.datasets import load_boston
#説明変数となるデータ
boston = load_boston()
boston_df = pd.DataFrame(boston.data, columns=boston.feature_names)
#目的変数の追加
boston_df['MEDV'] = boston.target
2. 데이터 시각화
설명 변수에 RM(평균 방수), 목적 변수에 MEDV(주택 가격)를 사용하고 있습니다.
import matplotlib.pyplot as plt
#平均部屋数RMと住宅価格MEDVの散布図
x = boston_df['RM']
y = boston_df['MEDV']
plt.scatter(x, y)
plt.title('boston.data')
plt.xlabel('RM')
plt.ylabel('MEDV')
plt.show()
3. 학습용 데이터와 테스트 데이터로 분할
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)
4. 모델 만들기
PolynomialFeatures의 인수 degree에 임의의 값을 지정함으로써, N항의 다항식으로 할 수 있다.
이하에서는, degree=1(1항이므로 단회귀 분석), degree=4(4항의 다항식 분석)를 시험하고 있다.
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
x_train = np.array(x_train).reshape(-1, 1)
y_train = np.array(y_train)
#degree=1で単回帰分析
model_1 = Pipeline([
('poly', PolynomialFeatures(degree=1)),
('linear', LinearRegression())
])
model_1.fit(x, y)
#degreeの値に任意の値を指定することで、多項式分析に(以下は4項)
model_2 = Pipeline([
('poly', PolynomialFeatures(degree=4)),
('linear', LinearRegression())
])
model_2.fit(x, y)
5. 산포도와 회귀 모델의 시각화
fig, ax = plt.subplots()
ax.scatter(x_train, y_train, color='blue', label='train')
ax.scatter(x_test, y_test, color='gray', label='test')
x_ = np.linspace(3, 9, 100).reshape(-1, 1)
plt.plot(x_, model_1.predict(x_), color='red', label='degree=1')
plt.plot(x_, model_2.predict(x_), color='yellow', label='degree=4')
plt.legend()
plt.show()
degree의 값을 늘리면, 좀 더 구냐그냐의 선이 되어, 학습 데이터에 대해서 적합한 선이 되어 가지만, 너무 늘리면 과학습이 되어 버리므로, 조정이 필요.
이 외 정규화에 의해 과학습을 억제하는 방법도 있다.
Reference
이 문제에 관하여(다항식 회귀 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ryoichi551124/items/a4439471c3007d5f94a1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import pandas as pd
from sklearn.datasets import load_boston
#説明変数となるデータ
boston = load_boston()
boston_df = pd.DataFrame(boston.data, columns=boston.feature_names)
#目的変数の追加
boston_df['MEDV'] = boston.target
import matplotlib.pyplot as plt
#平均部屋数RMと住宅価格MEDVの散布図
x = boston_df['RM']
y = boston_df['MEDV']
plt.scatter(x, y)
plt.title('boston.data')
plt.xlabel('RM')
plt.ylabel('MEDV')
plt.show()
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
x_train = np.array(x_train).reshape(-1, 1)
y_train = np.array(y_train)
#degree=1で単回帰分析
model_1 = Pipeline([
('poly', PolynomialFeatures(degree=1)),
('linear', LinearRegression())
])
model_1.fit(x, y)
#degreeの値に任意の値を指定することで、多項式分析に(以下は4項)
model_2 = Pipeline([
('poly', PolynomialFeatures(degree=4)),
('linear', LinearRegression())
])
model_2.fit(x, y)
fig, ax = plt.subplots()
ax.scatter(x_train, y_train, color='blue', label='train')
ax.scatter(x_test, y_test, color='gray', label='test')
x_ = np.linspace(3, 9, 100).reshape(-1, 1)
plt.plot(x_, model_1.predict(x_), color='red', label='degree=1')
plt.plot(x_, model_2.predict(x_), color='yellow', label='degree=4')
plt.legend()
plt.show()
Reference
이 문제에 관하여(다항식 회귀 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryoichi551124/items/a4439471c3007d5f94a1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)