클러스터링 과정에서 문제가 생겼다.
차원 축소와 K-means 최적화를 진행하지 않고 디폴트로 주어진 값으로 계산해 버린것.....
아직은 클론 코딩만 하다보니 코드를 세세하게 점검하는게 미흡하다.
그래도 일단 돌아가는 건 확인했으니 일단 차원 축소와 K-means 최적화 해서 다시 적용해 봐야겠다.
그래도 다행히 PCA와 K-means 예제가 많다는 것!
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
### 데이터 불러오기
df = #csv 데이터 경로
### PCA 수행
pca = PCA()
pca.fit(df)
variance_ratio = pca.explained_variance_ratio_
cumulative_variance_ratio = np.cumsum(variance_ratio)
### Cumulative Explained Variance plot 그리기
plt.plot(cumulative_variance_ratio)
plt.xlabel('Number of Principal Components')
plt.ylabel('Cumulative Explained Variance Ratio')
plt.title('Cumulative Explained Variance Plot')
plt.grid(True)
plt.show()
### 최적 차원 수 결정하기
n_components = np.argmax(cumulative_variance_ratio >= 0.95) + 1
print("Optimal number of principal components:", n_components)
def KMeans_clustering(df, k, data_scaled):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(data_scaled)
df['cluster'] = kmeans.labels_
return df
### elbow method를 사용하여 최적의 K 값을 찾는 함수 정의
def find_optimal_k(df_pca):
sse = []
for i in range(1, 21):
kmeans = KMeans(n_clusters=i, random_state=42)
kmeans.fit(df_pca)
sse.append(kmeans.inertia_)
plt.plot(range(1, 21), sse, marker='o')
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.grid(True)
plt.show()
### 데이터 전처리 및 PCA 수행
df_scaled = StandardScaler().fit_transform(df)
df_pca = data_pca(df_scaled, 15)
### elbow method를 사용하여 최적의 K 값을 찾음
find_optimal_k(df_pca)
### K-means clustering을 수행하여 클러스터링 결과를 출력
k_optimal = 5 # elbow point에서 결정한 최적의 K 값
data_scaled = StandardScaler().fit_transform(df_pca)
df_pca_clustered = KMeans_clustering(df_pca, k_optimal, data_scaled)
print(df_pca_clustered.head())
참고로 위 코드는 벡터값을 추출한 .csv파일로 부터 최적의 차원 갯수와 K-means 값을 계산하는 코드이다.
오늘은 여기까지하고 내일 다시해야겠다