๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Python

[Python] ๋จธ์‹ ๋Ÿฌ๋‹ 04_์„ ํ˜•ํšŒ๊ท€๋ชจ๋ธ, ๋‹คํ•ญํšŒ๊ท€๋ชจ๋ธ(๊ณก์„ )

by ITyranno 2023. 12. 25.
728x90
๋ฐ˜์‘ํ˜•

 

 

 

 

 

 

 

 

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„๋ฅผ ํƒ๊ตฌํ•ฉ์‹œ๋‹ค.

 

 

 

 

 

 

 

 

 

ํšŒ๊ท€๋ชจ๋ธ ์ข…๋ฅ˜

 

 

์„ ํ˜•ํšŒ๊ท€๋ชจ๋ธ, ๋‹คํ•ญํšŒ๊ท€๋ชจ๋ธ, ๋‹ค์ค‘ํšŒ๊ท€๋ชจ๋ธ, ๋ฆฟ์ง€, ๋ผ์˜, ๋žœ๋คํฌ๋ ˆ์ŠคํŠธ, ๊ทธ๋ ˆ๋””์–ธํŠธ๋ถ€์ŠคํŠธ, ํžˆ์Šคํ† ๊ทธ๋žจ๊ทธ๋ ˆ๋””์–ธํŠธ๋ถ€์ŠคํŠธ, 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๋ฐ์ดํ„ฐ, ํ–‰)์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
  - ๋ถ„์„ ๋ชจ๋ธ์ด ์ข€ ๋” ์ง‘์ค‘ํ•ด์„œ ํ›ˆ๋ จํ•  ์ˆ˜ ์žˆ๋„๋ก -> ํŠน์„ฑ(๋…๋ฆฝ๋ณ€์ˆ˜)๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ• ํ™•์ธ
    -> ํŠน์„ฑ์„ ์ถ”๊ฐ€(๋Š˜๋ฆฌ๋Š”)ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ "ํŠน์„ฑ๊ณตํ•™" ๊ฐœ๋…์„ ์ ์šฉ
    -> ํŠน์„ฑ์„ ๋Š˜๋ ค์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ๋กœ ๋‹ค์ค‘ํšŒ๊ท€๋ชจ๋ธ์ด ์žˆ์Œ
    -> ํŠน์„ฑ์„ ๋Š˜๋ฆฐ๋‹ค๋Š” ์˜๋ฏธ๋Š” ํ›ˆ๋ จ์˜ ๋ณต์žก๋„๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค๊ณ  ํ‘œํ˜„ํ•˜๋ฉฐ,
       ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€๋˜๋ฉด, ํ›ˆ๋ จ์˜ ์ง‘์ค‘๋ ฅ์ด ๊ฐ•ํ•ด์ง€๊ฒŒ ๋จ
  - ๋ณต์žก๋„๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๊ทœ์ œ ๋ฐฉ๋ฒ•์ด ์žˆ์Œ
    -> ๊ทœ์ œ๋ฅผ ํ•˜๋Š” ํ•˜์ดํผํŒŒ๋ผ๋ฉ”ํ„ฐ ์†์„ฑ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ
    -> ๋ฆฟ์ง€์™€ ๋ผ์˜ ํšŒ๊ท€๋ชจ๋ธ ๋ฐฉ์‹์ด ์žˆ์Œ
  - ์ด์™ธ ๋‹ค๋ฅธ ํšŒ๊ท€๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ต

  -- ํŠน์„ฑ => ์ปฌ๋Ÿผ, ํ•„๋“œ, ํ“จ์ฒ˜ ๋ชจ๋‘ ๊ฐ™์€ ์˜๋ฏธ
  -- ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ถ„์•ผ์—์„œ๋Š” ์ปฌ๋Ÿผ ๋˜๋Š” ํ•„๋“œ๋ผ๊ณ  ์นญํ•˜๋ฉฐ,
     ๋จธ์‹ ๋Ÿฌ๋‹์—์„œ๋Š” ํŠน์„ฑ์ด๋ผ๊ณ  ์นญํ•˜๋ฉฐ,
     ๋”ฅ๋Ÿฌ๋‹์—์„œ๋Š” ํ“จ์ฒ˜๋ผ๊ณ  ์นญํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•

loading