[TIL] 22.12.13

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

TIL

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

πŸ‘‰ 였늘 ν•œ 일

  • RNN μ΄μ–΄μ„œ(1101 ~ 1103)

RNN

πŸ€”μ™œ fit은 train μ—λ§Œ ν•΄μ€„κΉŒ?

  • ν˜„μ‹€ λ°μ΄ν„°λŠ” μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ—
  • ν…μŠ€νŠΈ 데이터λ₯Ό train, test에 각각 fit을 ν•˜κ²Œ 되면 λ‹€λ₯Έ λ‹¨μ–΄μ‚¬μ „μœΌλ‘œ μ „μ²˜λ¦¬ λ˜μ–΄ 기쀀이 λ‹€λ₯΄κ²Œ 됨

πŸ’‘ λͺ¨λΈμ˜ μ„±λŠ₯κ³Ό 상관없이 속도λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄

  • κ°€μž₯ κ°„λ‹¨ν•œ 방법이 max_features λ₯Ό μž‘κ²Œ μ‘°μ •ν•˜λŠ” 것
  • λΉ„μ§€λ„ν•™μŠ΅μ˜ μ°¨μ›μΆ•μ†Œλ₯Ό μ‚¬μš©ν•΄μ„œ 데이터λ₯Ό μ••μΆ•ν•΄ μ‚¬μš©ν•  μˆ˜λ„ 있음
    • μ°¨μ›μΆ•μ†Œ κ³Όμ •μ—μ„œλ„ λ©”λͺ¨λ¦¬ 였λ₯˜κ°€ λ°œμƒν•  μˆ˜λ„ 있음. 이 λ•ŒλŠ” max_featureλ₯Ό λ¨Όμ € μ‘°μ •ν•΄μ£ΌκΈ°
  • 쑰금 더 μ‘°μ •ν•œλ‹€λ©΄ min_df, max_df, stop_words 등을 μ‘°μ •ν•΄ λ³Ό 수 있음

πŸ’‘κΈ°μ΄ˆ 데이터셋

이미지 : MNIST, FMNIST, cifar10
ν…μŠ€νŠΈ : IMDB, μ˜ν™”λ¦¬λ·° 데이터셋, 넀이버 μ˜ν™”λ¦¬λ·° 데이터셋

πŸ’‘TF-IDF

πŸ’‘TF(λ‹¨μ–΄λΉˆλ„, Term Frequency)

  • TF(단어 λΉˆλ„, term frequency)λŠ” νŠΉμ •ν•œ 단어가 λ¬Έμ„œ 내에 μ–Όλ§ˆλ‚˜ 자주 λ“±μž₯ν•˜λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°’μœΌλ‘œ, 이 값이 λ†’μ„μˆ˜λ‘ λ¬Έμ„œμ—μ„œ μ€‘μš”ν•˜λ‹€κ³  생각할 수 있음.

πŸ’‘DF(λ¬Έμ„œ λΉˆλ„, document frequency)

  • νŠΉμ • 단어가 λ“±μž₯ν•œ λ¬Έμ„œμ˜ 수
  • 단어 μžμ²΄κ°€ λ¬Έμ„œκ΅° λ‚΄μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” 경우, 이것은 κ·Έ 단어가 ν”ν•˜κ²Œ λ“±μž₯ν•œλ‹€λŠ” 것을 의미

