abundant class(주로 정상데이터)와 rare class(이상데이터 그룹)의 비율이 1:99와 같이 극단적인 경우가 발생하는 경우, 

크게 두가지 방법으로 모델의 잘못된 판단을 막을 수 있습니다. 

 

1. sampling을 하는 것

2. 모델의 cost를 주어 모델 내에서 개선하는 방법

 

이번 포스팅에서는 sampling중 down-sampling과 up-sampling의 방법론들을 다룰 것 입니다.

 

1. Down-sampling

Under-sampling의 장점은 필요없는 데이터를 지우기 때문에, 계산시간이 빠르지만 단점은 지워진 데이터들로 인해 정보손실이 발생할 수 있습니다. 

 

  • random down-sampling: 랜덤하게 abundant class의 instance를 추출해서 rare class와 1:1 비율을 맞춘 데이터 셋으로 학습시킵니다. 매번 랜덤하게 샘플링되기 때문에 경계선이 달라져 결과가 달리나오지만 꽤나 좋은 모델로 평가받고 있습니다. 
  • Tomek links down-sampling: Tomek-links라는 것은 abundant class의 instance와 rare class의 instance를 2차원 평면에 뿌렸을 때, 둘 사이를 직선으로 열결했을때 이를 방해하는 다른 instance가 없을 경우에 그 직선을 말합니다. 이때, Tomek-links에 연결된 정상데이터들을 지움으로써 분류경계선을 새로 그을 수 있게 됩니다. 

Tomek-links의 정상데이터를 제거하여 down-sampling을 함
기존의 분류 경계선과 다른 경계선을 그릴 수 있음

  •  CNN(Condensed Nearest Neighbor) : 1-NN를 사용해서 abundant와 rare사이의 1개의 관측치를 골라서 어떤 그룹에 더 가까운지 판단하여 가까운 그룹에 데이터로 속하게 함. 만약, rare class에 가깝다면 abundant class의 instance를 rare로 변경하고, 나머지 abundant class data를 모두 지웁니다. 그 후, rare class로 분류되었던 abundant class의 data를 다시 abundant class로 변경해줍니다. 이때, 사용하는 NN은 k-NN이 아닌 무조건 1-NN을 사용해야합니다. 

CNN으로 재분류된 데이터 분포와 분류경계선

  • OSS: Tomet-links에서 나온 under-sampling 데이터와, CNN에서 나온 under-sampling데이터를 합치는 것입니다. OSS

OSS 방법 (보라색라인 안에 데이터들은 지워짐) 

 

2. Over-sampling

단점: 소수클래스에 과적합이 생길 수 있습니다. 

 

  • Resampling: rare class의 instance를 랜덤복원추출하여 데이터를 증가시키는 방법입니다. 
  • SMOTE (Sythetic Minority Oversampling technique): resampling 했을때 over-fitting되는 문제를 해결하기 위해 나온 방법론으로 up-sampling에서 주로 사용되는 방법입니다.  
  • Boarderline SMOTE: 경계부분에서 over-sampling을 하는 방법입니다. 이상데이터와 정상데이터 사이의 데이터들 위주로 증폭시키기 위한 방법입니다. 사실, 전체 정상데이터와 이상데이터 사이에 SMOTE를 사용하면, 경계선 주변부에 데이터들이 생성되는것이외에 이상데이터 바깥쪽에도 데이터가 생성될 가능성이 높습니다. 하지만, 이런 데이터들은 모델을 학습시키기에 좋은 데이터들은 아니기 때문에 경계선 주위에 데이터를 생성할 수 있도록, 경계선 주위의 정상데이터들로 SMOTE샘플링을 하는 방법입니다. 

Boarderline SMOTE 방법


여기서?

컴퓨터가 Boarderline을 판단하는 방법은, k를 정해 그룹핑을 하여 k개의 데이터가 모두 소수 관측치라면 이를 'safe 관측치'라고 부릅니다. 그리고 이것은 boarderline이 될 수 없습니다. 

