PCA와 K-means 최적화

Woo Jin Cho·2023년 5월 1일
0

Study(stroke)

목록 보기
1/1
post-thumbnail


클러스터링 과정에서 문제가 생겼다.
차원 축소와 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 값을 계산하는 코드이다.
오늘은 여기까지하고 내일 다시해야겠다

profile
A tough machine learning curriculum for humanities majors

0개의 댓글