[TIL] 22.11.28

λ¬Έμ’…ν˜„Β·2022λ…„ 11μ›” 28일
0

TIL

λͺ©λ‘ 보기
47/119
post-custom-banner

πŸ‘‰ 였늘 ν•œ 일

  • SMOTE μ‹€μŠ΅
  • λ”₯λŸ¬λ‹ 기초

SMOTE μ‹€μŠ΅

πŸ€”μ •ν™•λ„λ‘œ μ œλŒ€λ‘œ 된 λͺ¨λΈμ˜ μ„±λŠ₯을 츑정을 ν•˜κΈ° μ–΄λ €μš΄ 사둀?

  • ν΄λž˜μŠ€κ°€ λΆˆκ· ν˜•ν•œ 데이터일 λ•Œ
  • e.g.
    • 금육 => 은행 λŒ€μΆœ 사기, μ‹ μš©μΉ΄λ“œ 사기, 상μž₯폐지쒅λͺ© μ—¬λΆ€
    • μ œμ‘°μ—… => μ–‘λΆˆ(μ–‘ν’ˆ, λΆˆλŸ‰ν’ˆ) μ—¬λΆ€
    • ν—¬μŠ€μΌ€μ–΄ => ν¬κ·€μ§ˆλ³‘(μ•” 진단여뢀)
    • ITκ΄€λ ¨ => κ²Œμž„ μ–΄λ·°μ €, κ΄‘κ³  μ–΄λ·°μ €, κ·Έμ™Έ μ–΄λ·°μ €

πŸ’‘predict_proba

  • λΆ„λ₯˜μ˜ μΈ‘μ • μ§€ν‘œ. 0,1 λ“±μ˜ 클래슀 값이 μ•„λ‹Œ ν™•λ₯ κ°’μœΌλ‘œ λ°˜ν™˜
  • μž„κ³„κ°’(threshold)을 직접 μ •ν•΄μ„œ True, Falseλ₯Ό κ²°μ •ν•˜κ²Œ λ˜λŠ”λ° 보톡 0.5 둜 ν•˜κΈ°λ„ ν•˜κ³  0.3, 0.7 λ“±μœΌλ‘œ μ •ν•˜κΈ°λ„ 함
  • np.argmax : κ°€μž₯ 큰 인덱슀λ₯Ό λ°˜ν™˜. predict_probaλ₯Ό κ°μ‹Έμ„œ 클래슀 μ˜ˆμΈ‘ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
    • e.g. y_pred_proba_class = np.argmax(y_pred_proba, axis=1)

πŸ’‘colabμ—μ„œ ꡬ글 λ“œλΌμ΄λΈŒμ— λ§ˆμš΄νŒ…ν•˜κΈ°

google colab 쒌츑 ν•˜λ‹¨ μ½”λ“œ μŠ€λ‹ˆνŽ«μ— mount κ²€μƒ‰ν•˜λ©΄ μ†ŒμŠ€μ½”λ“œ 뜸

  • ꡬ글 λ“œλΌμ΄λΈŒλ₯Ό λ§ˆμš΄νŠΈν•˜λ©΄ 데이터λ₯Ό 맀번 colab 에 μ—…λ‘œλ“œ ν•˜μ§€ μ•Šμ•„λ„ 되며 데이터λ₯Ό λΆˆλŸ¬μ˜€λŠ” 속도도 더 빠름
from google.colab import drive
drive.mount('/content/drive') # ꡬ글 λ“œλΌμ΄λΈŒμ˜ 데이터 경둜 지정

