
안녕하세요
어제 끝내주게 TIL 스킵해버린 강대입니다 ㅎㅎ 😅
이번주는 프로젝트 진행하느라 정말 ,,.
고되네요
갈수록 모니터만 보느라 눈 건강이 정말 안 좋아진 거 같은데
여러분들도 눈알 빠지기 싫으시면 블루라이트 차단 안경이라도 쓰세요
(근데 내 안경은 몰라)
근데 벌써 훈련 시작한 지 반이 됐네요 ㅎㅎ
어찌저찌 여기까지 온 게 신기하긴 하네요 😆
어제부터 저는
군집분석을 시작하면서
데이터 표준화 후 이상치(DBScan) 제거,
샘플링(10000개)으로 군집(계층 군집) 최대 실루엣 계수 : 0.44 도출
시도해볼 내용 :
컬럼 (5개) 이상치(DBScan) 제거,
계층 군집분석,
실루엣 계산을 하루종일 했습니다 !!!
k-means말고 계층 분석을 하면서
처음으로 노트북에 메모리 경고가 떴습니다...
그래서 어쩔 수 없이 샘플링으로 돌리거나 분할실행으로 코드를 짰습니다 !
# 데이터 로드
df = pd.read_csv('/Users//6월_심화프로젝트/data/data.csv')
# 선택할 특성들
feat = ['acousticness', 'explicit', 'instrumentalness', 'loudness', 'tempo', 'key', 'mode', 'speechiness']
# 선택한 특성들만으로 데이터프레임 업데이트
df = df[feat]
# 데이터프레임을 numpy 배열로 변환
X = df.values
# 표준화
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# DBSCAN을 사용하여 이상치 제거
dbscan = DBSCAN(eps=0.5, min_samples=10)
cluster_labels = dbscan.fit_predict(X_scaled)
# 이상치 제거 후 데이터프레임 업데이트
X_cleaned = X_scaled[cluster_labels != -1]
# 계층적 군집 분석 모델 초기화 (클러스터 개수 = 6)
n_clusters = 6
agg_clustering = AgglomerativeClustering(n_clusters=n_clusters, linkage='ward')
# 데이터를 작은 배치로 나누어 계층적 군집 분석 및 실루엣 계수 계산
batch_size = 1000 # 1000개씩 데이터를 나누어 처리
silhouette_scores = []
for i in range(0, len(X_cleaned), batch_size):
X_batch = X_cleaned[i:i + batch_size]
labels_batch = agg_clustering.fit_predict(X_batch)
if len(np.unique(labels_batch)) > 1: # 실루엣 계수를 계산할 수 있는 경우에만 계산
score = silhouette_score(X_batch, labels_batch)
silhouette_scores.append(score)
# 클러스터링 결과와 실루엣 계수 출력
print(f"Batch {i+1}-{i+len(X_batch)} - Cluster labels: {labels_batch}, Silhouette score: {score}")
# 전체 데이터에 대한 평균 실루엣 계수 출력
mean_silhouette_score = np.mean(silhouette_scores)
print(f"Mean Silhouette Score: {mean_silhouette_score}")
이렇게 코드를 짜보면
Batch 1-1000 - Cluster labels: [0 0 2 2 1 1 3 4 2 3 4 3 3 1 0 4 4 1 0 0 0 3 1 4 1 0 1 4 2 4 2 0 0 4 0 4 4
4 2 2 1 4 3 3 1 1 0 2 2 3 2 4 2 0 3 1 0 4 2 1 4 2 1 2 3 0 0 0 0 4 0 3 4 0
2 1 3 1 2 4 0 2 4 2 4 1 4 0 0 0 1 4 2 1 0 0 2 3 0 1 1 1 0 1 0 0 2 0 3 0 2
.
.
.
Silhouette score: 0.30353669221630586
Mean Silhouette Score: 0.23345518874864102
이런 식으로 클러스터링 수가 새겨지면서
실루엣 계수와 전체 데이터 평균의 실루엣 계수가 출력되는데요
좀처럼 0.40도 넘지않는 실루엣 계수와 기다림의 연속으로
지쳐가던 찰나
...,,
팀원들과 튜터님을 찾아간 결과
튜터님께선 실루엣 계수는 수치로만 판단할 뿐이지
군집은 비지도 학습이기 때문에
군집 그래프의 밀도나 컬럼 간의 해석도가 높다면
실루엣 계수가 낮다고 연연하지 말고
군집이 잘 이뤄져만 있다면 실루엣 계수는 낮아도 무방하다고 하셨다
🥹🥹🥹🥹
덕분에,,
저와 팀원들은 숫자에 연연하지 않고
저는 여태껏하던 코드를 다 엎어버리게 됐어요
다시 새롭게 시작하면 됩니다
오케이 솔직하게 말할게요
계수만 신경쓰느라 오늘 따로 보여드릴게 없어요
내일 진짜 제대로 들고 돌아올게요
보여줄게요 진짜
다들 내일까지만
참아봅시다 !!
화이팅이에욘 🍀🍀🍀