π μ€λ ν μΌ
- 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)
-
ν λ¨μ΄κ° λ¬Έμ μ§ν© μ 체μμ μΌλ§λ 곡ν΅μ μΌλ‘ λνλλμ§λ₯Ό λνλ΄λ κ°
-
μ 체 λ¬Έμμ μλ₯Ό ν΄λΉ λ¨μ΄λ₯Ό ν¬ν¨ν λ¬Έμμ μλ‘ λλ λ€ λ‘κ·Έλ₯Ό μ·¨ν¨
- D : μ 체 λ¬Έμμ μ
- λΆλͺ¨ : λ¨μ΄ t κ° ν¬ν¨λ λ¬Έμμ μ. λ¨μ΄κ° μ 체 λ§λμΉ μμ μ‘΄μ¬νμ§ μμ κ²½μ° 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λ₯Ό μ¬μ©ν΄ νΌμ²λ₯Ό λ§λ€ κ²μΈμ§ μλλ©΄ λ¨μ΄ λΉλ μ체λ₯Ό μ¬μ©ν κ²μΈμ§ μ¬λΆ
π‘λ¬Έμ μ μ²λ¦¬
- μ«μ μ κ±°
import re
df["title"].map(lambda x : re.sub("[0-9]", "", x))
df["title"].str.replace("[0-9]", "", regex=True)
- νΉμλ¬Έμ μ κ±°
-
νΉμ λ¬Έμ μ¬μ©μ μ κ·ννμμμ λ©ν λ¬Έμλ‘ νΉλ³ν μλ―Έλ₯Ό κ°κΈ° λλ¬Έμ μμ¬λμλ₯Ό ν΅ν΄ μμΈμ²λ¦¬(escape)λ₯Ό ν΄μ£Όμ΄μΌ ν¨
-
νΉμλ¬Έμ μ κ±° μ ꡬλμ μ°Έκ³
string
λΌμ΄λΈλ¬λ¦¬μ string.punctuation
df["title"].str.replace("[!\"\$\*\.]", "", regex=True)
- λλ¬Έμ -> μλ¬Έμ λ³κ²½
- λμλ¬Έμλ₯Ό λ€λ₯Έ λ¬Έμλ‘ λ³΄κΈ° λλ¬Έμ νλλ‘ μ²λ¦¬νκΈ° μν΄
df["title"].str.lower()
- νκΈ, μλ¬Έκ³Ό κ³΅λ°±λ§ λ¨κΈ°κ³ λͺ¨λ μ κ±°
df["title"].str.replace("[^γ±-γ
γ
-γ
£κ°-ν£A-Za-z ]", "", regex=True)
- 곡백 μ¬λ¬ κ°λ νλλ‘ μ²λ¦¬
df["title"].str.replace("[\s]+", " ", regex=True)
- μ΄λ₯Ό μ΄μ©ν΄μ μ€λ³΅λλ λ¬Έμμ΄μ νλλ‘ μ²λ¦¬ν μ μμ
re.sub("[γ
]+", "γ
", "γ
γ
γ
γ
γ
")
- λΆμ©μ΄ μ²λ¦¬
- λΆμ©μ΄λ μ§μ μ§μ ν΄μ μ¬μ©
- μλν΄λΌμ°λ
- μλν΄λΌμ°λλ‘ λ§λ€κΈ° μν΄ μλ¦¬μ¦ ννμμ νλμ λ¬Έμ₯μΌλ‘ λ§λ€μ΄μ€μΌ ν¨