-
https://ruddy-eocursor-bfc.notion.site/232adce7255a808b8718e0d94c8247fd?source=copy_link
증상 군집/분류 | Notion
Made with Notion, the all-in-one connected workspace with publishing capabilities.
ruddy-eocursor-bfc.notion.site
토큰화
띄어쓰기 기준 으로 토큰화 만들기
corpus_tokenized = [ ['나', '는', '밥', '을', '먹', '었', '다'], ['그녀', '는', '라면', '을', '먹', '었', '다'] ] # 각 토큰 리스트를 띄어쓰기로 합치기 corpus_joined = [' '.join(tokens) for tokens in corpus_tokenized] # TF-IDF 벡터화 tfidf_matrix = vectorizer.fit_transform(corpus_joined)
Tockenizer 대입
def my_tokenizer(text): # 형태소 분석 결과를 리스트로 반환하는 함수 # 예: mecab, konlpy 등 사용 return 형태소_분리기(text) # ['나', '는', '밥', '을', '먹', '었', '다'] vectorizer = TfidfVectorizer(tokenizer=my_tokenizer, lowercase=False) tfidf_matrix = vectorizer.fit_transform(raw_text_list)
문장을 TF-IDF 벡터화한 예시
문장 "나는" "밥을" "먹었다" "그녀는" "라면을" "밥이" "최고야"
나는 밥을 먹었다 1.0 1.2 1.1 0 0 0 0 그녀는 라면을 먹었다 0 0 1.1 1.0 1.3 0 0 밥이 최고야 0 0 0 0 0 1.4 1.5 각 값은 문장과 단어의 TF-IDF 값
TF-IDF 계산 코드
from sklearn.feature_extraction.text import TfidfVectorizer corpus= ["나는 밥을 먹었다", "그녀는 라면을 먹었다", "밥이 최고야"] # TF-IDF 벡터라이저 생성 및 학습 vectorizer = TfidfVectorizer(max_features=20000). # max 값을 알아서 조정 tfidf_matrix = vectorizer.fit_transform(corpus) # 단어 목록 (벡터의 각 축 이름) print("단어 목록:", vectorizer.get_feature_names_out()) # 문장별 벡터 출력 print("TF-IDF 벡터 (array):") print(tfidf_matrix.toarray())
- 조사 제외
차원축소
TruncatedSVD
from sklearn.decomposition import TruncatedSVD svd = TruncatedSVD(n_components=100) X_reduced = svd.fit_transform(tfidf_matrix)
PCA (밀집 행렬용)
from sklearn.decomposition import PCA import numpy as np pca = PCA(n_components=10) # 10차원으로 축소 X_reduced = pca.fit_transform(tfidf_matrix) print(X_reduced.shape) # (100, 10)
코사인 유사도 거리
$$ cosine\_distance(A, B) = 1 - \cfrac{A \cdot B}{\|A\| \|B\|} $$
from sklearn.metrics.pairwise import cosine_similarity, cosine_distances # 코사인 유사도 행렬 sim_matrix = cosine_similarity(tfidf_matrix) # 코사인 거리 행렬 dist_matrix = cosine_distances(tfidf_matrix) # 문장과 corpus 사이의 유사도 계산 sims = cosine_similarity(tfidf_matrix[i], tfidf_matrix) # shape: (1, 3)
Hierarchical Clustering (AgglomerativeClustering)
from sklearn.cluster import AgglomerativeClustering agg = AgglomerativeClustering(n_clusters=50, linkage='ward') # 세밀한 군집 수 가능 labels = agg.fit_predict(X)
HDBSCAN
import hdbscan clusterer = hdbscan.HDBSCAN(min_cluster_size=10) labels = clusterer.fit_predict(X)
'AI Study' 카테고리의 다른 글
AutoEncoder (0) 2022.03.24