인곡지λŠ₯ 🌌/λ¨Έμ‹ λŸ¬λ‹

[λ¨Έμ‹ λŸ¬λ‹] νšŒκ·€ - λ‹¨μˆœ μ„ ν˜• νšŒκ·€λΆ„μ„

23.8 2021. 7. 29. 10:44
λ°˜μ‘ν˜•

 

νšŒκ·€λΆ„μ„μ΄λž€


νšŒκ·€λΆ„μ„μ€ λ…λ¦½λ³€μˆ˜μ™€ μ’…μ†λ³€μˆ˜μ˜ 관계λ₯Ό  μΆ”μ •ν•˜λŠ” 톡계뢄석이닀.

예λ₯Ό λ“€μ–΄μ„œ,  각 μ§‘λ§ˆλ‹€ 아버지와 μ•„λ“€μ˜ ν‚€λ₯Ό μ‘°μ‚¬ν•΄μ„œ μ•„λ²„μ§€μ˜ ν‚€κ°€ μ•„λ“€μ˜ 킀에 μ–Όλ§ŒνΌμ˜ 영ν–₯을 λ―Έμ³€λŠ”μ§€ 쑰사λ₯Ό ν•œλ‹€κ³  ν•˜μž.

이 λ•Œ, μ•„λ²„μ§€μ˜ ν‚€λ₯Ό x라고 ν•˜κ³  μ•„λ“€μ˜ ν‚€λ₯Ό y라고 ν•  수 μžˆλ‹€. 그리고 x와 y의 관계λ₯Ό μΆ”μ • μ‹œ, μ–΄λŠμ •λ„μ˜ μ˜€μ°¨κ°€ λ°œμƒν•œλ‹€.
이 였차λ₯Ό λ°˜μ˜ν•΄μ„œ x와 yκ°€ μ–Όλ§ˆλ§ŒνΌ 관련이 μžˆλŠ”μ§€λ₯Ό μ°ΎλŠ” 것을 νšŒκ·€λΆ„μ„μ΄λΌκ³  ν•œλ‹€

즉, x와 yμ‚¬μ΄μ˜ 관계λ₯Ό ν•¨μˆ˜μ‹μœΌλ‘œ λ‚˜νƒ€λ‚΄κ³  μ΄λŸ¬ν•œ 식을 ν†΅ν•΄μ„œ yλ₯Ό μ˜ˆμΈ‘ν•˜λŠ” 것이닀.

 

 

 


λ‹¨μˆœ μ„ ν˜• νšŒκ·€λΆ„μ„

 

νšŒκ·€μ—λ„ λ‹€μ–‘ν•œ 방법이 있으며 κ·Έ 쀑 μ„ ν˜•νšŒκ·€λΆ„μ„μ΄ 제일 κ°„λ‹¨ν•˜λ‹€. 

λ‹¨μˆœ μ„ ν˜• νšŒκ·€λΆ„μ„μ€ μž…λ ₯λ³€μˆ˜ X와 좜λ ₯λ³€μˆ˜ Yκ°€ μ„ ν˜•μ μΈ 관계에 μžˆμ„ λ•Œ μ‚¬μš©κ°€λŠ₯ν•œ 뢄석 방법이닀.

μ΄λ•Œ x와 yμ‚¬μ΄λŠ” μ„ ν˜• 1μ°¨ ν•¨μˆ˜λ‘œ ν‘œν˜„ ν•  수 μžˆλ‹€.

 

νšŒκ·€μ‹μ€ μ•„λž˜μ™€ 같이 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

μ—¬κΈ°μ„œ 베타0λŠ” 절편, 베타1은 기울기이며 각 베타듀을 νšŒκ·€κ³„μˆ˜(coefficients)라고 λΆ€λ₯Έλ‹€

 

νšŒκ·€λΆ„μ„μ€ μž…λ ₯ 데이터 X와 좜λ ₯λ³€μˆ˜ Y의 관계λ₯Ό μΆ”μ •ν•˜μ—¬ μš°λ¦¬κ°€ μ•Œμ§€ λͺ»ν•˜λŠ” x(μƒˆλ‘œμš΄ μž…λ ₯ 데이터)에 λŒ€ν•œ  좜λ ₯ 값인 Yλ₯Ό μ˜ˆμΈ‘ν•˜κΈ° μœ„ν•¨μ΄λ‹€. 그렇기에 X와 Yλ₯Ό 톡해 νšŒκ·€ 식을 μΆ”μ •ν•΄μ•Ό ν•œλ‹€.