하지만, 다른 k개의 그룹을 했을때, 다수 관측치가 k/2이상이라면 이를 boarderline이라고 하며 'danger 관측치'라고 부릅니다. k개의 그룹에서 다수의 데이터가 또 너무 많이 존재할 경우 이를 'noise 관측치'라고 합니다.


 

따라서, Boarderline SMOTE sampling의 경우에는 danger 관측치에서 SMOTE sampling을 하는것을 말합니다. 

  • ADASYN(Adaptive Synthetic sampling approach): 

 

<인공지능공학소의 김성범 소장님의 강의를 참고하여 작성합니다. >

 

python 비대칭 데이터 문제 해결:

datascienceschool.net/03%20machine%20learning/14.02%20%EB%B9%84%EB%8C%80%EC%B9%AD%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%AC%B8%EC%A0%9C.html

 

비대칭 데이터 문제 — 데이터 사이언스 스쿨

데이터 클래스 비율이 너무 차이가 나면(highly-imbalanced data) 단순히 우세한 클래스를 택하는 모형의 정확도가 높아지므로 모형의 성능판별이 어려워진다. 즉, 정확도(accuracy)가 높아도 데이터 갯

datascienceschool.net

 

  • up-sampling을 할때 이점과 영향
  • SMOTE 알고리즘

 

1.  up-sampling을 할때 이점과 영향

down-sampling은 데이터 수가 많다고 생각될 경우 사용을 하지만, 보통 데이터수가 많으면 많을수록 좋기때문에 

up-sampling을 down-sampling보다 선호합니다.

 

unsupervised machine learning model과 다르게 supervised model은 outcome의 확률분포를 학습하지 않습니다. 

따라서, training data의 outcome비율을 1:1로 맞추기 위해 up-sampling을 해주어도 절대! test data의 outcome 비율을 변경하기 위해 test data도 up-sampling을 해주지 않습니다!

 

'데이터의 비율을 달리하여 학습한 모델인데 test data도 비슷한 분포를 띄어야 학습결과가 좋게 나온다?'라고 쉽게 오해할 수 있습니다.

하지만, 기본적으로 test data는 변경하여 사용하는 것이 아닐 뿐더러

 

1) 모델이 학습할 때, supervised model의 경우 outocme의 비율을 학습하지 않습니다. 

upsampling의 목적은 imbalance한 데이터를 학습할 경우 모델이 한쪽 class로 판단하는 모델로 빠르게 도달하지 않도록 방해하는 역할을 합니다. up-sampling은 rare class의 데이터들을 복원추출하여 데이터를 늘리는것이기 때문에 다량의 학습데이터를 학습하는 효과를 주는것이 아닌, rare class의 특성을 반영한 데이터들이 늘어나서 over-fitting이 됩니다. 

 

2) test data의 분포를 모델이 체크하지 않습니다.

training data로 모델을 만들고 나서 test data를 이용해 모델의 성능을 평가하는데 이때, test data는 한개씩 들어가서 이를 (binary의 경우) 1,0중에 판단하여 결과값만 내기때문에 outcome의 분포는 상관하지 않습니다.  

 

 

2. SMOTE 알고리즘

Up-sampling의 하나의 종류로, k 최근접 이웃 method를 이용한 방법입니다.

우선, k 최근접 이웃 모델을 사용할때처럼 rare class의 데이터들중 하나의 데이터를 선택하고 그 주변에 얼마나 많은 k개의 이웃을 선택할 것인지 정해줍니다. 

 

예를 들어, k가 5개이면, 정해진 중심으로부터 5개의 이웃만 고려를 할것입니다.

 

그리고 간단히, SMOTE알고리즘이 구동되는 방식을 보자면,

X는 선택한 점, X(nn)은 그 주변에 선택된 하나의 근접이웃, u는 균등분포입니다. 

 

