๐ถ ํ์ต ๋ฒ์
- ๋จธ์ ๋ฌ๋ ๊ฐ์ธ๊ณต๋ถ
- ๋จธ์ ๋ฌ๋ ํน๊ฐ
๐ถ ๊ณต๋ถ ๋ด์ฉ
โจ ๋จธ์ ๋ฌ๋
๐ฉ ๊ฐ๋
> ์ค์ผ์ผ(Scale)์ด ๋ค๋ฅด๋ค?
- ํน์ฑ ๊ฐ์ ๊ฐ์ ๋ฒ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ ex) ๊ธธ์ด๋ 10~40, ๋์ด๋ 100~1000
- ์ด๋ฐ ๊ฒฝ์ฐ, ๊ทผ์ ๋ฐ์ดํฐ ํ์
๋ฑ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์
- ์ ๊ทํ (๋ฒ์ ๊ฐ์ ๋์ผํ๊ฒ ๋ง์ถฐ์ฃผ๋ ์์
)์ด ํ์ํจ
> ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๊ธฐ์ค์ด ๋ค๋ฅด๋ฉด ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์์ธกํ ์ ์์
- ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ์ธ ๊ฒฝ์ฐ ํนํ ๊ทธ๋ ๋ค
- ์ฌ๊ธฐ์๋ k-์ต๊ทผ์ ์ด์ ๋ชจ๋ธ๋ ํฌํจ
- ์ ๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํน์ฑ๊ฐ์ ์ผ์ ํ ๊ธฐ์ค์ผ๋ก ๋ง์ถฐ ์ฃผ์ด์ผ ํจ
- ์ด๋ฐ ์์
์ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ(data preprocessing)๋ผ๊ณ ํจ
๐ฉ ์ฉ์ด
โจ ๋ถ์ฐ(Variance)
- ๋ฐ์ดํฐ๊ฐ ํ๊ท ์ผ๋ก๋ถํฐ ์ผ๋ง๋ ํผ์ ธ ์๋์ง๋ฅผ ๋ํ๋ด๋ ํต๊ณ ์งํ
- ๋ฐ์ดํฐ ๊ฐ์ด ํ๊ท ์์ ์ผ๋ง๋ ๋จ์ด์ ธ ์๋์ง๋ฅผ ์ ๊ณฑํ์ฌ ํ๊ท ์ ๊ตฌํ ๊ฐ
- ๋ถ์ฐ์ด ํฌ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋๊ฒ ํผ์ ธ ์๊ณ , ๋ถ์ฐ์ด ์์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ํ๊ท ์ ๊ฐ๊น์ด ๋ชจ์ฌ ์์์ ์๋ฏธ
โ๏ธ ๋ถ์ฐ์ ํน์ง
1. ๊ฐ์ ๋จ์
- ๋ฐ์ดํฐ์ ๋จ์๋ฅผ ์ ๊ณฑํ ๋จ์๋ฅผ ๊ฐ์ง (์: cm², kg² ๋ฑ)
2. ๋ถ์ฐ์ด 0์ธ ๊ฒฝ์ฐ
- ๋ชจ๋ ๋ฐ์ดํฐ ๊ฐ์ด ๋์ผ
3. ๋ถ์ฐ์ด ํด์๋ก
- ๋ฐ์ดํฐ ๊ฐ๋ค์ด ํ๊ท ์ผ๋ก๋ถํฐ ๋ ๋๊ฒ ํผ์ ธ ์์
โ๏ธ ๋ถ์ฐ์ ํ์ฉ
1. ๋ฐ์ดํฐ ๋ถ์
- ๋ฐ์ดํฐ์ ๋ถํฌ์ ํผ์ง ์ ๋๋ฅผ ํ์
2. ๋จธ์ ๋ฌ๋
- ํน์ฑ(feature) ๊ฐ ์ค์๋ ๋น๊ต
- ๋ถ์ฐ์ด ๋๋ฌด ํฐ ๊ฒฝ์ฐ ์ค์ผ์ผ๋ง ํ์
3. ๊ธ์ต
- ํฌ์ ์์ต๋ฅ ์ ๋ณ๋์ฑ ๋ถ์
โจ ์ค์ผ์ผ(Scale) :: ๋ฐ์ดํฐ์ ํน์ฑ(Feature) ๋ฒ์
โจ ์ค์ผ์ผ๋ง(Scaling)
- ๋ฐ์ดํฐ์ ํน์ฑ(Feature) ๋ฒ์๋ฅผ ์กฐ์ ํ๋ ์์
- ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ฑ๋ฅ๊ณผ ํ์ต ์์ ์ฑ์ ๋์ด๋ ๋ฐ ์ค์
โ๏ธ ์ค์ผ์ผ๋ง ์ด์
1. ํน์ฑ ๊ฐ ํฌ๊ธฐ ์ฐจ์ด ์กฐ์
- ์๋ก ๋ค๋ฅธ ๋จ์๋ ๋ฒ์๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ ๊ฐ ๊ท ํ ์ ์ง
2. ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ
- k-NN, SVM, K-means ๋ฑ์ ๋ชจ๋ธ์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ์ ์ํฅ์ ๋ฐ์
3. ๊ฒฝ์ฌํ๊ฐ๋ฒ ๊ธฐ๋ฐ ๋ชจ๋ธ
- ์ค์ผ์ผ ์ฐจ์ด๊ฐ ํฌ๋ฉด ํ์ต์ด ๋๋ ค์ง
โ๏ธ ์ฃผ์ ์ค์ผ์ผ๋ง ๋ฐฉ๋ฒ
1. ํ์คํ(Standardization)
- ํ๊ท ์ 0, ํ์คํธ์ฐจ๋ฅผ 1๋ก ๋ง์ถค. ์ ๊ท๋ถํฌ์ ์ ํฉ
2. ์ ๊ทํ(Min-Max)
- ๊ฐ์ 0~1 ๋ฒ์๋ก ์กฐ์ . ๋ฐ์ดํฐ๊ฐ ๊ณ ๋ฅด๊ฒ ๋ถํฌ๋ ๊ฒฝ์ฐ ์ ํฉ
3. ๋ก๋ฒ์คํธ ์ค์ผ์ผ๋ง
- ์ค์๊ฐ(median)๊ณผ IQR(์ฌ๋ถ์ ๋ฒ์)์ ์ฌ์ฉ. ์ด์์น(outlier)์ ๋ฏผ๊ฐํ์ง ์์
4. ์ ๊ทํ(Normalization)
- ๊ฐ๋ณ ๋ฐ์ดํฐ ์ํ์ ๋ฒกํฐ ํฌ๊ธฐ๋ฅผ 1๋ก ์กฐ์ . ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ(k-NN, SVM)์ ์ ํฉ
5. ๋ก๊ทธ ์ค์ผ์ผ๋ง
- ๊ฐ์ ๋ฒ์๊ฐ ๋๊ฑฐ๋ ํ์ชฝ์ผ๋ก ์น์ฐ์น ๊ฒฝ์ฐ ์ฌ์ฉ
โจ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ(data preprocessing)
- ๋ฐ์ดํฐ ๋ถ์์ด๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ ์ฉํ๊ธฐ ์ ์, ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๊ณ ๋ณํํ๋ ๊ณผ์
- ๋ฐ์ดํฐ์ ํ์ง์ ๋์ด๊ณ , ๋ชจ๋ธ์ ์ฑ๋ฅ๊ณผ ์ ํ๋๋ฅผ ํฅ์์ํค๋ ๋ฐ ๋ชฉ์
โ๏ธ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์ด์
1. ๊ฒฐ์ธก๊ฐ ๋ฐ ์ด์์น ์ฒ๋ฆฌ
- ๋ฐ์ดํฐ์ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํด ๋ถ์์ ์ ํ๋๋ฅผ ๋์
2. ํน์ฑ ๊ฐ ํฌ๊ธฐ ์ฐจ์ด ์กฐ์
- ๋ชจ๋ธ ํ์ต ๊ณผ์ ์ด ํจ์จ์ ์ด๊ณ ์์ ์ ์ผ๋ก ์งํ๋๋๋ก ๋์
3. ๋ชจ๋ธ ์ฑ๋ฅ ํฅ์
- ์ ์ฒ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ ํ์ง์ ๋์ด๋ฉด ๋ชจ๋ธ์ ์์ธก ์ฑ๋ฅ๋ ๊ฐ์ ๋จ
โ๏ธ ์ฃผ์ ์ ์ฒ๋ฆฌ ์์
1. ๊ฒฐ์ธก๊ฐ ์ฒ๋ฆฌ
- ๋ฐ์ดํฐ์ **๋น์ด ์๋ ๊ฐ(NaN)**์ด ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฑ์ฐ๊ฑฐ๋ ์ ๊ฑฐ
2. ์ค์ผ์ผ๋ง(Scaling)
- ๊ฐ ํน์ฑ์ ํฌ๊ธฐ ์ฐจ์ด๋ฅผ ์ค์ฌ ๋ชจ๋ธ ํ์ต์ ์์ ํ
- ์: ๋ฐ์ดํฐ๋ฅผ 0~1 ๋ฒ์๋ก ๋ณํํ๊ฑฐ๋, ํ๊ท 0, ํ์คํธ์ฐจ 1๋ก ๋ณํ
3. ๋ฐ์ดํฐ ์ธ์ฝ๋ฉ
- ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ซ์๋ก ๋ณํ
4. ์ด์์น ์ฒ๋ฆฌ
- ๋น์ ์์ ์ธ ๊ฐ(Outliers)์ ์ ๊ฑฐํ๊ฑฐ๋ ์์
5. ๋ฐ์ดํฐ ์ ๊ทํ
- ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ๋ฒ์๋ก ์กฐ์ ํด ๊ท ํ์ ๋ง์ถค
import matplotlib.pyplot as plt # ๋งทํ๋กฏ๋ฆฝ
import numpy as np # ๋ํ์ด
from sklearn.model_selection import train_test_split # ํ
์คํธ ์ ํธ๋ฆฌํฐ (ํ๋ จ์ธํธ, ํ
์คํธ์ธํธ ๊ตฌ์ฑ)
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
# ๋ฐ์ดํฐ๊ฐ ํด ์๋ก ํ์ด์ฌ ๋ฆฌ์คํธ๋ ๋นํจ์จ์ => ๋ํ์ผ ๋ฐฐ์ด ์ฌ์ฉ
fish_data = np.column_stack((fish_length, fish_weight))
fish_target = np.concatenate((np.ones(35), np.zeros(14)))
# train_test_split() ์ผ๋ก ํ๋ จ์ธํธ์ ํ
์คํธ์ธํธ ์์ฑ
train_input, test_input, train_target, test_target = train_test_split(fish_data, fish_target, stratify=fish_target, random_state=42)
# ํ์ต
kn = KNeighborsClassifier()
kn.fit(train_input, train_target)
kn.score(test_input, test_target)
kn.predict([[25, 150]])
# ์๊ฐํ
plt.scatter(train_input[:,0], train_input[:,1])
plt.scatter(25, 150, marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()
๐ถ ๋๋์
1. ํด๋ ํด๋ ๋์ด ์๋ค.
2. 12์๊ฐ์ด ์งง๊ณ ๋ ๊ธธ๋ค ์๋๋ฐ ์๋๋ค ์งง๋ค.
3. ์ปจ๋์
๊ด๋ฆฌ๋ฅผ ์ํ์