๐๐๐ก๐๐๐๐๐
๋จธ์ ๋ฌ๋ ์ํ๋ง ๋ณธ๋ฌธ
[ ๋ชฉ์ฐจ ]
์ํ๋ง (sampling)
: ๋จธ์ ๋ฌ๋์์ ๋ฐ์ดํฐ ๋ถ๊ท ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ํ ์ํ๋ง ๊ธฐ๋ฒ์ ์ฌ์ฉ
์ข ๋ฅ
1๏ธโฃ ์ค๋ฒ์ํ๋ง (OverSampling)
2๏ธโฃ ์ธ๋์ํ๋ง (UnderSampling)
3๏ธโฃํผํฉ ์ํ๋ง ( Over + Under )
1๏ธโฃ ์ค๋ฒ์ํ๋ง (OverSampling)
: ์์ ํด๋์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฆ๊ฐ์์ผ ๊ท ํ์ ๋ง์ถ๋ ๊ธฐ๋ฒ
(์ : ํ์๋งค๋ฌผ์ด ์ ์ ๊ฒฝ์ฐ, ํ์๋งค๋ฌผ ๋ฐ์ดํฐ๋ฅผ ์ธ์์ ์ผ๋ก ์์ฑ)
์ฃผ์ ๊ธฐ๋ฒ
- Random OverSampling
- ์์ ํด๋์ค ์ํ์ ๋จ์ ๋ณต์
- ์ฅ์ : ์ฝ๊ณ ๋น ๋ฆ
- ๋จ์ : ์ค๋ณต ๋ฐ์ดํฐ๋ก ๊ณผ์ ํฉ ์ํ
- ์์ ํด๋์ค ์ํ์ ๋จ์ ๋ณต์
- SMOTE (Synthetic Minority Over-sampling Technique)
- ์ต๊ทผ์ ์ด์(KNN) ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ฐ์ดํฐ ์์ฑ
- ๋ฐ์ดํฐ ๋ค์์ฑ์ด ์ฆ๊ฐ
- ์ค๋ณต ๋ฐ์ดํฐ๋ก ๊ณผ์ ํฉ ์ํ
- ์ต๊ทผ์ ์ด์(KNN) ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ฐ์ดํฐ ์์ฑ
- ADASYN (Adaptive Synthetic Sampling)
- SMOTE์์ ์ํ๋ง ๋น์จ์ ์กฐ์ ํ์ฌ ๊ทน๋จ์ ๊ธ๋ก ๋ถ์กฑํ ํด๋์ค์ ์ง์ค
- ์ฅ์ : ํ์ต ์ฑ๋ฅ ํฅ์ ๊ฐ๋ฅ
- ๋ ธ์ด์ฆ๊ฐ ์ถ๊ฐ ๋ ์ํ
- SMOTE์์ ์ํ๋ง ๋น์จ์ ์กฐ์ ํ์ฌ ๊ทน๋จ์ ๊ธ๋ก ๋ถ์กฑํ ํด๋์ค์ ์ง์ค
๐ ์ค๋ฒ์ํ๋ง ์ฝ๋ ์์ (ADASYN)
from imblearn.over_sampling import ADASYN
adasyn = ADASYN(random_state=42)
X_train_resampled, y_train_resampled = adasyn.fit_resample(X_train, y_train)
2๏ธโฃ ์ธ๋์ํ๋ง (UnderSampling)
: ๋ค์ ํด๋์ค์ ๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ ๊ท ํ์ ๋ง์ถ๋ ๊ธฐ๋ฒ
( ex : ์ ์ ๋งค๋ฌผ ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด ์ผ๋ถ๋ฅผ ์ ๊ฑฐ )
์ฃผ์ ๊ธฐ๋ฒ
- Random UnderSampling
- ๋ค์ ํด๋์ค ์ํ์ ๋ฌด์์๋ก ์ ๊ฑฐ
- ์ฅ์ : ๊ฐ๋จํ๊ณ ๋น ๋ฆ
- ๋จ์ : ์ค์ํ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง ์ํ
- ๋ค์ ํด๋์ค ์ํ์ ๋ฌด์์๋ก ์ ๊ฑฐ
- Tomek Links
- ๊ฒฝ๊ณ ๋ฐ์ดํฐ(Tomek link)๋ฅผ ์ ๊ฑฐํ์ฌ ์ํ ๊ท ํ ์กฐ์
- ์ฅ์ : ๋ชจ๋ธ ์ฑ๋ฅ ํฅ์ ๊ฐ๋ฅ
- ๋จ์ : ๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ์ฑ
- ๊ฒฝ๊ณ ๋ฐ์ดํฐ(Tomek link)๋ฅผ ์ ๊ฑฐํ์ฌ ์ํ ๊ท ํ ์กฐ์
- NearMiss
- ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ ํฌ์ธํธ๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ฅผ ์ ๊ฑฐ
- ์ฅ์ : ํ์ต ๋ฐ์ดํฐ ์ ์ค์ด๋ฉด์๋ ์ฑ๋ฅ ์ ์ง
- ๋จ์ : ๋ฐ์ดํฐ ์์ค ๋ฐ ์ ๋ณด ๋ถ์กฑ ๊ฐ๋ฅ
- ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ ํฌ์ธํธ๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ฅผ ์ ๊ฑฐ
๐ ์ธ๋์ํ๋ง ์ฝ๋ ์์ (NearMiss)
from imblearn.under_sampling import NearMiss
nearmiss = NearMiss()
X_train_resampled, y_train_resampled = nearmiss.fit_resample(X_train, y_train)
3๏ธโฃํผํฉ ์ํ๋ง ( Over + Under )
: ์ค๋ฒ์ํ๋ง๊ณผ ์ธ๋์ํ๋ง์ ํจ๊ป ์ ์ฉํ์ฌ ๊ท ํ์ ๋ง์ถ๋ ๋ฐฉ๋ฒ
( ex : smote + tomek links ์ฌ์ฉ)
์ฃผ์ ๊ธฐ๋ฒ
- SMOTE + Tomek Links
- SMOTE๋ก ์์ ํด๋์ค ์ฆ๊ฐ ํ, Tomek Links๋ก ๋ค์ ํด๋์ค ์ ๋ฆฌ
- ์ฅ์ : ๋ฐ์ดํฐ ๊ท ํ + ๋ ธ์ด์ฆ ๊ฐ์
- ์ฐ์ฐ๋ ์ฆ๊ฐ
- SMOTE๋ก ์์ ํด๋์ค ์ฆ๊ฐ ํ, Tomek Links๋ก ๋ค์ ํด๋์ค ์ ๋ฆฌ
- SMOTE + Edited Nearest Neighbors (ENN)
- SMOTE ํ ENN์ผ๋ก ๋
ธ์ด์ฆ ์ ๊ฑฐ
- ์ฅ์ : ์ฑ๋ฅ ํฅ์ ๊ฐ๋ฅ
- ๋จ์ : ๋ฐ์ดํฐ ์์ค ์ํ
- SMOTE ํ ENN์ผ๋ก ๋
ธ์ด์ฆ ์ ๊ฑฐ
๐ ํผํฉ ์ํ๋ง ์ฝ๋ ์์ (SMOTE + Tomek)
from imblearn.combine import SMOTETomek
smote_tomek = SMOTETomek(random_state=42)
X_train_resampled, y_train_resampled = smote_tomek.fit_resample(X_train, y_train)
๐๐ปโ๏ธ ๊ฒฐ๋ก
1๏ธโฃ ์ค๋ฒ์ํ๋ง (OverSampling)
- smote ๋๋ adasyn(์ค๋ฒ์ํ๋ง) ์ถ์ฒ
- ๋ฐ์ดํฐ ์์ค ์์ด ๋ณด๊ฐ ๊ฐ๋ฅ
2๏ธโฃ ์ธ๋์ํ๋ง (UnderSampling)
- random undersamlping ๋๋ tomek links ์ถ์ฒ
- ์ฐ์ฐ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ฉด์๋ ๊ท ํ ์ ์ง
3๏ธโฃํผํฉ ์ํ๋ง ( Over + Under )
- smote + tomek (ํผํ ์ํ๋ง)cncjs
- ๊ท ํ ์ ์ง + ๋ ธ์ด์ฆ ๊ฐ์
'ํ๋ก์ ํธ๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋๋คํฌ๋ ์คํธ(ํ์ดํผํ๋ผ๋ฏธํฐ) (2) | 2025.01.27 |
|---|