πŸ’‘train_test_split()

  • train_test_split은 sklearnμ—μ„œ μ œκ³΅ν•˜λŠ” 데이터 λΆ„ν•  λ©”μ„œλ“œ
  • μž…λ ₯ λ³€μˆ˜μ™€ λͺ©ν‘œ λ³€μˆ˜λ₯Ό μž…λ ₯ν•˜λ©΄ 데이터λ₯Ό ν•™μŠ΅μš© 데이터와 κ²€μ¦μš© λ°μ΄ν„°λ‘œ λ‚˜λˆ μ€Œ
  • λ¨Έμ‹ λŸ¬λ‹μ—μ„œ 데이터λ₯Ό ν•™μŠ΅μš© 데이터와 κ²€μ¦μš© λ°μ΄ν„°λ‘œ λ‚˜λˆ„λŠ” 것은 맀우 μ€‘μš”ν•¨
  • 두 데이터가 μ œλŒ€λ‘œ λΆ„λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄, λͺ¨λΈμ΄ 닡지λ₯Ό 보고 μ˜ˆμƒν•˜λŠ” κ²ƒμ΄λ‚˜ λ§ˆμ°¬κ°€μ§€μ΄κΈ° λ•Œλ¬Έ
  • μ΄λŸ¬ν•œ 상황을 데이터 유좜(Data Leakage)라고 함
  • tran_test_split은 기본적으둜 데이터λ₯Ό λΆ„ν• ν•  λ•Œ μ„žμ–΄μ„œ(shuffle) λΆ„ν• ν•˜λ„λ‘ λ˜μ–΄μžˆμŒ
  • λΆˆκ· ν˜• λ°μ΄ν„°μ—μ„œ train_test_split을 μ‹€ν–‰μ‹œμΌ°μ„ λ•Œ, ν•œ μͺ½ 데이터에 ν¬μ†Œν•œ 값이 λͺ°λ¦΄ κ°€λŠ₯성이 있음
  • stratify νŒŒλΌλ―Έν„°λŠ” μ›λž˜ λ°μ΄ν„°μ˜ κ°’ λΉ„μœ¨λŒ€λ‘œ ν•™μŠ΅μš© 데이터와 κ²€μ¦μš© 데이터λ₯Ό λΆ„ν• μ‹œμΌœμ€Œ

πŸ’‘confusion matrix κ΅¬ν•˜κΈ°

# crosstab 이용
pd.crosstab(y_test, y_pred)

# sklearn api 이용
cf = confusion_matrix(y_test, y_pred)

# heatmap으둜 μ‹œκ°ν™”
sns.heatmap(data=cf, annot=True, cmap="Blues");

# sklearn api둜 μ‹œκ°ν™”
from sklearn.metrics import ConfusionMatrixDisplay

ConfusionMatrixDisplay(cf).plot();

πŸ’‘classification_report(y_test, y_pred)

  • print()둜 κ°μ‹Έμ„œ 좜λ ₯ν•΄μ•Ό 함

  • λ°˜μ˜¬λ¦Όν•œ κ°’μž„

  • precision은 정밀도λ₯Ό 의미

    • from sklearn.metrics import precision_score
  • recall은 μž¬ν˜„λ„λ₯Ό 의미

    • from sklearn.metrics import recall_score
  • f1-scoreλŠ” f1 점수λ₯Ό 의미

    • from sklearn.metrics import f1_score
  • accuracyλŠ” 정확도λ₯Ό 의미

    • from sklearn.metrics import accuracy_score
  • supportλŠ” 클래슀의 μ‹€μ œ λ°œμƒ νšŸμˆ˜κ°€ μ–Όλ§ˆμΈμ§€ μ•Œλ €μ€Œ

    • λ”°λΌμ„œ supportλŠ” λͺ¨λΈμ— 따라 λ‹¬λΌμ§€λŠ” μˆ«μžκ°€ μ•„λ‹˜
  • weighted avgλŠ” 가쀑 평균을 μ˜λ―Έν•˜κ³ , macro avgλŠ” κ°€μ€‘λ˜μ§€ μ•Šμ€ 평균을 μ˜λ―Έν•¨.

    • macro avgλŠ” 각 λ ˆμ΄λΈ”μ— λŒ€ν•œ μΈ‘μ •ν•­λͺ©μ„ κ³„μ‚°ν•˜κ³  κ°€μ€‘μΉ˜κ°€ μ μš©λ˜μ§€ μ•Šμ€ 평균을 찾음. λ ˆμ΄λΈ” λΆˆκ· ν˜•μ€ κ³ λ €ν•˜μ§€ μ•ŠμŒ.
    • weighted avgλŠ” 각 λ ˆμ΄λΈ”μ— λŒ€ν•œ λ©”νŠΈλ¦­μ„ κ³„μ‚°ν•˜κ³  지원(각 λ ˆμ΄λΈ”μ— λŒ€ν•œ μ‹€μ œ μΈμŠ€ν„΄μŠ€ 수)λ³„λ‘œ κ°€μ€‘μΉ˜λ₯Ό λΆ€μ—¬ν•œ 평균을 찾음.