SMOTE 알고지름 가설

 

예를 들면, X가 (5,1)이고 X(nn)이 (2,3)인 경우 X(nn)부터 X까지의 거리를 표현하면 (-3,2)가 됩니다. 

 

 

 

Synthetic 계산 예제 

 

두 점사이 거리에서 0부터 1사이의 값이 랜덤으로 곱해져서 둘 사이에 위치하는 새로운 데이터가 생성이 될 것입니다. 

 

이 방법은 rare class의 있는 데이터를 고르는것이 아닌, 비슷한 데이터를 생성해내기 때문에 약간의 차이는 있지만 

그래도 over-fitting의 문제를 고려해야합니다. 

 

 

reference: www.youtube.com/watch?v=Vhwz228VrIk

 

'데이터분석 > 머신러닝' 카테고리의 다른 글

LASSO 이해하기  (0) 2021.06.28
Sensitivity, Specificity, PPV, NPV  (0) 2021.04.26
imbalance classification 다루는 방법 2  (0) 2021.04.05
Tree 모델과 R tree library  (0) 2021.01.27
Cross-validation (교차검증)  (0) 2021.01.07
  • GAN이란?
  • GAN의 학습방법

포스팅 목적: 의학도나 방사선사들의 훈련에는 많은 영상이 필요하나, 구조적 법적 문제로 대량의 영상을 공유하기가 쉽지 않습니다. 데이터의 양이 적어 해결되지 않는 문제들을 개선하고자 공부하였고 이 내용을 포스팅합니다. 

 

reference: 

논문: Towards generative adversarial networks as a new paradigm for radiology education

참고 영상: 

tv.naver.com/v/1947034

 

1시간만에 GAN(Generative Adversarial Network) 완전 정복하기

NAVER Engineering | 발표자: 최윤제(고려대 석사과정) 발표일: 2017.5. Generative Adversarial Network(GAN)은 2014년 Ian Goodfellow에 의해 처음으로 제안되었으며, 적대적 학습을 통해 실제 데이터의 분포를 추정하

tv.naver.com

1. GAN이란?

 

GAN(Generative Adversarial Network)로 적대적 생성 모델이라고 합니다. 

 

하나씩 뜯어서 보자면, 생성모델이라는 관점에서 

머신러닝에서 만들어내는 예측 결과나, continuous variable의 interval prediction값이 아닌(가장 높은 확률 혹은 likelihood를 찾아내는 행위), 데이터의 형태를 만들어내는 모델입니다. 

데이터의 형태는 분포 혹은 분산을 의미하고 데이터의 형태를 만들어 낸다는 것은 '실제적인 형태'를 갖춘 데이터를 만든다는 뜻입니다.  

 

Ian Goodfellow 의 논문에 수록된 그림. 

 

위 그림에서 보듯이, 기존에 분포를 학습해서 데이터의 형태를 찾아나가고 이를 만들어 내는 것입니다. 

 

또한, 적대적 생성의 의미 측면에서는,

GAN의 핵심 아이디어로, 각각의 역할을 가진 두개의 모델로 진짜같은 가짜를 생성해주는 능력을 키워주는 것을 의미합니다. 

예를 들어, 위조범이 가짜 지폐를 만들어내고, 경찰은 가짜지폐를 찾아내는 역할을 합니다. 더욱 더 서로가 위조지폐를 정교하게 만들고, 만들어진 위조지폐를 정확히 찾아내는 것으로 서로 적대적으로 능력을 키워주고 있습니다. 

이런 아이디어에서부터 '적대적'이라는 용어가 붙게 되었습니다. 

 

