์ ๋ฒ์๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๊ตฌํํ๋ ๊ธฐ์ด์ ์ธ ํ๋ฆ์ ๋ํด์ ๊ณต๋ถ๋ฅผ ํ๋ฉด์, ํนํ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ฌ์ด KNN ๋ถ๋ฅ ์๊ณ ๋ฆฌ์ฆ์ ์ค์ฌ์ผ๋ก ์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ค. ์ด๋ฒ์๋ KNN ํ๊ท ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ๊ณต๋ถ๋ฅผ ํด๋ณด์๋ค.
ํ๊ท Regression
์ง๋ํ์ต ์๊ณ ๋ฆฌ์ฆ์ ํฌ๊ฒ ๋ถ๋ฅ์ ํ๊ท๋ก ๋๋๋ค.
์์์ ๋ค๋ฃฌ ๋ถ๋ฅ๋ ์ํ์ ๋ช ๊ฐ์ ํด๋์ค ์ค ํ๋๋ก ๋ถ๋ฅํ๋ ๋ฌธ์ ์ด๋ค. ์๋ฅผ ๋ค์ด, ํน์ง๋ค์ ์ฃผ๊ณ ์ด ๊ฒ์ด ๊ณ ์์ด์ธ์ง ๊ฐ์ธ์ง ๋ถ๋ฅํ๋ ๋ฌธ์ ๊ฐ ์ฌ๊ธฐ์ ํด๋นํ๋ค. ํ์ง๋ง ํ๊ท๋ ์์์ ์ด๋ค ์ซ์๋ฅผ ์์ธกํ๋ ๋ฌธ์ ์ด๋ค. ์๋ฅผ ๋ค์ด, ๋ฉด์ ๊ณผ ๋ฐฉ ๊ฐ์ ๋ฑ์ ํน์ง์ ์ฃผ๋ฉด ์ด ์ง์ ๊ฐ๊ฒฉ์ ์์ธกํ๋ ๋ฌธ์ ๊ฐ ์ฌ๊ธฐ์ ํด๋นํ๋ค.
ํ๊ท๋ผ๋ ๋ง์ 'ํต๊ณ'์ ์กฐ๊ธ์ด๋ผ๋ ๋ค๊ฐ๊ฐ๋ฉด ๋ฐ๋์ ํ๋ฒ์ ๊ฑด๋๋ฆฌ๋ ๋ง์ธ ๋ฏํ์ฌ ์ ๋ง ๋ง์ด ๋ค์ด๋ ๋ณด์์ง๋ง ์ ํํ ๋ฌด์จ ๊ฐ๋ ์ธ์ง๋ ์ ๋ชจ๋ฅด๊ณ ์ง๋ด์์๋ค. ์ด๋ฒ ๊ธฐํ์ ๋๋ฌด์ํค ์ฝ๋ฏ ํ๋ฒ ์์๋ณด์๋ค.
ํ๊ท์ ์ญ์ฌ
ํ๊ท๋ ์๊ตญ์ ํต๊ณํ์ ํ๋์์ค ๊ณจํด(Galton)์ด 19์ธ๊ธฐ ํ๋ฐ์ ์ฒ์ ์ฌ์ฉํ๋ค. ๋ถ๋ชจ์ ํค์ ์๋ ์ ํค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ฐ๊ตฌํ๋ฉฐ, ์๋ ์ ํค๊ฐ ๋ถ๋ชจ๋ณด๋ค ํ๊ท ์ ๋ ๊ฐ๊น์์ง๋ ๊ฒฝํฅ์ด ์์์ ๋ฐ๊ฒฌํ์๊ณ , ์ด๋ฅผ"ํ๊ท ์ผ๋ก์ ํ๊ท"๋ผ๊ณ ๋ถ๋ฅด๊ธฐ ์์ํ๋ค. ์ด ์ฐ๊ตฌ๋ ์ถํ์ ํ๊ตฌ ๋ถ์(Regression Analysis)๋ผ๋ ํต๊ณ ๊ธฐ๋ฒ์ผ๋ก ๋ฐ์ ํ๋ค.
20์ธ๊ธฐ ์ด, ๊ณจํด์ ์ฐ๊ตฌ๋ฅผ ๋ฐํ์ผ๋ก ์นผ ํผ์ด์จ(Carl Pearson)์ด ์๊ด๊ด๊ณ(Correlation) ๊ฐ๋ ์ ์ํ์ ์ผ๋ก ์ ๋ฆฌ๋ฅผ ํ๊ณ , Fisher๋ ์ต์์ ๊ณฑ๋ฒ(Least Squares Method)๋ฅผ ๋ฐ์ ์์ผ์ ํ๊ท ๋ชจ๋ธ์ ๋ณด๋ค ์ ๊ตํ๊ฒ ๋ง๋ค์๋ค. ์ด ์๊ธฐ๋ถํฐ ํ๊ท๋ถ์์ ํต๊ณํ๊ณผ ๊ฒฝ์ ํ์์ ์ค์ํ ๋๊ตฌ๋ก ์๋ฆฌ์ก๊ฒ ๋์๋ค. *์ฌ๊ธฐ์ Pearson ์๊ด๊ณ์(r)์ธ ๋ ๋ณ์๊ฐ์ ๊ด๊ณ์ฑ ๊ณ์, LSM๊ณผ ANOVA ๊ธฐ๋ฒ์ด ๋ฑ์ฅํ๋ค.
20์ธ๊ธฐ ์ค๋ฐ๋ถํฐ ํ๋ฐ๊น์ง๋ ํ๊ท ๋ชจ๋ธ์ด ์ฌ๋ฌ๊ฐ์ง ํํ๋ก ํ์ฅ๋๊ธฐ ์์ํ๋ค. ๊ธฐ๋ณธ์ ์ธ ๋ชจ๋ธ๋ก ์ ํํ๊ท(Linear Regression)์ด ์๋ฆฌ ์ก์๊ณ , ํ์ฅ๋ ๋คํญ ํ๊ท(Polynomial Regression), ๋ก์ง์คํฑ ํ๊ท(Logistic Regression)์ด ๋ฑ์ฅํ๊ฒ ๋์๋ค. ์ด ๋๋ถํฐ๋ ๊ฒฝ์ ํ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฆฌํ, ์๋ฌผํ, ์ฌํ๊ณผํ ๋ถ์ผ์์ ์์ธก๋ชจ๋ธ๋ก ํ์ฉ๋๊ธฐ ์์ํ๋ค.
21์ธ๊ธฐ์๋ ์ปดํจํฐ์ ๋ฐ์ ์ผ๋ก ํ๊ท ๋ชจ๋ธ์ ๋ ๋ณต์กํ ๋ฐ์ดํฐ์ ํ์ฉํ ์ ์๊ฒ ๋์๋ค. ์ด์ ๋ค์คํ๊ท(Multiple Regression), ๋ฆฟ์ง ํ๊ท(Ridge Regression), ๋ผ์ํ๊ท(Lasso Regression), ์ํฌํธ ๋ฒกํฐ ํ๊ท(SVR) ๋ฑ์ด ๋ฑ์ฅํ์๋ค๊ณ ํ๋ค. ๋ฟ๋ง ์๋๋ผ ํ๊ท๋ ๋จธ์ ๋ฌ๋๊ณผ ๋ฅ๋ฌ๋์ ํต์ฌ์์๋ก ์๋ฆฌ ์ก์, ๋๋คํฌ๋ ์คํธ ํ๊ท, ์ ๊ฒฝ๋ง ํ๊ท(๋ฅ๋ฌ๋), ๊ฐํํ์ต ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ธก ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ด ๋๊ณ ์๋ค.
์ฆ ํ์ฌ์ 'ํ๊ท'๋ ์ ๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ๊ฐ์ ๊ด๊ณ, ๋ค์๋งํด ๋ฐ์ดํฐ์ ํจํด์ ํ์ตํ์ฌ, ์ฐ์์ ์ธ ์ซ์ ๊ฐ์ ์์ธกํ๋ ํต๊ณํ์ / ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ด๋ผ๊ณ ํ ์ ์๋ค.
KNN๊ณผ ํ๊ท
ํ๊ท๊ฐ ๊ฒฐ๊ตญ ๋ฐ์ดํฐ์ ํจํด์ ํ์ตํ์ฌ, ์ซ์ ๊ฐ์ ์์ธกํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค๋ฉด, KNN ๊ธฐ๋ฒ์์๋ ์ด๋ป๊ฒ ํ๊ท๋ฅผ ์ ์ฉํ ์ ์์๊น? ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ์๊ฐํด๋ณด์.
(1) ์์ธกํ๋ ค๋ ์๋ก์ด ์ํ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ํ k๊ฐ๋ฅผ ์ ํํ๋ค
(2) ์ํ๋ค์ ํ๊น ๊ฐ์ ํ์ธํ์ฌ, ์์น๋ค์ ํ๊ท ์ ๊ตฌํ๋ค.
์๋ฅผ ๋ค์ด, ์ํํธ์ ํฌ๊ธฐ์ ๋งค๋งค๊ฐ ๋ฐ์ดํฐ๋ค์ ํ์ต์ํจ KNN ๋ชจ๋ธ์์ 38ํ ์ํํธ์ ๋งค๋งค๊ฐ๋ฅผ ๊ตฌํ๊ณ ์ถ์ ์ํฉ์ด๋ผ๋ฉด, 38ํ๊ณผ ๊ฐ๊น์ด ํ์ต๋ฐ์ดํฐ์ ์ํ k๊ฐ, ์ด๋ฅผํ ๋ฉด 37ํ, 37.5ํ, 38.3ํ์ ๋งค๋งค๊ฐ๋ฅผ ํ์ธํ๊ณ ๊ทธ ๊ฐ๋ค์ ํ๊ท ๋ธ ๊ฐ์ผ๋ก ๋ต์ ๋ด๋๊ฒ KNN ํ๊ท์ด๋ค.
ScikitLearn๊ณผ KNN Regression
์ง๊ธ๋ถํฐ๋ KNN Regression์ SciKitLearn์ผ๋ก ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ฒ ๋ค. ์ด์ ์ ํฌ์คํ ํ SciKitLearn์ KNN Classification๊ณผ ๋น๊ตํด์ ์งํํ๋ค. ํด๋น ๋ด์ฉ์ ์ด์ ํฌ์คํ ์์ ํ์ธํ ์ ์๋ค!
[์ธ๊ณต์ง๋ฅ ์์๊ฐ๊ธฐ] ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ KNN (K-์ต๊ทผ์ ์ด์, K-Nearest Neighbors) (1) KNN ๋ถ๋ฅ ๋ชจ๋ธ
์ด๋ฒ์๋ ๋จธ์ ๋ฌ๋์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ๋ฐ์ดํฐ์ ๊ตฌ์ถ ๊ทธ๋ฆฌ๊ณ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ๋ฑ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๊ตฌํํ๋ ๊ธฐ์ด์ ์ธ ํ๋ฆ์ ๋ํด์ ๊ณต๋ถ๋ฅผ ํด๋ณด์๋ค! ํนํ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ฌ
nyangwisdom.tistory.com
(1) ๋ฐ์ดํฐ์ ๋ง๋ จ
x : ๊ณ ์์ด์ ํค Array => 2์ฐจ์์ผ๋ก reshapeํด์ผํจ.
y : ๊ณ ์์ด์ ๋ชธ๋ฌด๊ฒ Array
2์ฐจ์์ผ๋ก Array๋ฅผ ์ ๋ฐ๊ฟ์ผํ๋๊ฐ? ๊ทธ๋ฅ ์ฌ์ดํท๋ฐ ํ๋ ์์์ ํ๋ จ์ธํธ๋ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ฃ์ด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค!
*2์ฐจ์์ผ๋ก Array๋ฅผ reshapeํ๋ ๋ฐฉ๋ฒ (numpy์ ๊ธฐ๋ฅ)
๋ง์ฝ array = [1, 2, 3, 4] ๋ผ๋ ๋ฐฐ์ด์ด ์๋ค๋ฉด, ์ด array๋ ์์๊ฐ 4๊ฐ์ธ 1์ฐจ์ array์ด๋ค.
print(array.shape)๋ฅผ ํด๋ณด๋ฉด (4, )์ด ๋์ฌ ๊ฒ์ด๋ค. ์ด๋ ์์๊ฐ 4๊ฐ์ด๋ฉฐ 1์ฐจ์์ด๋ผ๋ ๋ป์ด๋ค.
์ด array๋ฅผ 2์ฐจ์์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
array.reshape(4,1) ๊ธฐ๋ฅ์ผ๋ก, ์ง์ array.shape๋ฅผ (4, 1) ํํ๋ก ๋ฐ๊ฟ ์ ์๋ค. ์ด๋ ์์๊ฐ 4๊ฐ์ธ 2์ฐจ์ array๋ผ๋ ๋ป์ผ๋ก, [[1], [2], [3], [4]] ์ด๋ฐ์์ผ๋ก ์๊ฒผ์ ๊ฒ์ด๋ค.
ํน์ array.reshape(-1,1) ์ฒ๋ผ ์ธ ์๋ ์๋ค. ์ด๋ 2์ฐจ์ ํํ๋ก ๋ง๋ค๊ณ , -1์ ์์์ ์์๋ค์ ์ฑ์ด๋ค๋ ๋ป์ด๋ค.
cf) KNN Classification
X : (๊ณ ์์ด์ ๊ฐ์ ํค, ๊ณ ์์ด์ ๊ฐ์ ๋ชธ๋ฌด๊ฒ)์ 2์ฐจ์ Array
y : ๊ณ ์์ด์ธ์ง ๊ฐ์ธ์ง ๋ถ๋ฅ
(2) ํ ์คํธ ๋ฐ์ดํฐ์ ์ผ๋ก ๋๋๊ธฐ
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(x, y, random_state = N)
* ์ฌ๊ธฐ์ x๋ 2์ฐจ์ array๋ก reshape๋ ๊ณ ์์ด ํค ๋ฐ์ดํฐ
cf) KNN Classification
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(X, y, stratify=y, random_state = N)
*2์ฐจ์์ ํน์ฑ(feature) array๋ฅผ X๋ก ๋ฃ๊ณ , classification์ y๋ก ๋ฃ๋๋ค๋ ์ , ๊ทธ๋ฆฌ๊ณ y๋ก stratify๋ฅผ ํ๋ค๋ ์ ์์ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋ค.
(3) KNeighborsRegressor ํ๋ จ, scoring
from sklearn.neighbors import KNeighborsRegressor
knr = KNeighborsRegressor()
# KNN ํ๋ จ์ํค๊ธฐ
knr.fit(train_input, train_target)
# ์ด ๋ชจ๋ธ์ Score ํ์ธํ๊ธฐ : ๊ฒฐ์ ๊ณ์
print(knr.score(test_input, test_target))
KNeighborsClassifier์ ๋์ผํ๊ฒ fit(X, y)์ score() ๋ฉ์๋๋ก ๋ชจ๋ธ์ ํ๋ จ์ํค๊ณ ์ ํ๋๋ฅผ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ ๋ ์๋ค! Classifier์์ score๋ Accuracy(์ ํ๋)๋ก ์ผ๋ง๋ ์ ๋ต์ ๋ง์ท๋์ง์ ์ฌ๋ถ์๋ค. ๋ฐ๋ฉด Regressor๋ ์ฐ์์ ์ธ ์ซ์์์ ํ๊ฐ์ง ์์์ ๊ฐ์ ์์ธกํ๋ ๊ฒ์ด๊ธฐ์ ์ ํํ ์ ๋ต์ ๋ง์ถ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Regressor๋ "๊ฒฐ์ ๊ณ์(coefficient of determination, R² )"๋ฅผ ํตํด์ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํ๋ค.
๊ทธ๋ฌ๋ ๊ฒฐ์ ๊ณ์๊ฐ ๊ฐ์ง๊ณ ์๋ ํ๊ณ๋ ๋ถ๋ช ์กด์ฌํ๋ค. (ํ์ ํ์๋ค) ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ฐฉ์์ธ Mean Absolute Error(MAE)๋ก ํ๊ท ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ถ์ ํ ์๋ ์๋ค. ์ด๋ ํ๊น๊ณผ ์์ธก์ ์ ๋๊ฐ ์ค์ฐจ๋ฅผ ํ๊ท ํ์ฌ ๋ฐํํ ๊ฐ์ผ๋ก ๋ณด๋ค ์ง๊ด์ ์ผ๋ก ์ฑ๋ฅ์ ์ ์ ์๋ค.
from sklearn.metrics import mean_absolute_error
# ํ ์คํธ ์ธํธ์ ๋ํ ์์ธก
test_prediction = knr.predict(test_input)
# ํ ์คํธ ์ธํธ์ ๋ํ MAE
mae = mean_absolute_error(test_target, test_prediction)
ํ๊ท๋ชจ๋ธ์ ์ฑ๋ฅ ํ๊ฐ ๋ฐฉ์ : ๊ฒฐ์ ๊ณ์, MAE
๊ฒฐ์ ๊ณ์๋ ๋ฌด์์ธ๊ฐ ( R²)
๊ฒฐ์ ๊ณ์๋ ํ๊ท ๋ชจ๋ธ์ด ๋ฐ์ดํฐ๋ฅผ ์ผ๋ง๋ ์ ์ค๋ช ํ๋์ง๋ฅผ ๋ํ๋ด๋ ์งํ๋ก, 1์ ๊ฐ๊น์ธ ์๋ก ์์ธก์ด ๋ ์ ํํ ๋ชจ๋ธ์ด๋ผ๊ณ ํ ์ ์๋ค. ๋ถ์๋ ์์ธก๊ฐ๊ณผ ์ค์ ๊ฐ์ ์ฐจ์ด๋ก ์ค์ฐจ๋ฅผ ๋ด๊ณ ์๋ค. ๋ถ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ ํ๊ท ๊ฐ์ผ๋ก๋ง ์์ธกํ์ ๋ ์ค์ฐจ๋ ์ผ๋ง๋ ๋ ์ง๋ฅผ ๋ํ๋ด์ด, ์๋ ๋ฐ์ดํฐ ์์ฒด์ ๋ณ๋์ฑ์ ๋ด๊ณ ์๋ค.
์ฒ์์๋ ๋ถ์๊ฐ ๋ค์ด๊ฐ ์ด์ ๋ฅผ ์๊ฒ ๋๋ฐ, ๋ถ๋ชจ๋ ์ ๋ค์ด๊ฐ์ง ์ดํด๊ฐ ์๊ฐ์๋ค. ๊ทธ๋์ ๋ ์์๋ดค๋๋ฐ ๋ง์ฝ์ ๋ฐ์ดํฐ ์์ฒด์ ๋ณ๋์ฑ์ด ํฌ๋ค๋ฉด ๋ชจ๋ธ์ด ์กฐ๊ธ ๋ชป ๋ง์ถฐ๋ ๊ด์ฐฎ์ ์ ์์ผ๋, ๋ฐ์ดํฐ ์์ฒด์ ๋ณ๋์ด ์ ๋ค๋ฉด ๋ ์ ๊ตํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ค์ด๊ฐ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
1์ ๊ฐ๊น์ฐ๋ ค๋ฉด ์ ๋ถ์์์ ๋ถ์๊ฐ ๊ฑฐ์ 0์ ์๋ ดํด์ผํ๋ค. ์ฆ, ์ค์ ๊ฐ๊ณผ ์์ธก๊ฐ์ด ๊ฑฐ์ ์ผ์นํด์ผํ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ ์ด๋ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๊ด์ฐฎ๋ค๋ ์๋ฏธ๋ฅผ ๋ฐ์ํ๋ค.
๋ฐ๋ฉด 0์ ๊ฐ๊น์ฐ๋ ค๋ฉด ๋ถ์์ ๋ถ๋ชจ๊ฐ ๋น์ทํด์ผํ๋ค. ์ด๋ ๋ชจ๋ธ์ ์์ธก๊ฐ์ด ํ๊น์ ํ๊ท ์ ๋๋ฅผ ์์ธกํ๋ ์์ค์ผ ๊ฒ์ด๊ณ , ์์ธก์ ์๋ฏธ๊ฐ ๋ณ๋ก ์๋ค.
ํน์ ๋ถ์๊ฐ ๋ถ๋ชจ๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ ์์๊ฐ์ด ๋์ฌ ๊ฒ์ด๋ค. ์ด๋ ์คํ๋ ค ํ๊ท ๊ฐ๋ณด๋ค ๋ชปํ ๋ชจ๋ธ๋ก ์์ธก์ด ์์ ์ํฐ๋ฆฌ๋ผ๊ณ ํ ์ ์๋ค.
- → ์๋ฒฝํ ํ๊ท ๋ชจ๋ธ (๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ํํ ์์ธก๋จ)
- R² =0 → ๋ชจ๋ธ์ด ์๋ฌด๋ฐ ์ค๋ช ๋ ฅ์ ๊ฐ์ง์ง ๋ชปํจ (๋จ์ ํ๊ท ์ผ๋ก ์์ธกํ๋ ๊ฒ๊ณผ ๋์ผ)
- R² ์ด ์์์ด๋ฉด → ๋ชจ๋ธ์ด ๋ฐ์ดํฐ๋ฅผ ์ ํ ์ค๋ช ํ์ง ๋ชปํ๊ณ ์์ (์์ธก์ด ๋ฌด์๋ฏธํจ)
- R²์ด ๋ณดํต 0.8-0.99๋ฉด ๋งค์ฐ ์ข์ ์ฑ๋ฅ / 0.5-0.79๋ฉด ๋ณดํต ์์ค / 0.2-0.49๋ฉด ๋ฎ์ ์์ค / 0-0.19๋ฉด ๊ฑฐ์ ์ธ๋ชจ์๋ ์์ค์ด๋ผ๊ณ ํ๋ค.
ํ์ง๋ง ๊ฒฐ์ ๊ณ์๋ ๋น์ ํ ๊ด๊ณ์์๋ ์ ํ๋๊ฐ ๋ฎ์ ์ ์๋ค. ๋ค์๋งํด ๊ณก์ ํํ ๋ฑ์์๋ R² ๊ฐ์ด ๋ฎ๋๋ผ๋ ์ข์ ๋ชจ๋ธ์ผ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๋ํ ๋ ๋ฆฝ๋ณ์(Feature)๊ฐ ๋ง์์ง์๋ก R² ๊ฐ์ด ์๋์ผ๋ก ์ฆ๊ฐ๋๋ ๊ฒฝํฅ์ด ์์ด์, ๋ค์คํ๊ท๋ชจ๋ธ์ธ ๊ฒฝ์ฐ์๋ ์กฐ์ ๋ ๊ฒฐ์ ๊ณ์(Adjusted R²)๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
MAE Mean Absolute Error๋ ๋ฌด์์ธ๊ฐ?
MAE (Mean Absolute Error, ํ๊ท ์ ๋ ์ค์ฐจ)๋ ํ๊ท ๋ชจ๋ธ์ ์์ธก๊ฐ๊ณผ ์ค์ ๊ฐ ์ฌ์ด์ ํ๊ท ์ ์ธ ์ค์ฐจ ํฌ๊ธฐ๋ฅผ ์ธก์ ํ๋ ์งํ์ด๋ค. ์ฆ, ์์ธก๊ฐ์ด ์ค์ ๊ฐ๊ณผ ์ผ๋ง๋ ์ฐจ์ด๊ฐ ๋๋์ง๋ฅผ ํ๊ท ์ ์ผ๋ก ๋ํ๋ด๋ ๊ฐ์ด๋ผ๊ณ ํ ์ ์๋ค.
- MAE ๊ฐ์ด ์์์๋ก → ๋ชจ๋ธ์ ์์ธก์ด ์ค์ ๊ฐ๊ณผ ๋ ๊ฐ๊น์์ ์ฑ๋ฅ์ด ์ข์
- MAE ๊ฐ์ด ํด์๋ก → ๋ชจ๋ธ์ ์์ธก์ด ์ค์ ๊ฐ๊ณผ ๋ง์ด ์ฐจ์ด๊ฐ ๋๋ฏ๋ก ์ฑ๋ฅ์ด ๋์จ
๋จ์๊ฐ ์์ธก๊ฐ๊ณผ ๋์ผํ์ฌ ์ง๊ด์ ์ด๊ณ ํด์์ด ์ฌ์ฐ๋ฉฐ, Outlier๊ฐ ๋ง์๋ ์ ๋๊ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ๋ฏผ๊ฐํ๋ค๊ณ ํ๋ค.
KNN ํ๊ท ๋ชจ๋ธ์ ๊ณผ๋์ ํฉ(Overfitting)๊ณผ ๊ณผ์์ ํฉ(Underfitting), ๊ทธ๋ฆฌ๊ณ ํด๊ฒฐ์ฑ
์ ๋ฒ ํฌ์คํ ์์ ์ธ๊ธํ k๊ฐ์ ๋ฐ๋ฅธ ๊ณผ๋์ ํฉ๊ณผ ๊ณผ์์ ํฉ ๊ฐ๋ฅ์ฑ ๋ถ๋ถ์ ๋ค์ ๊ฐ์ ธ์๋ดค๋ค!
K๊ฐ์ด ๋๋ฌด ์์ผ๋ฉด (K=1, 2) : ๋ฐ์ดํฐ์ ๋ด ์ด์์น(Outlier)๊ฐ ์กด์ฌํ ์ ์๋๋ฐ, ํ ๋๊ฐ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๊ฐ์ ์ํฅ์ ํฌ๊ฒ ๋ฐ๊ฒ ๋ ์ ์๋ค. ๋ํ ๋ฐ์ดํฐ ํ๋ํ๋์ ๋๋ฌด ์์กดํ๊ฒ ๋์ด ์ผ๋ฐํํ๊ธฐ๊ฐ ์ด๋ ค์ธ ์ ์๋ค. ๋ฌด์๋ณด๋ค ๊ณผ์ ํฉ(Overfitting)์ด ๋ฐ์ํ ์ ์๋๋ฐ, ์ด๋ ํ๋ จ๋ฐ์ดํฐ์๋ง ์ต์ ํ๋์ด์ ์๋ก์ด ๋ฐ์ดํฐ์์ ํ ์คํธํ๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ํ์์ ์๋ฏธํ๋ค. ๋ค์ ๋งํด ๊ฐ๋ฐ์ ์ด๊ณ ๊ณผํ๋ค! ๊ณผ๋์ ํฉ
๋ฐ๋๋ก, K๊ฐ์ด ๋๋ฌด ํฌ๋ฉด (K=20, 50) : ๋ฐ์ดํฐ๊ฐ ํ๊ท ํ(Averaging)๋์ด์ ๊ฐ๋ณ ๋ฐ์ดํฐ์ ํน์ง์ด ํฌ์๋ ์ ์๋ค. ๋ชจ๋ธ์ด ๋๋ฌด ๋จ์ํด์ ธ์ (Underfitting) ์ญ์ ์ผ๋ฐํํ๊ธฐ ์ด๋ ค์์ง ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ํ๋ จ์ธํธ๋ณด๋ค ํ ์คํธ ์ธํธ์ ์ ์๊ฐ ๋๊ฑฐ๋, ๋ ์ ์๊ฐ ๋ชจ๋ ๋๋ฌด ๋ฎ๊ฒ ๋์ค๊ฒ ๋๋ค. ๋ค์๋งํด ๋๋ฌด ๋ฅ๊ธ๊ณ ๋ญ๋ฑ๊ทธ๋ ค์ ธ์ ๊ธฐ๋ฅ์ ์๋๋ค! ๊ณผ์์ ํฉ
๋ง์ฝ ํ๋ จ์ธํธ์ score๊ณผ ํ ์คํธ์ธํธ์ score๋ฅผ ๋น๊ตํ๋, ๊ณผ์์ ํฉ์ด ์์๋๋ฉด ์ด๋ป๊ฒ ํ ๊น? ์ด๋ฐ ๊ฒฝ์ฐ ๋ชจ๋ธ์ด ๋๋ฌด ๋จ์ํ๋ค๊ณ ์๊ฐํ๊ณ ๋ณต์กํ๊ฒ ๋ง๋ค๋ฉด ๋๋ค. KNN ๋ชจ๋ธ์์๋ ๋จ์ํ K๊ฐ์ ๋ฎ์ถ๋ฉด๋๋ค.
# ๊ธฐ๋ณธ๊ฐ์ธ k=5์์ 3์ผ๋ก ๋ณ๊ฒฝ
knr.n_neighbors = 3
์ฐธ๊ณ : ํผ์๊ณต๋ถํ๋ ๋จธ์ ๋ฌ๋+๋ฅ๋ฌ๋ (ํ๋น๋ฏธ๋์ด, ๋ฐํด์ )