πŸ’‘λ°μ΄ν„° μƒ˜ν”Œλ§ - undersampling & oversampling

  • 두 λ°©λ²•μ˜ λͺ©μ μ€ 두 κ°’μ˜ λΉ„μœ¨μ„ λΉ„μŠ·ν•˜κ²Œ λ§žμΆ°μ£ΌλŠ” 것
  • under-sampling은 더 값이 λ§Žμ€ μͺ½μ—μ„œ μΌλΆ€λ§Œ μƒ˜ν”Œλ§ν•˜μ—¬ λΉ„μœ¨μ„ λ§žμΆ°μ£ΌλŠ” 방법
  • over-sampling은 더 값이 적은 μͺ½μ—μ„œ 값을 늘렀 λΉ„μœ¨μ„ λ§žμΆ°μ€€ 방법
  • under-sampling은 κ΅¬ν˜„μ΄ μ‰½μ§€λ§Œ 전체 데이터가 쀄어 λ¨Έμ‹ λŸ¬λ‹ λͺ¨λΈ μ„±λŠ₯이 λ–¨μ–΄μ§ˆ μš°λ €κ°€ 있음

πŸ’‘λ°μ΄ν„° μƒ˜ν”Œλ§ - SMOTE

  • SMOTEλŠ” Synthetic Minority Over-sampling Technique의 μ•½μžλ‘œ ν•©μ„± μ†Œμˆ˜μž μ˜€λ²„μƒ˜ν”Œλ§ 기법.
  • 적은 값을 늘릴 λ•Œ, k-κ·Όμ ‘ μ΄μ›ƒμ˜ 값을 μ΄μš©ν•˜μ—¬ ν•©μ„±λœ μƒˆλ‘œμš΄ 값을 좔가함
    • k-κ·Όμ ‘ μ΄μ›ƒμ΄λž€ κ°€μž₯ κ°€κΉŒμš΄ k개 이웃을 의미.

μƒ˜ν”Œλ§ν•œ 데이터λ₯Ό X, y둜 train-test(+validation) μ…‹μœΌλ‘œ λ‚˜λˆ μ€Œ

μƒ˜ν”Œλ§μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  데이터λ₯Ό λ‚˜λˆ  ν•™μŠ΅ν–ˆμ„ λ•Œμ™€ λΉ„κ΅ν•΄μ„œ
f1_score, precision, recall 값이 λͺ¨λ‘ 높아짐
μ •λ‹΅ ν΄λž˜μŠ€κ°€ λΆˆκ· ν˜•ν•˜λ©΄ ν•™μŠ΅μ„ μ œλŒ€λ‘œ ν•˜κΈ° μ–΄λ ΅κΈ° λ•Œλ¬Έμ— μ˜€λ²„μƒ˜ν”Œλ§μ΄λ‚˜ μ–Έλ”μƒ˜ν”Œλ§μœΌλ‘œ μ •λ‹΅ 클래슀λ₯Ό λΉ„μŠ·ν•˜κ²Œ λ§Œλ“€μ–΄ μ£Όλ©΄ μ’€ 더 λ‚˜μ€ μ„±λŠ₯을 냄

λ”₯λŸ¬λ‹ 기초

λ¨Έμ‹ λŸ¬λ‹ : 인간이 직접 νŠΉμ§•μ„ λ„μΆœν•  수 있게 μ„€κ³„ν•΄μ„œ μ˜ˆμΈ‘κ°’ 좜λ ₯

λ”₯λŸ¬λ‹ : 인곡지λŠ₯ 슀슀둜 일정 λ²”μ£Όμ˜ 데이터λ₯Ό λ°”νƒ•μœΌλ‘œ κ³΅ν†΅λœ νŠΉμ§•μ„ λ„μΆœν•˜κ³ , κ·Έ νŠΉμ§•μœΌλ‘œ μ˜ˆμΈ‘κ°’ 좜λ ₯