πŸ’‘IDF(μ—­λ¬Έμ„œ λΉˆλ„, inverse document frequency)

  • ν•œ 단어가 λ¬Έμ„œ 집합 μ „μ²΄μ—μ„œ μ–Όλ§ˆλ‚˜ κ³΅ν†΅μ μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°’

  • 전체 λ¬Έμ„œμ˜ 수λ₯Ό ν•΄λ‹Ή 단어λ₯Ό ν¬ν•¨ν•œ λ¬Έμ„œμ˜ 수둜 λ‚˜λˆˆ λ’€ 둜그λ₯Ό 취함

    • DD : 전체 λ¬Έμ„œμ˜ 수
    • λΆ„λͺ¨ : 단어 tt κ°€ ν¬ν•¨λœ λ¬Έμ„œμ˜ 수. 단어가 전체 λ§λ­‰μΉ˜ μ•ˆμ— μ‘΄μž¬ν•˜μ§€ μ•Šμ„ 경우 0이 됨. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 1을 λ”ν•΄μ£ΌλŠ”κ²Œ 일반적
  • DF의 μ—­μˆ˜λ‘œ DF에 λ°˜λΉ„λ‘€ν•˜λŠ” 수

  • IDF 값은 λ¬Έμ„œκ΅°μ˜ 성격에 따라 결정됨.

    • e.g. 'μ›μž'λΌλŠ” 낱말은 일반적인 λ¬Έμ„œλ“€ μ‚¬μ΄μ—μ„œλŠ” 잘 λ‚˜μ˜€μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— IDF 값이 높아지고 λ¬Έμ„œμ˜ 핡심어가 될 수 μžˆμ§€λ§Œ, μ›μžμ— λŒ€ν•œ λ¬Έμ„œλ₯Ό λͺ¨μ•„놓은 λ¬Έμ„œκ΅°μ˜ 경우 이 낱말은 μƒνˆ¬μ–΄κ°€ λ˜μ–΄ 각 λ¬Έμ„œλ“€μ„ μ„ΈλΆ„ν™”ν•˜μ—¬ ꡬ뢄할 수 μžˆλŠ” λ‹€λ₯Έ 낱말듀이 높은 κ°€μ€‘μΉ˜λ₯Ό μ–»κ²Œλ¨

πŸ’‘TF-IDF

  • TF와 IDFλ₯Ό κ³±ν•œ κ°’

  • νŠΉμ • λ¬Έμ„œ λ‚΄μ—μ„œ 단어 λΉˆλ„κ°€ 높을 수둝, 그리고 전체 λ¬Έμ„œλ“€ 쀑 κ·Έ 단어λ₯Ό ν¬ν•¨ν•œ λ¬Έμ„œκ°€ 적을 수둝 TF-IDF값이 높아짐

    • λ”°λΌμ„œ, 이 값을 μ΄μš©ν•˜λ©΄ λͺ¨λ“  λ¬Έμ„œμ— ν”ν•˜κ²Œ λ‚˜νƒ€λ‚˜λŠ” 단어λ₯Ό κ±ΈλŸ¬λ‚΄λŠ” 효과λ₯Ό 얻을 수 있음
  • IDF의 둜그 ν•¨μˆ˜ μ•ˆμ˜ 값은 항상 1 μ΄μƒμ΄λ―€λ‘œ, IDFκ°’κ³Ό TF-IDF값은 항상 0 이상이 됨

    • νŠΉμ • 단어λ₯Ό ν¬ν•¨ν•˜λŠ” λ¬Έμ„œλ“€μ΄ λ§Žμ„ 수둝 둜그 ν•¨μˆ˜ μ•ˆμ˜ 값이 1에 κ°€κΉŒμ›Œμ§€κ²Œ 되고, 이 경우 IDFκ°’κ³Ό TF-IDF값은 0에 κ°€κΉŒμ›Œμ§€κ²Œ 됨

πŸ’‘TfidfVectorizer

  • λ¬Έμ„œ λͺ¨μŒμ„ TF-IDF κΈ°λŠ₯의 맀트릭슀둜 λ³€ν™˜ν•¨.

  • tf-idfλ₯Ό μ‚¬μš©ν•˜λŠ” λͺ©ν‘œλŠ” 주어진 λ§λ­‰μΉ˜μ—μ„œ 맀우 자주 λ°œμƒν•˜κ³  λ”°λΌμ„œ ν›ˆλ ¨ λ§λ­‰μΉ˜μ˜ μž‘μ€ λΆ€λΆ„μ—μ„œ λ°œμƒν•˜λŠ” νŠΉμ§•λ³΄λ‹€ κ²½ν—˜μ μœΌλ‘œ 덜 μœ μš©ν•œ ν† ν°μ˜ 영ν–₯을 μΆ•μ†Œν•˜λŠ” 것.

  • API documentation : https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html

  • TfidfVectorizer λŠ” μ‚¬μ΄ν‚·λŸ°μ—μ„œ TF-IDF κ°€μ€‘μΉ˜λ₯Ό μ μš©ν•œ 단어 벑터λ₯Ό λ§Œλ“€ 수 μžˆλŠ” λ°©λ²•μž„.

    • norm='l2' 각 λ¬Έμ„œμ˜ ν”Όμ²˜ 벑터 μ •κ·œν™” 방법
      • L2 : λ²‘ν„°μ˜ 각 μ›μ†Œμ˜ 제곱의 합이 1이 λ˜λ„λ‘ λ§Œλ“œλŠ” 것이고 κΈ°λ³Έ κ°’
      • L1 : λ²‘ν„°μ˜ 각 μ›μ†Œμ˜ μ ˆλŒ“κ°’μ˜ 합이 1이 λ˜λ„λ‘ 크기λ₯Ό 쑰절
    • smooth_idf=False
      • ν”Όμ²˜λ₯Ό λ§Œλ“€ λ•Œ 0으둜 λ‚˜μ˜€λŠ” ν•­λͺ©μ— λŒ€ν•΄ μž‘μ€ 값을 λ”ν•΄μ„œ(μŠ€λ¬΄λ”©μ„ ν•΄μ„œ) ν”Όμ²˜λ₯Ό λ§Œλ“€μ§€ μ•„λ‹ˆλ©΄ κ·Έλƒ₯ 생성할지λ₯Ό κ²°μ •
    • sublinear_tf=False
    • use_idf=True
      • TF-IDFλ₯Ό μ‚¬μš©ν•΄ ν”Όμ²˜λ₯Ό λ§Œλ“€ 것인지 μ•„λ‹ˆλ©΄ 단어 λΉˆλ„ 자체λ₯Ό μ‚¬μš©ν•  것인지 μ—¬λΆ€