νšŒκ·€ 식을 μΆ”μ •ν•˜λŠ” 방법은 νšŒκ·€κ³„μˆ˜μ— x와 y의 값을 λ„£μœΌλ©΄μ„œ ν•™μŠ΅μ„ μ‹œν‚€λŠ”λ°, μž”μ°¨(μ‹€μ œ κ°’ - μΆ”μ •ν•œ κ°’)κ°€ μ΅œμ†Œκ°€ 되게 λ§Œλ“€λ©΄ λœλ‹€.
즉 μš°λ¦¬μ—κ²Œ 주어진 X데이터와 Y데이터가 μžˆμ„ λ•Œ X데이터λ₯Ό ν†΅ν•΄μ„œ μž„μ˜λ‘œ Y값인 Y햇을 좔정해보고 이λ₯Ό μ‹€μ œ Yκ°’κ³Ό λΉ„κ΅ν•˜λ©΄μ„œ κ·Έ 였차λ₯Ό μ€„μ—¬λ‚˜κ°€λ©΄ λ˜λŠ” 것이닀.
μ΄λ•Œ μž”μ°¨λŠ” λ‹¨μˆœνžˆ 각 Xλ“€μ˜ μž”μ°¨μ˜ 합을 0으둜 λ§Œλ“œλŠ” 것이 μ•„λ‹ˆλΌ, μž”μ°¨μ˜ 값을 μ œκ³±ν•˜μ—¬ κ·Έ 값이 μ΅œμ†Œκ°€ 되게 λ§Œλ“ λ‹€.
그리고 이런 μž”μ°¨μ˜ μ œκ³±ν•©μ„ SSE(Error Sum of Squares)라고 ν•˜λ©° μ•„λž˜μ™€ 같은 μ‹μœΌλ‘œ ν‘œν˜„ν•  수 μžˆλ‹€.

*ei = μ‹€μ œ κ°’ - μΆ”μ •ν•œ κ°’

 

 

 

 

 


νšŒκ·€λΆ„μ„μ˜ 정확도 평가

 

SSE 즉 μ‹€μ œκ°’κ³Ό μš°λ¦¬κ°€ μΆ”μ •ν•œ κ°’μ˜ 차이인 μž”μ°¨κ°€ μž‘μ„μˆ˜λ‘ 정확도가 λ†’λ‹€.


νšŒκ·€λΆ„μ„μ˜ 정확도λ₯Ό ν‰κ°€ν•˜κΈ° μœ„ν•œ κ²€μ • 방법 쀑 ν•˜λ‚˜λ‘œλŠ” R-Squaredκ°€ μžˆλ‹€.

R2λŠ” 0~1 μ‚¬μ΄μ˜ 값을 가지며, 1에 κ°€κΉŒμšΈ 수둝 μ„ ν˜•νšŒκ·€ λͺ¨ν˜•μ˜ μ„€λͺ…λ ₯이 λ†’λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

μ„€λͺ…λ ₯이 λ†’λ‹€λŠ” 것은, Y의 총 변동을 X둜 μ–Όλ§ˆλ‚˜ 잘 μ„€λͺ…ν•˜λƒλŠ” 것이닀.

 

R2λŠ” μ•„λž˜μ™€ 같은 μ‹μœΌλ‘œ μ„€λͺ…κ°€λŠ₯ν•˜λ‹€.

SST : μ‹€μ œκ°’ - y평균

SSE : μ‹€μ œκ°’ - μ˜ˆμΈ‘κ°’

SSR : μ˜ˆμΈ‘κ°’ - y평균

 



λ‹¨μˆœ μ„ ν˜• νšŒκ·€λΆ„μ„ μ‹€μŠ΅


sklearn의 datasets쀑 Boston데이터λ₯Ό μ΄μš©ν•˜μ—¬ CRIM λ³€μˆ˜λ‘œ PRICE 값을 μ˜ˆμΈ‘ν•˜λŠ” μ„ ν˜• νšŒκ·€λΆ„μ„ λͺ¨λΈ λ§Œλ“€κΈ°

 

-데이터 μ€€λΉ„

#ν•„μš”ν•œ λͺ¨λ“ˆ 뢈러였기
import pandas as pd
import numpy as np
from sklearn import datasets

#데이터 뢈러였기
boston = datasets.load_boston()

#데이터 확인
print(boston.DESCR)

#dataframe으둜
boston_df = pd.DataFrame(boston.data, columns = boston.feature_names)
boston_df.head()

boston_df["PRICE"] = pd.DataFrame(boston.target)
boston_df.info()


-νšŒκ·€λΆ„μ„

import statsmodels.api as sm

price = boston_df[["PRICE"]]
crim = boston_df[["CRIM"]]

#μƒμˆ˜ν•­ μΆ”κ°€ν•˜κΈ°
crim1 = sm.add_constant(crim, has_constant='add')
crim1

#νšŒκ·€
reg = sm.OLS(price, crim1)
fitted_model = reg.fit()
fitted_model.summary()


-νšŒκ·€μ‹ 계산

print(fitted_model.params) 

#ν–‰λ ¬λ‘œ μ˜ˆμΈ‘ν•œ κ°’ 
np.dot(crim1, fitted_model.params)

#ν•¨μˆ˜λ‘œ μ˜ˆμΈ‘ν•œ κ°’ 
pred=fitted_model.predict(crim1) 
pred

#ν•¨μˆ˜λ‘œ μ˜ˆμΈ‘ν•œ κ°’κ³Ό ν–‰λ ¬λ‘œ μ˜ˆμΈ‘ν•œ κ°’μ˜ 차이 
pred-np.dot(crim1, fitted_model.params)


-μ‹œκ°ν™”

import matplotlib.pyplot as plt

#데이터와 νšŒκ·€μ‹μ„ ν†΅ν•œ 에츑값 비ꡐ
plt.scatter(crim, price, label = "data")
plt.plot(crim, pred, label = "result")
plt.legend()
plt.show()

#μž”μ°¨ν™•μΈ
fitted_model.resid.plot()
plt.xlabel("residual_number")
plt.show()
728x90
λ°˜μ‘ν˜•