기울기 μ†Œμ‹€μ€ μ—­μ „νŒŒ κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” 문제. μ—­μ „νŒŒλ„ λ”₯λŸ¬λ‹ ν•™μŠ΅κ³Όμ • 쀑 μΌλΆ€μž„. λ‹€μΈ΅ νΌμ…‰νŠΈλ‘  ν•™μŠ΅μ— μ‚¬μš©λ˜λŠ” 톡계적 기법
μ—­μ „νŒŒ 과정은 검산과정이라고 μƒκ°ν•˜κΈ°. μˆœμ „νŒŒ λ•Œ μ μš©ν•œ ν™œμ„±ν™”ν•¨μˆ˜μ˜ κ²°κ³Όλ₯Ό κ²€μ‚°ν•˜μ—¬ 였차λ₯Ό μ€„μ—¬μ£ΌλŠ” 과정이기 λ•Œλ¬Έμ— μ—­μ „νŒŒ κ³Όμ •μ—μ„œλŠ” λ”°λ‘œ ν™œμ„±ν™”ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 과정이 μ•„λ‹˜

였차λ₯Ό μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•œ μ—­μ „νŒŒ κ³Όμ •μ—μ„œ λ―ΈλΆ„ 기법을 μ΄μš©ν•˜κ²Œ 됨. ν•˜μ§€λ§Œ ν™œμ„±ν™”ν•¨μˆ˜λ₯Ό sigmoid와 tanh ν•¨μˆ˜λ‘œ μ„€μ •ν•˜κ²Œ 되면 이 λ―ΈλΆ„κ³Όμ •μ—μ„œ κΈ°μšΈκΈ°κ°€ 0으둜 μˆ˜λ ΄ν•˜κ²Œ 됨. λ”°λΌμ„œ 점점 κΈ°μšΈκΈ°κ°€ 사라지고 이에 λ”°λ₯Έ κ°€μ€‘μΉ˜μ™€ 편ν–₯ λ„μΆœμ΄ μ–΄λ €μ›Œμ§€λŠ” λ¬Έμ œκ°€ λ°œμƒν•¨

  • μˆœμ „νŒŒ -> Input을 λ°›κ³  λ‹€μˆ˜μ˜ hidden layerμ—μ„œ ν™œμ„±ν™”ν•¨μˆ˜ μ μš©μ„ ν†΅ν•˜μ—¬ output을 좜λ ₯ν•˜λŠ” κ³Όμ •
  • μ—­μ „νŒŒ -> μˆœμ „νŒŒ κ³Όμ •μ—μ„œ 좜λ ₯ν•œ 결과와 μ •λ‹΅κ°’μ˜ 였차λ₯Ό μΈ‘μ •ν•˜μ—¬ κ·Έ 였차의 값을 μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•œ κ³Όμ •

πŸ€”λ‹¨μΈ΅ νΌμ…‰νŠΈλ‘ μœΌλ‘œ κ΅¬ν˜„ν•˜μ§€ λͺ»ν•˜λŠ” λ…Όλ¦¬νšŒλ‘œ?

  • XOR 게이트

πŸ€”XOR 문제λ₯Ό ν•΄κ²°ν•œ 방법?

  • λ‹€μΈ΅ νΌμ…‰νŠΈλ‘ 

πŸ“Œμ˜€λŠ˜μ˜ 회고

  • 사싀(Fact) : μ‹ μš©μΉ΄λ“œκ±°λž˜λ°μ΄ν„°λ‘œ 이진뢄λ₯˜ν‰κ°€μ§€ν‘œ μ‹€μŠ΅κ³Ό μ„±λŠ₯ν–₯상을 μœ„ν•œ μƒ˜ν”Œλ§λ°©λ²•, μˆœμ „νŒŒ, μ—­μ „νŒŒ, μ†μ‹€ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•œ λ”₯λŸ¬λ‹ κΈ°μ΄ˆκ°œλ…μ„ λ°°μ› λ‹€
  • λŠλ‚Œ(Feeling) : λ”₯λŸ¬λ‹ 기초 κ°œλ…μ˜ 양이 λ°©λŒ€ν•œ 것 κ°™λ‹€.
  • κ΅ν›ˆ(Finding) : 기초 κ°œλ…μ„ ν™•μ‹€ν•˜κ²Œ μ΄ν•΄ν•΄λ³΄μž.
profile
μžλΌλ‚˜λΌ μƒˆμ‹Ήμƒˆμ‹ΉπŸŒ±
post-custom-banner

0개의 λŒ“κΈ€