
K-means 군집화는 초기 centroid의 위치에 따라 군집 결과가 달라질 수 있다.

우측은 좋은 군집이 아니다.

초깃값에 따라 local optima에 빠질 수 있음
가장 많이 사용되는 초기화 방법
초기 centroid들이 최대한 서로 멀리 떨어지도록 선택
→ Random seed보다 빠르게 수렴

적당한 수의 의미있는 군집을 표현하는 K 결정 필요
K-means의 군집화 결과를 판단하는 방법: SSE, 실루엣

거리의 제곱을 해서 제곱합. 이걸 n으로 나누면 이제 MSE가 됨

좌측 실루엣차트에서 통통해야 좋은 군집
KBO 에서 과거 선수들의 기록에 대한 기초적인 데이터 제공

KBO
데이터 다운로드 등의 기능을 제공하지 않으므로, 잘 긁어서 복붙해야 한다

컬럼명까지 잘 긁자
다만 Web Scraping한 데이터를 상업용으로 사용하면 법적 분쟁이 발생할 수 있으니 주의하자.
연도에 따라 제공 데이터 종류가 달랐다.
2002년부터 SB(도루), CS(도루실패) 기록이 '주루기록'으로 이동함

스크래핑한 데이터를 csv 파일로 만들어야 한다.
1. KBO Scraping 하여 csv 만들기
2. 한글 컬럼명 → 영문화
3. 컬럼 추가



대부분의 컬럼이 양의 왜도를 보이며, 각 컬럼의 범위가 다름



주성분을 기존 feature의 수만큼 찾은 후 몇 개의 차원으로 축소할지 결정
MLD에서는 주성분 분석이 지원되지 않으므로, python 스크립트로 처리한다

주의가 뜬건 직전에 설명이 아닌, 노드 이름에 "PCA 주성분 8개 찾기"를 썼기 때문이다. 설명에 쓰도록 하고, 새로고침하면 문제는 사라진다.
노드 이름은 수정하면 오류 발생할 수 있어서 그냥 두고 주로 코멘트작업만 한다고 하셨다.







Train -> 기존 데이터를
Assign -> 신규 데이터를

evaluate는 지도/비지도에 모두 쓰인다.


클러스터를 4개를 만들라 했기 때문에 DistancesToClusterCenter은 4개가 존재

Average Distance to Other Center: 클수록 좋음
Average Distance to Cluster Center:작을수록 좋음


#산점도
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from azureml.core import Run
def azureml_main(dataframe1 = None, dataframe2 = None):
df = dataframe1.copy()
colors = ['blue', 'red', 'green', 'purple'] # 군집색상 정의 (K = 4)
cluster_names = [f'Cluster {i}' for i in range(4)] # 군집이름
plt.figure(figsize=(10, 8)) # 시각화 시작
for cluster in range(4): # 군집별 산점도 그리기
cluster_data = df[df['Assignments'] == cluster]
plt.scatter(
cluster_data['PC1'], cluster_data['PC2'],
c=colors[cluster], label=cluster_names[cluster], alpha=0.7, s=100
)
plt.title('Cluster Analysis: PC1 vs PC2', fontsize=15)
plt.xlabel('Principal Component 1 (PC1)', fontsize=12)
plt.ylabel('Principal Component 2 (PC2)', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.legend(fontsize=10)
plt.axis('equal') # 가로축과 세로축의 스케일 맞춤
img_file = "cluster_scatter_plot.png"
plt.savefig(img_file)
plt.close()
run = Run.get_context(allow_offline=True)
run.upload_file(f"graphics/{img_file}", img_file)
return dataframe1,
#실루엣
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.metrics import silhouette_samples, silhouette_score
from azureml.core import Run
def azureml_main(dataframe1 = None, dataframe2 = None):
df = dataframe1.copy()
X = df[['PC1', 'PC2']].values # 주성분 값을 사용
cluster_labels = df['Assignments'].values # 군집 레이블
silhouette_avg = silhouette_score(X, cluster_labels) # 실루엣 점수 계산
sample_silhouette_values = silhouette_samples(X, cluster_labels)
fig, ax = plt.subplots(figsize=(10, 8)) # 시각화 설정
y_lower = 0 # 군집 간 간격 기준
colors = ['blue', 'red', 'green', 'purple'] # (K = 4)
for i in range(4): # i번째 군집에 속한 샘플 별 실루엣 값 표시
ith_cluster_values = sample_silhouette_values[cluster_labels == i]
ith_cluster_values.sort()
size_cluster_i = ith_cluster_values.shape[0]
y_upper = y_lower + size_cluster_i
ax.fill_betweenx(np.arange(y_lower, y_upper), 0, ith_cluster_values,
facecolor=colors[i], edgecolor=colors[i], alpha=0.7,
label=f'Cluster {i} ({size_cluster_i})')
ax.text(-0.05, y_lower + 0.5 * size_cluster_i, f'Cluster {i}') # 군집 레이블
y_lower = y_upper # 군집 간 간격 = 0
# 전체 평균 실루엣 점수 표시
ax.axvline(x=silhouette_avg, color="red", linestyle="--",
label=f'Avg Silhouette: {silhouette_avg:.3f}')
ax.set_title('Silhouette Analysis for Clustering', fontsize=15)
ax.set_xlabel('Silhouette Coefficient Values', fontsize=12)
ax.set_ylabel('Cluster', fontsize=12)
ax.set_xlim([-0.1, 1]) # x 축 제한 설정
ax.set_ylim([0, y_lower]) # y 축 제한 설정
ax.set_yticks([]) # y축 눈금 제거
plt.legend(loc='lower right')
plt.tight_layout()
img_file = "silhouette_plot.png" # 그래프를 파일로 저장
plt.savefig(img_file)
plt.close()
run = Run.get_context(allow_offline=True) # 파일 업로드
run.upload_file(f"graphics/{img_file}", img_file)
return dataframe1,




미국의 인구조사(census) 데이터를 분석하여 개인의 연간 소득을 예측할 수 있는 모델 구현
이진 분류 모델을 통해 연간 소득 5만 달러를 기준으로 개인 구분
데이터 세트에서 여러 번의 데이터 서브셋을 추출, 의사결정나무를 각각 적용
Kaggle의 Adult Census Income 데이터세트 이용

로컬데이터 등록으로 업로드
앞선 실습에서 사용한 컴퓨팅 인스턴스 이용














Include All 한 뒤에 하는 것을 주의













임계값(Threshold): 특정 확률 이상의 예측값을 Positive로 예측

데이터가 불균형할땐 True Negative가 관여하지 않는 지표가 중요
UCI Repository의 Automobile 데이터세트 이용



양의 왜도 상태.
음의 왜도였으면 보험사 망함




Linear Regression








이후에는 조퇴했다.