250x250
Link
๋‚˜์˜ GitHub Contribution ๊ทธ๋ž˜ํ”„
Loading data ...
Notice
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Data Science LAB

[Python] ๋‹คํ•ญ ํšŒ๊ท€๋ถ„์„ (Polynomial Regression) ๋ณธ๋ฌธ

๐Ÿ›  Machine Learning/๊ธฐ์ดˆ ํ†ต๊ณ„

[Python] ๋‹คํ•ญ ํšŒ๊ท€๋ถ„์„ (Polynomial Regression)

ใ…… ใ…œ ใ…” ใ…‡ 2022. 8. 24. 14:48
728x90

๋ฐ์ดํ„ฐ๊ฐ€ ๋‹จ์ˆœํ•œ ์ง์„  ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ๋น„์„ ํ˜•์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ–๊ณ  ์žˆ์„ ๋•Œ, ๊ฐ ๋ณ€์ˆ˜์˜ ๊ฑฐ๋“ญ ์ œ๊ณฑ์„ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ์„ ํ˜• ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ™•์žฅ๋œ ํŠน์„ฑ์„ ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ์„ ํ˜• ๋ชจ๋ธ๋กœ ํ›ˆ๋ จ ์‹œํ‚ค๋Š” ๊ธฐ๋ฒ•์„ ๋‹คํ•ญํšŒ๊ท€๋ผ๊ณ ํ•œ๋‹ค.

 

1. ๋‹คํ•ญ ๋ณ€์ˆ˜ ์ƒ์„ฑ

PolynomialFeatures(degree=d)๋ฅผ ํ™œ์šฉํ•ด ๋ณ€์ˆ˜ ํŠน์„ฑ์„ ๊ฑฐ๋“ญ์ œ๊ณฑ์œผ๋กœ ๋ณ€ํ™˜

class sklearn.preprocessing.PolynomialFeatures(degree=2, interaction_only=False, include_bias = True, order='C')

- ๋งค๊ฐœ๋ณ€์ˆ˜

  • degree : ๋‹คํ•ญ์‹์˜ ์ฐจ์ˆ˜ ๊ฒฐ์ • (default=2)
  • interaction_only : ๊ต์ฐจํ•ญ์„ ์ถ”๊ฐ€ํ• ์ง€ ์—ฌ๋ถ€ ๊ฒฐ์ • (False์ธ ๊ฒฝ์šฐ ๊ต์ฐจํ•ญ๊ณผ ๋™์ผํ•œ ๋ณ€์ˆ˜์˜ 2์ œ๊ณฑ ์ด์ƒ์ธ ํ•ญ๋„ ์ถ”๊ฐ€๋จ)
  • include_bias : bias ์ปฌ๋Ÿผ ์ถ”๊ฐ€ํ• ์ง€ ์—ฌ๋ถ€

 

 

2. ์„ ํ˜• ๊ฒฐํ•ฉ

PolynomialFeatures๋กœ ์ƒ์„ฑํ•œ ๋ณ€์ˆ˜๋“ค์„ LinearRegression()์˜ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ๋Œ€์ž…ํ•˜๋ฉด ๋‹คํ•ญ ํšŒ๊ท€๋ถ„์„ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

 

import pandas as pd
import numpy as np

m = 100
X = 6 * np.random.rand(m,1) - 3
y = 3 * X **3 + X**2 + 2*X + 2 + np.random.randn(m,1) # ๋…ธ์ด์ฆˆ ํฌํ•จ
line = np.linspace(-3,3,100,endpoint=False).reshape(-1,1)

X : 0~1์‚ฌ์ด์˜ ๊ท ์ผ๋ถ„ํฌ ๋‚œ์ˆ˜๋ฅผ (100,1)๋กœ ์ƒ์„ฑ

y : X ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•œ 3์ฐจ ๋‹คํ•ญ์‹ ์ƒ์„ฑ

line : -3๋ถ€ํ„ฐ 3๊นŒ์ง€ 100๊ฐœ์˜ ์ˆซ์ž ์ฑ„์šด ํ›„ 1์—ด ํ˜•์‹์œผ๋กœ reshape (-1์€ ํ–‰์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€๋ณ€์ ์ž„์„ ์˜๋ฏธ)

 

 

from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures

# X**3๊นŒ์ง€ 3์ฐจํ•ญ์„ ์ ์šฉ์‹œ์ผœ์•ผํ•จ
poly = PolynomialFeatures(degree=3, include_bias=False)
poly.fit(X)
X_poly = poly.transform(X)
line_poly = poly.transform(line)
reg = LinearRegression().fit(X_poly, y)

plt.plot(line, reg.predict(line_poly), c='r', linewidth=3)
plt.plot(X,y,'o',c='g',alpha=0.5)

degree๋Š” 3์œผ๋กœ ์„ค์ • ํ›„ Polynomialํ•จ์ˆ˜์— fit()

728x90
Comments