πŸ’‘λ¬Έμž μ „μ²˜λ¦¬

  1. 숫자 제거
  • re.sub 이용
import re
df["title"].map(lambda x : re.sub("[0-9]", "", x))
  • str.replace 이용
df["title"].str.replace("[0-9]", "", regex=True)
  1. 특수문자 제거
  • 특수 문자 μ‚¬μš©μ‹œ μ •κ·œν‘œν˜„μ‹μ—μ„œ 메타 문자둜 νŠΉλ³„ν•œ 의미λ₯Ό κ°–κΈ° λ•Œλ¬Έμ— μ—­μŠ¬λž˜μ‹œλ₯Ό 톡해 μ˜ˆμ™Έμ²˜λ¦¬(escape)λ₯Ό ν•΄μ£Όμ–΄μ•Ό 함

  • 특수문자 제거 μ‹œ ꡬ두점 μ°Έκ³ 

    • string 라이브러리의 string.punctuation
df["title"].str.replace("[!\"\$\*\.]", "", regex=True)
  1. λŒ€λ¬Έμž -> μ†Œλ¬Έμž λ³€κ²½
  • λŒ€μ†Œλ¬Έμžλ₯Ό λ‹€λ₯Έ 문자둜 보기 λ•Œλ¬Έμ— ν•˜λ‚˜λ‘œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄
  • df["title"].str.lower()
  1. ν•œκΈ€, 영문과 곡백만 남기고 λͺ¨λ‘ 제거
  • df["title"].str.replace("[^γ„±-γ…Žγ…-γ…£κ°€-힣A-Za-z ]", "", regex=True)
  1. 곡백 μ—¬λŸ¬ κ°œλŠ” ν•˜λ‚˜λ‘œ 처리
  • df["title"].str.replace("[\s]+", " ", regex=True)
  • 이λ₯Ό μ΄μš©ν•΄μ„œ μ€‘λ³΅λ˜λŠ” λ¬Έμžμ—΄μ„ ν•˜λ‚˜λ‘œ μ²˜λ¦¬ν•  수 있음
    • re.sub("[γ…‹]+", "γ…‹", "γ…‹γ…‹γ…‹γ…‹γ…‹")
  1. λΆˆμš©μ–΄ 처리
  • λΆˆμš©μ–΄λŠ” 직접 μ§€μ •ν•΄μ„œ μ‚¬μš©
  1. μ›Œλ“œν΄λΌμš°λ“œ
  • μ›Œλ“œν΄λΌμš°λ“œλ‘œ λ§Œλ“€κΈ° μœ„ν•΄ μ‹œλ¦¬μ¦ˆ ν˜•νƒœμ—μ„œ ν•˜λ‚˜μ˜ λ¬Έμž₯으둜 λ§Œλ“€μ–΄μ€˜μ•Ό 함
    • "".join(df['title'])
profile
μžλΌλ‚˜λΌ μƒˆμ‹Ήμƒˆμ‹ΉπŸŒ±
post-custom-banner

0개의 λŒ“κΈ€