• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

bias 질문있습니다.

20.12.09 16:55 작성 조회수 766

0

안녕하세요 강사님 PolynomialFeatures() 파라미터인 include_bias 를 True 로 설정하면 그래프 오차가 상당히 크게 나오는데 언제 왜 쓰이는지 궁금합니다.

import numpy as np

from matplotlib import pyplot as plt

from sklearn.preprocessing import PolynomialFeatures

from sklearn.linear_model import LinearRegression

m = 100

X = 6*np.random.rand(m, 1) - 3

y = 0.5 * X**2 + X +2+ np.random.randn(m, 1)

poly_features = PolynomialFeatures(degree=2, include_bias=False)

X_poly = poly_features.fit_transform(X)

#print(X_poly)

lin_reg = LinearRegression()

lin_reg.fit(X_poly, y)

print(lin_reg.intercept_, lin_reg.coef_)

poly_features2 = PolynomialFeatures(degree=2, include_bias=True)

X_poly2 = poly_features2.fit_transform(X)

lin_reg2 = LinearRegression()

lin_reg2.fit(X_poly2, y)

print(lin_reg2.intercept_, lin_reg2.coef_)

plt.plot(X, y, 'o')

plt.plot(X, lin_reg.coef_[0][1]* X**2 + lin_reg.coef_[0][0]*X +lin_reg.intercept_, 'r.')

plt.plot(X, lin_reg2.coef_[0][1]* X**2 + lin_reg2.coef_[0][0]*X +lin_reg2.intercept_, 'g.')

plt.plot(X, np.round(model.named_steps['linear'].coef_, 2)[0][1]* X**2 + np.round(model.named_steps['linear'].coef_, 2)[0][0]*X , 'y.')

plt.show()

from sklearn.pipeline import Pipeline

model = Pipeline([('Poly', PolynomialFeatures(degree=2, include_bias=False)),

                  ('linear', LinearRegression())])

model = model.fit(X, y)

print('회귀계수 : ', np.round(model.named_steps['linear'].coef_, 2))

답변 3

·

답변을 작성해보세요.

0

이게 어떤 경우에 include_bias를 적용하느냐, 아니냐 보다는 적용해서 좋으면 사용하고, 아니면 사용하지 않는 정도의 하이퍼 파라미터 개념으로 생각하시면 될 것 같습니다.

감사합니다.

0

안녕하세요 강사님 답변 감사드립니다. 제가 질문을 잘못드려 다시 여쭙고싶습니다.

PolynomialFeatures 를 사용하는 이유가 주어진 데이터 세트로 예상되는 다항회귀곡선을 추출하기 위해서인데

절편 1을 추가할 경우(include_bias=True 일 경우), 적절치 않은 회귀 곡선이 예측되던데 실전에서 절편 1을 어떤 경우에 추가해서 사용하는지 궁금합니다.

0

안녕하십니까,

include_bias는 절편을 만드는 것입니다. include_bias = True이면 1 +ax + bx(제곱)와 같이 1 같은 절편을 추가합니다. False이면 추가하지 않습니다.

아래 코드로 테스트 해보시면 됩니다.

from sklearn.preprocessing import PolynomialFeatures
import numpy as np

# 다항식으로 변환한 단항식 생성, [[0,1],[2,3]]의 2X2 행렬 생성
X = np.arange(4).reshape(2,2)
print('일차 단항식 계수 feature:\n',X )

# degree = 2 인 2차 다항식으로 변환하기 위해 PolynomialFeatures를 이용하여 변환
poly = PolynomialFeatures(degree=2, include_bias=False)
poly.fit(X)
poly_ftr = poly.transform(X)
print('변환된 2차 다항식 계수 feature with include_bias False:\n', poly_ftr)

poly = PolynomialFeatures(degree=2, include_bias=True)
poly.fit(X)
poly_ftr = poly.transform(X)
print('변환된 2차 다항식 계수 feature with include_bias False:\n', poly_ftr)

감사합니다.