GAN 모델을 가장 쉽게 설명할 수 있는 그림. [출처 :  https://files.slack.com/files-pri/T25783BPY-F9SHTP6F9/picture2.png?pub_secret=6821873e68]

 

2. GAN의 학습방법

 

Discriminator는 CNN판별기처럼 네트워크 구성할 수 있습니다. Disciminator로 진짜 이미지는 1, 그렇지 않은 것은 0으로 학습을 시키고, z라는 랜덤백터를 넣어 Genarative학습을 시킨 이미지가 이미 학습된 D에 들어갔을때, 오로지 진짜 이미지로 판별할 수 있도록, G를 학습시키는 것입니다. 

 

G는 random한 noise를 생성해내는 vector z를 noise input으로 받고 D가 판별해내는 real image를 output으로 하는 neural network unit을 생성합니다. 

GAN의 코어 모델은 D와 G두개이고, mnist이미지를 real image로 D한테 '진짜'임을학습시키고, 

vector z와 G에 의해 생성된 Fake Image가 가짜라고 학습을 시켜 총 두번의 학습을 거칩니다. 

이때, 따로 학습되는 것이 아니라 1번의 과정에서 real image와 fake image를 D의 x input으로 합쳐서 학습합니다. 

 

3. GAN을 이용해 영상 이미지를 만들고 AUC를 비교해보자. 

 

Real image만 사용했을때, AUC가 0.99정도 나왔고, 그 외에 GAN으로 만들어진 sample들로 학습했을때와, real과 gan을 적절히 섞어서 학습했을때 높은 AUC를 끌어낼 수 있었습니다. 

 

 

reference논문을 요약하자면, 

수십기가짜리 데이터 파일도 쉽게 다룰 수 있게 해주는 R패키지입니다.

disk.frame 패키지

 

대용량 파일을 하드 디스크에 쪼개어 넣고 병렬처리하는 방식이라

메모리보다 훨씬 큰 데이터도 빠르게 다룰 수 있습니다. 

무엇보다 dplyr함수들을 적용할 수 있습니다. spark를 이용할때보다도 속도가 빠르다고 합니다. 

github.com/xiaodaigh/disk.frame/

www.youtube.com/watch?v=EOjObl_GSi4

 

 

인공지능공학연구소 김성범소장님의 자료 

 

위에 그림에서 보듯이, 정상데이터는 파란색, 이상데이터는 빨간색, 나중에 test data로 쓰일 이상데이터들은 회색으로 표현이 됩니다. 

잘 분류한다는 것은 파란색과 실제 이상관측치 분포를 구분해 내는것인데 모델은 아래처럼 다르게 학습됩니다. 

오분류하는 모델의 예시 (인공지능공학연구소 김성범소장님의 자료) 

 

이렇듯, 데이터가 압도적으로 많은 정상데이터로 분류를 잘하는 모델을 만들 수 있지만, 이와 반면, 이상데이터를 잘 분류하지 못하는 모델을 만들더라도, accuracy를 계산하였을 때 매우 높은 값이 나올 수 있지만 이 사실을 믿어서는 안됩니다. 

 

특히, 타겟이 1%의 굉장히 소수인 데이터에 대해서 이러한 문제를 개선할 방법들이 존재합니다. 예를 들면, 위조지폐를 찾아낼때 outcome의 수가 적기 때문에 이를 개선하기 위해 많은 방법들이 고안되어 왔습니다.

 

Class imbalance Problem?

- 각 클래스의 개수비가 현저히 차이나는 것을 말합니다. 

fraud detection, medical diagnosis, anomaly detection, facial recognition 등에서 주로 생기는 문제입니다. 

 

크게 두가지 접근 방법으로 imbalanced problem을 해결합니다. 

  •  Cost function based approach: rare class에 가중치를 더 주거나, rare class를 잘못분류 했을때 cost, loss, param을 조정하는 방법
  •  Sampling based approach: 데이터 자체를 늘리고 줄이는 방법 ex) 업샘플링, 다운샘플링, SMOTE

 

