ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ๋ฅผ ํ๊ตฌํฉ์๋ค.
ํ๊ท๋ชจ๋ธ ์ข ๋ฅ
์ ํํ๊ท๋ชจ๋ธ, ๋คํญํ๊ท๋ชจ๋ธ, ๋ค์คํ๊ท๋ชจ๋ธ, ๋ฆฟ์ง, ๋ผ์, ๋๋คํฌ๋ ์คํธ, ๊ทธ๋ ๋์ธํธ๋ถ์คํธ, ํ์คํ ๊ทธ๋จ๊ทธ๋ ๋์ธํธ๋ถ์คํธ, XGBoost, ๊ธฐํ ๋ฑ๋ฑ
์ฃผ๋ก ์ฌ์ฉ๋๋ ํ๊ท๋ชจ๋ธ
๋ฆฟ์ง, ํ์คํ ๊ทธ๋จ๊ทธ๋ ๋์ธํธ๋ถ์คํธ, XGBoost
์ ํํ๊ท๋ชจ๋ธ(LR; Liner Regression Model)
### ๋ชจ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ๋ค์ด๊ธฐ
from sklearn.linear_model import LinearRegression
์ฌ์ฉํ ๋ฐ์ดํฐ
### ์ฌ์ฉํ ๋ฐ์ดํฐ
train_input, train_target, test_input, test_target
๋ชจ๋ธ ์์ฑํ๊ธฐ
###๋ชจ๋ธ ์์ฑํ๊ธฐ
lr = LinearRegression()
lr
๋ชจ๋ธ ํ๋ จ์ํค๊ธฐ
### ๋ชจ๋ธ ํ๋ จ์ํค๊ธฐ
lr.fit(train_input, train_target)
์ ํ๋
### ํ๋ จ ์ ํ๋
train_r2 = lr.score(train_input, train_target)
### ํ
์คํธ(๊ฒ์ฆ) ์ ํ๋
test_r2 = lr.score(test_input, test_target)
print(f"{train_r2} / {test_r2}")
### (ํด์)
# - ๊ฒฐ์ ๊ณ์ ํ์ธ ๊ฒฐ๊ณผ, ํ๋ จ์ด > ํ
์คํธ ๊ฒฐ์ ๊ณ์๋ณด๋ค ํฌ๊ธฐ์ ๊ณผ์์ ํฉ์ ์ผ์ด๋์ง ์์์ผ๋,
# - ๋ ๊ณ์์ ์ฐจ์ด๊ฐ 0.12๋ก ๊ณผ๋์ ํฉ์ด ์์ฌ๋จ
์์ ๋ฐ์ดํฐ ์์ธกํ๊ธฐ
### KNN์์๋ 1033g์ ์์ธกํ์์
lr.predict([[50]])
### ์ถ์ธ์ (์์ธก์ ์ด๋ฆฌ๊ณ ํฉ๋๋ค.)์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ๊ณ์๊ฐ ์ถ์ถํ๊ธฐ
# - ์ง์ ์ ๋ฐฉ๋ฒ์ y = a * x + b
# - coef_ : ๊ธฐ์ธ๊ธฐ(๊ณ์) -> a
# - intercept_ : ์ ํธ -> b
lr.coef_, lr.intercept_
์ถ์ธ์ ๊ทธ๋ฆฌ๊ธฐ
### ํ๋ จ๋ฐ์ดํฐ ์ฐ์ ๋
plt.scatter(train_input, train_target)
### ์์ธก๊ฐ ์ฐ์ ๋
plt.scatter(50, 1241.839, marker="^")
### ์ถ์ธ์
plt.plot([15, 50], [lr.coef_ * 15 + lr.intercept_,
lr.coef_ * 50 + lr.intercept_])
plt.grid()
plt.show()
### ํ๋ จ๋ฐ์ดํฐ ์ฐ์ ๋
plt.scatter(train_input, train_target)
### ์์ธก๊ฐ ์ฐ์ ๋
plt.scatter(50, 1241.839, marker="^")
### ์ถ์ธ์
plt.plot([0, 50], [lr.coef_ * 0 + lr.intercept_,
lr.coef_ * 50 + lr.intercept_])
plt.grid()
plt.show()
ํด์
- ์์ ๊ฐ ์์ธก ์ KNN๋ณด๋ค๋ ์ฑ๋ฅ์ด ์ข์ ์์ธก์ด ๊ฐ๋ฅํ๋ฉฐ,
- ๊ณผ์ ํฉ์ด ๋ฐ์ํ์ง ์๋ ์ผ๋ฐํ๋ ๋ชจ๋ธ๋ก ๋ณด์ฌ์ง๋,
- y์ ํธ์ ๊ฐ์ด ์์๋ก ์์ธก ์ ์์์ ๋ฐ์ดํฐ๊ฐ ์์ธก ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ชจ๋ธ๋ก ๋ณด์ฌ์ง
- ์ข
์๋ณ์ ๋ฌด๊ฒ์ ๊ฐ์ 0์ดํ๋ก ๋์ฌ ์ ์๊ธฐ์ ์์์น๋ฅผ ์์ธกํ ์ ์๋ ๋ชจ๋ธ๋ก
- ํ์ฌ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ธกํ๊ธฐ์๋ ๋ถ์ ํฉํ ๋ชจ๋ธ๋ก ์ฌ๊ฒจ์ง
๋คํญํ๊ท๋ชจ๋ธ(๊ณก์ )
- ๋ฐ์ดํฐ์ ๋ถํฌ๊ฐ ์ ํ์ด๋ฉด์ ๊ณก์ ์ ๋๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋จ
- ๊ณก์ (ํฌ๋ฌผ์ )์ ๋ฐฉ์ ์์ด ์ ์ฉ๋์ด ์์
- y = (a * x^2) + (b * x) + c
- ๋
๋ฆฝ๋ณ์๋ 2๊ฐ๊ฐ ์ฌ์ฉ๋จ : x^2๊ฐ๊ณผ x๊ฐ
ํ๋ จ ๋ฐ ํ ์คํธ๋ฐ์ดํฐ์ ๋ ๋ฆฝ๋ณ์์ x^2๊ฐ ์ถ๊ฐํ๊ธฐ
### ํ๋ จ ๋ฐ ํ
์คํธ๋ฐ์ดํฐ์ ๋
๋ฆฝ๋ณ์์ x^2๊ฐ ์ถ๊ฐํ๊ธฐ
# - ํ๋ จ ๋
๋ฆฝ๋ณ์
train_poly = np.column_stack((train_input**2, train_input))
# - ํ
์คํธ ๋
๋ฆฝ๋ณ์
test_poly = np.column_stack((test_input**2, test_input))
train_poly.shape, test_poly.shape
### ํ๋ จ ๋ฐ ํ
์คํธ ๊ฒ์ฆํ๊ณ , ๊ณผ์ ํฉ ์ฌ๋ถ ํ์ธํด ์ฃผ์ธ์
### ์์์ ๊ฐ ๊ธธ์ด 50์ผ๋ก ์์ธก๊น์ง ํด ์ฃผ์ธ์
### ๋ชจ๋ธ ํ๋ จ์ํค๊ธฐ
lr.fit(train_poly, train_target)
### ์ ํ๋์ ๋ํ ์ฉ์ด ์ ์
# - ๋ถ๋ฅ์์๋ "์ ํ๋"๋ผ๊ณ ์นญํ๋ฉฐ
# - ํ๊ท์์๋ "๊ฒฐ์ ๊ณ์(R^2)"์ด๋ผ๊ณ ์นญํฉ๋๋ค.
### ํ๋ จ ์ ํ๋ ํ์ธํ๊ธฐ
train_r2 = lr.score(train_poly, train_target)
### ํ
์คํธ ์ ํ๋ ํ์ธํ๊ธฐ
test_r2 = lr.score(test_poly, test_target)
"""
๊ณผ์ ํฉ ์ฌ๋ถ ํ์ธ ํด์
- 0.007 ์ ๋์ ๊ณผ์์ ํฉ(ํ๋ จ < ๊ฒ์ฆ)์ด ๋ฐ์
"""
print(f"ํ๋ จ ๊ฒฐ์ ๊ณ์={train_r2} / ํ
์คํธ ๊ฒฐ์ ๊ณ์={test_r2}")
"""์์ ๊ฐ ๊ธธ์ด 50์ผ๋ก ์์ธกํ๊ธฐ"""
pred = lr.predict([[50**2, 50]])
print(f"๊ธธ์ด 50 ์์ธก ๊ฒฐ๊ณผ : {pred}")
์ถ์ธ์ ๊ทธ๋ฆฌ๊ธฐ
"""
์ถ์ธ์ ๊ทธ๋ฆฌ๊ธฐ
- ์ถ์ธ์ ์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์๋ ๊ณก์ ์ ๋ฐฉ์ ์์ ์ฌ์ฉํ ๊ณ์ a, b์ ์ ํธ c๋ฅผ ์์์ผ ํฉ๋๋ค.
"""
print(f"๊ณ์ = {lr.coef_} / ์ ํธ = {lr.intercept_}")
a = lr.coef_[0]
b = lr.coef_[1]
c = lr.intercept_
print(f"a={a}, b={b}, c={c}")
"""์ถ์ธ์ ๊ทธ๋ฆฌ๊ธฐ"""
plt.scatter(train_input, train_target)
plt.scatter(50, pred[0], marker="^")
### ์ถ์ธ์
# - ์ถ์ธ์ ์ด ์ฌ์ฉํ x์ถ๊ฐ ์ง์ (0~50๊น์ง์ ์์ฐจ์ ์ธ ๊ฐ ์ฌ์ฉ)
point = np.arange(0, 51)
plt.plot(point, a*point**2 + b*point + c)
plt.grid()
plt.show()
(ํด์)
- ์ ํํ๊ท๋ชจ๋ธ์ ๊ฒฝ์ฐ์๋ ์์ ์ ํธ๊ฐ์ด ๋ํ๋ด๋ ๋ชจ๋ธ์ด์์ผ๋,
๋คํญํ๊ท๋ชจ๋ธ์ ๊ฒฝ์ฐ์๋ ์ด๋ฅผ ํด์ํ ์ ์์์
๋จ, ๊ธธ์ด(x)๊ฐ 10 ์ดํ์ ๋
๋ฆฝ๋ณ์๋ ์ฌ์ฉํ๋ฉด ์ ๋จ
- ๋คํญํ๊ท๋ชจ๋ธ์ ํ๋ จ ๋ฐ ํ
์คํธ ๊ฒฐ์ ๊ณ์์ ๊ฒฐ๊ณผ ๋ฏธ์ธํ ๊ณผ์์ ํฉ์ ๋ณด์ด๊ณ ์์ผ๋,
์ฌ์ฉ๊ฐ๋ฅํ ๋ชจ๋ธ๋ก ํ๋จ๋จ
- ์ ํํ๊ท๋ชจ๋ธ์ ๋นํ์ฌ ๋
๋ฆฝ๋ณ์๋ค์ด ์ ์ฒด์ ์ผ๋ก ์ถ์ธ์ ์ ๊ฐ๊น๊ฒ ์์นํ๊ณ ์๊ธฐ์
์ค์ฐจ๊ฐ ์ ์ ๋ชจ๋ธ์ด๋ผ๊ณ ํ๋จ๋จ
๊ณผ์ / ๊ณผ๋ ์ ํฉ์ ํด์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- ๋ฐ์ดํฐ ์(row๋ฐ์ดํฐ, ํ)์ ๋๋ฆด ์ ์๋์ง ํ์ธ
- ๋ถ์ ๋ชจ๋ธ์ด ์ข ๋ ์ง์คํด์ ํ๋ จํ ์ ์๋๋ก -> ํน์ฑ(๋
๋ฆฝ๋ณ์)๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ ํ์ธ
-> ํน์ฑ์ ์ถ๊ฐ(๋๋ฆฌ๋)ํ๋ ๋ฐฉ๋ฒ์ "ํน์ฑ๊ณตํ" ๊ฐ๋
์ ์ ์ฉ
-> ํน์ฑ์ ๋๋ ค์ ์ฌ์ฉํ๋ ๋ชจ๋ธ๋ก ๋ค์คํ๊ท๋ชจ๋ธ์ด ์์
-> ํน์ฑ์ ๋๋ฆฐ๋ค๋ ์๋ฏธ๋ ํ๋ จ์ ๋ณต์ก๋๋ฅผ ์ฆ๊ฐ์ํจ๋ค๊ณ ํํํ๋ฉฐ,
๋ณต์ก๋๊ฐ ์ฆ๊ฐ๋๋ฉด, ํ๋ จ์ ์ง์ค๋ ฅ์ด ๊ฐํด์ง๊ฒ ๋จ
- ๋ณต์ก๋๋ฅผ ๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ท์ ๋ฐฉ๋ฒ์ด ์์
-> ๊ท์ ๋ฅผ ํ๋ ํ์ดํผํ๋ผ๋ฉํฐ ์์ฑ์ ์ด์ฉํ๋ ๋ฐฉ์์ผ๋ก
-> ๋ฆฟ์ง์ ๋ผ์ ํ๊ท๋ชจ๋ธ ๋ฐฉ์์ด ์์
- ์ด์ธ ๋ค๋ฅธ ํ๊ท๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋น๊ต
-- ํน์ฑ => ์ปฌ๋ผ, ํ๋, ํจ์ฒ ๋ชจ๋ ๊ฐ์ ์๋ฏธ
-- ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ถ์ผ์์๋ ์ปฌ๋ผ ๋๋ ํ๋๋ผ๊ณ ์นญํ๋ฉฐ,
๋จธ์ ๋ฌ๋์์๋ ํน์ฑ์ด๋ผ๊ณ ์นญํ๋ฉฐ,
๋ฅ๋ฌ๋์์๋ ํจ์ฒ๋ผ๊ณ ์นญํฉ๋๋ค.