파이썬으로 유전 알고리즘을 활용한 문서 군집화 구현하기

개요

문서 군집화는 비슷한 특성을 가진 문서들을 그룹화하는 작업입니다. 이를 통해 데이터를 분석하고 의미있는 정보를 추출하는데 도움을 줄 수 있습니다. 유전 알고리즘(Genetic Algorithm)은 문제를 해결하기 위해 자연 선택과 유전적 연산을 모방하는 알고리즘입니다. 이를 활용하여 문서 군집화를 구현해보겠습니다.

알고리즘 개요

  1. 데이터 전처리: 문서들을 벡터 형태로 표현하기 위해 TF-IDF(Term Frequency-Inverse Document Frequency) 등의 방법을 사용하여 피처 벡터화합니다.
  2. 초기 집단 생성: 무작위로 초기 집단을 생성합니다. 각 개체(해당 문서를 나타냄)는 랜덤으로 군집에 할당됩니다.
  3. 적합도 평가: 각 개체의 적합도(해당 군집 내 유사도 총합)를 평가합니다.
  4. 선택과 복제: 높은 적합도를 가진 개체를 선택하고, 복제하여 다음 세대로 전달합니다.
  5. 교배: 선택된 개체들을 교배하여 다음 세대 개체를 생성합니다. 염색체의 일부를 교차하거나 돌연변이가 발생합니다.
  6. 군집 업데이트: 새로운 개체들을 군집에 할당합니다.
  7. 반복: 지정된 세대 수나 조건에 도달할 때까지 3~6 과정을 반복합니다.

구현 예시

다음은 파이썬을 사용하여 유전 알고리즘을 통한 문서 군집화를 구현하는 예시 코드입니다. 이 코드는 scikit-learn 라이브러리의 KMeans 알고리즘을 사용하여 초기 집단을 생성하고, 유사도 측정에는 cosine similarity를 사용합니다.

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics.pairwise import cosine_similarity

# 데이터 전처리
documents = [...]  # 문서 데이터
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(documents)

# 초기 집단 생성 (KMeans 알고리즘)
kmeans = KMeans(n_clusters=5, random_state=0).fit(X)

# 적합도 평가 (cosine similarity)
similarity_matrix = cosine_similarity(X)
fitness_scores = similarity_matrix.diagonal()

# 선택과 복제
selected_indices = np.argsort(fitness_scores)[-10:]  # 상위 10개 개체 선택
selected_individuals = kmeans.labels_[selected_indices]

# 교배
next_generation = np.repeat(selected_individuals, 2)

# 군집 업데이트
kmeans = KMeans(n_clusters=5, random_state=0).fit(X)
updated_clusters = kmeans.labels_

# 반복
for generation in range(10):
    # 적합도 평가
    similarity_matrix = cosine_similarity(X)
    fitness_scores = similarity_matrix.diagonal()
    
    # 선택과 복제
    selected_indices = np.argsort(fitness_scores)[-10:]  # 상위 10개 개체 선택
    selected_individuals = kmeans.labels_[selected_indices]
    
    # 교배
    next_generation = np.repeat(selected_individuals, 2)
    
    # 군집 업데이트
    kmeans = KMeans(n_clusters=5, random_state=0).fit(X)
    updated_clusters = kmeans.labels_

이 예시 코드를 참고하여 문서 군집화를 구현해보세요. 유전 알고리즘을 활용하면 큰 규모의 문서 군집화 문제에도 적용할 수 있는 강력한 해법을 얻을 수 있습니다.

#AI #머신러닝