오늘은 abnormal을 detection하는 classifier를 학습하는데 좋은방법들을 고려해보았습니다.

  • 적절한 metrixs를 사용하여 평가하기
  • resample the training set: under sampling and over sampling
  • 서로다른 데이터셋으로 학습 후 앙상블하기
  • clustering하여 rare class와 모델 학습하기
  • 딥러닝을 이용한 학습과 클래스 가중치주기

 

1. 적절한 metrix사용해서 평가하기 

no information rate이 높은 경우 기본적으로 model의 error와 함께, FN rate을 비교해서 전체 1중에 0이라고 예측한 비율을 줄이는 방향으로 해석해야합니다. 또한, 모델의 accuracy로 평가하되, 이또한, accuracy가 no information rate보다 낮게 나왔다고 나쁜 모델이라고 말할수는 없습니다.  

예를 들면, 달리기 선수에게 역도를 시켰는데 능률이 평균 이하로 나온다고 역도선수를 운동을 못한다고 판단할 수 없습니다.

이럴때는, sensitivity와 specificity를 확인하여 모델이 정말로 학습을 해서 분류를 잘한것인지, 혹은 하나의 classification으로 판단을 하는지 확인해야합니다.   

또한, accuracy와 sensitivity, specificity 모두 낮은 모습을 보였지만, 어느정도 AUC값이 높게 나온다면 무시해도 될 정도의 수준이라고 할 수 있습니다.  

 

2. resample the training set: under sampling and over sampling (drawback가능성 있음)

- under sampling의 경우 (=down-sampling), abundant class에서 무작위추출을 통해 rare class의 수와 1:1의 outcome의 비율을 만들 수 있으나, 데이터 수를 떨어트림으로 학습효율을 줄어들게 할 수 있습니다.

중요한 정상데이터를 잃어버리는 경우가 생길수도 있습니다. 

(어느정도 데이터가 적절할까? 누가봐도 변수에 비해 데이터가 적지않다고 생각되는 정도수준)  

 

- over sampling의 경우(=up-sampling), outcome에서 rare class의 데이터를 증축시켜 abundant class의 데이터를 늘리는 방법입니다. 적은 rare class에서 복원추출로 abundant class와 비율을 맞춰주는 것입니다. 

무작위로 소수의 데이터를 복제해서 늘리는 방법이 있어 정보가 손실되지는 않지만 overfitting의 가능성이 큽니다. 

 

* over-sampling을 하기전, 무조건 k-cross validation을 수행하여야합니다. (over-sampling은 rare sample기반으로 distribution function을 통해 random data를 생성하기 때문에)

 

https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets

그런데 어떻게? 데이터의 수를 늘릴까요? 

 

<SMOTE(Synthetic Minority Over-sampling Technique 개념>

 

낮은 비율의 클래스 데이터를 최근접 이웃을 이용해서 생성합니다. 

일반적으로 성공적인 인스턴스 생성을 하지만, 소수데이터들 사이에서 보간하여 작동하기 때문에 모델링셋의 소수데이터들 사이의 

특성을 반영하여 새로운 데이터 예측에 취약할수도 있습니다. 

 

https://www.kaggle.com/rafjaa/resampling-strategies-for-imbalanced-datasets

 

간략한 SMOTE코드

* SMOTE방법 python코드

mkjjo.github.io/python/2019/01/04/smote_duplicate.html 

 

[Python] SMOTE를 통한 데이터 불균형 처리

* 본 포스트는 개인연구/학습 기록 용도로 작성되고 있습니다. 데이터 분석시 쉽게 마주하게 되는 문제 중 하나가 데이터의 불균형이다. 우리가 찾고자하는 데이터의 타겟의 수가 매우 극소수인

mkjjo.github.io

 

그 외에 repitition, bootstraping 등의 방법이 있습니다.

하나의 리샘플링 방법이 다른 리샘플링보다 월등히 좋은 것은 없습니다. 

각 데이터별로 다르게 작용하기 때문에 모두 시도해보는 것을 추천합니다. 

 

3. 서로 다른 데이터셋으로 앙상블하기

가장 간단하고 쉬운 방법이며, rare class에 맞게 abundant class를 n개로 나눈뒤, 각각 abundant class와  rare class를 합쳐,

n번의 모델학습을 하여 결과를 합치거나 ,평균내서 사용합니다. 

 

 

4. clustering하여 rare class와 학습하기

clustering을 통해, abundant class를 r groups로 clustering하는 것을 제안합니다. classes의 개수를 r로하고, 각 그룹에 대해 

medoid(center of cluster)에 유지됩니다. 모델을 학습할 땐 rare class와 medoid로 학습하면 됩니다.   

 

5. 딥러닝을 이용한 학습과 class 가중치 주기

=> 소수 클래스에서 정답을 맞추지 못한 경우, loss에 패널티를 더 줘서 학습을 시킴

=> auc를 최적화하는 방향으로도 학습시킬 수 있음

 

클래스 가중치 주기

reference cite: 

ourcstory.tistory.com/240

 

Imbalanced data를 처리하는 기술 7가지

7 Techniques to Handle Imbalanced Data intrusion detection real-time bidding Introduction fraud detection in banking real-time bidding in marekting intrusion detection in networks 위 분야에서는 1%보..

ourcstory.tistory.com

불러오는 중입니다...

 

 

brunch.co.kr/@seoungbumkim/7

 

모수 모델 vs. 비모수 모델

머신러닝 모델링 관점에서 | 본 글은 필자가 가지고 있는 현재까지의 지식을 바탕으로 작성했으나 관점에 따라 다른 의견이 많을 것으로 판단됩니다. 본 글의 대한 가감 없는 의견/비판을 기대

brunch.co.kr

 

 

'통계분석 > 통계기본' 카테고리의 다른 글

Z-test 수행하기  (0) 2023.07.20
일반화 선형 모형(Generalized Linear Regression)  (0) 2020.09.09

 

좋은 블로그가 있기에 스크랩해왔습니다. 

이해를 간결하게 시켜주시고 재밌는 예시를 들어주셔서 리포스팅하게 되었습니다. 

 

 

 

m.blog.naver.com/PostView.nhn?blogId=ibuyworld&logNo=221520332874&proxyReferer=https:%2F%2Fwww.google.com%2F

'R > R베이스의 머신러닝' 카테고리의 다른 글

대용량 데이터 다루기 R  (0) 2021.04.05

두개 이상의 단위가 다른 대상을 분석하기 위해서는, 데이터들을 표준화 혹은 정규화해주어야합니다. 

 

  • 정규화
  • 표준화

1. 정규화(normalization)

데이터의 상대적 크기의 영향을 줄이기위해 사용합니다. 

 

데이터를 특정 구간으로 바꾸는 방법이고, ( 예를 들면, 0~1사이, 0~100사이 )

식은 위처럼, x= 관측값, x_min = 최소값, x_max = 최대값 으로 계산하여서 새로운 값을 도출해냅니다.

특정데이터가 그 그룹에서 가지는 위치를 볼때 사용합니다. 

주기를 띄는 데이터들은 이전 위치에서 현재위치가 얼마나 바뀐지 보기위해서 사용하는데 유용합니다.

 

2. 표준화(standardization)

데이터를 0을 중심으로 양쪽에 분포하게 하는 방법입니다. 각 데이터들이 평균으로부터 얼마나 떨어져있는지 나타냅니다. 

 

z-score 표준화라고 하는데 측정값에서 평균값을 빼고, 이를 표준편차로 나누어줍니다. 

 

데이터 분석을 하기전에 표준화와 정규화를 진행해주어야하는 경우가 있고, 각 모델에서 표준화나 정규화를 자동으로 진행하는 경우가 있습니다. 

+ Recent posts