[와인데이터] 비지도학습 2차시

리냥·2023년 11월 15일
0
  1. pca를 k-means로 변경하기
  2. pca를 dbscan을 활용하는 것으로 변경하기
  • 기존 코드 이어서 사용

1. k-means



  • pca와 다른 방식으로 차원 축소 수행
  • k-means클러스터링을 사용해 데이터를 3개의 클러스터로 그룹화
  • cluster: 클러스터링 결과를 나타내기 위한 열

1-1. pca-> k-means


  1. pca 관련 코드 제거
  2. KMeans가져오기
from sklearn.cluster import KMeans
  1. 특성행렬 정의: 타켓 혹은 pca 관련 열을 제외한 나머지 열을 k-means의 특정행렬로 설정
X = df.drop(['목표_열', 'PC1', 'PC2', '다른_PCA_열'], axis=1)
  1. k-means 객체 생성(클러스터의 수인 n_cluster을 설정)
kmeans = KMeans(n_clusters=3, random_state=123456)  # 필요한 경우 클러스터 수를 조정
  1. k-menas 학습
kmeans.fit(X)
  1. 클러스터링 할당
df['cluster'] = kmeans.labels_
  1. 결과 시각화

1-2. 해당 코드 순서 정리


  1. 라이버러리 임포트 : sklearn.cluster.kMeans 임포트
  2. 특징 행렬 설정: quility, pc1, pc2, grade열을 제외한 나머지 열을 특징 행렬 x로 설정
  3. k-means 클러스터링 객체 생성: n_clusters 매개변수를 사용해 클러스터 지정,random_state(재현성)
  4. k-means 모델 훈련
  5. 클러스터링 할당: 각 샘플에 대한 클러스터 할당 결과 kmeans.label_
  6. 데이터프레임의 cluster열에 저장
  7. 각 클러스터에 속한 샘플 수를 확인하기 위해 value_counts() aptjem tkdyd
  8. pc1(x), pc2(y)를 하는 산점도, 각 샘플을 클러스터에 따라 다른 색상으로 표시

### 1-3. 해당 코드 시각화 정리
  1. 군집0(파란색) pc1&pc2 값 낮은 데이터
  2. 군집1(주황색) pc1 높고 pc2 낮은 데이터
  3. 군집2(초록색) pc1 & pc2 높은 데이터


2. DBSCAN


  • 밀도기반 공간 클러스터 알고리즘
  • 데이터 포인터들의 밀도 기반
  • 주어진 반경 내에 (epsilon) 최소 데이터 포인트의 개수(min_samples)을 기준으로 클러스터 형성
  • 밀도가 높은 지역 (클러스터), 밀도가 낮은 지역(노이즈)
  • 클러스터의 개수를 사용자가 미리 알 필요가 없음(k-means와 차이)
  • 노이즈에 민감하고 클러스터의 중심에 따라 결과가 달라지는 k-means와 달리 노이즈를 식별하고 처리 가능



2-1. pca-> DBSCAN


  1. pca 관련 코드 삭제
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import DBSCAN
  1. 정규화(dbscan은 밀도 기반 -> 정규화 중요)
X_scaled = StandardScaler().fit_transform(X)
  1. dbscan객체 생성(eps, min_samples등 매개변수 조절)
dbscan = DBSCAN(eps=0.5, min_samples=5)
  1. 클러스터 할당 및 시각화

2-2. 해당 코드 순서 정리


  1. 라이브러리 임포트: standardscaler, dbscan(클러스터링을 위한 객체 생성)
  2. 데이터 전처리: quility, pc1, pc2, grade, cluster 열을 제외한 나머지 열 특성행렬 x
  3. 특성 행렬 정규화
  4. dbscan 모델 구축 및 훈련: eps(클러스터의 반경), min_sample(클러스터로 인정되기 위한 최소 데이터 포인트 수), fit_predict(훈련) & cluster열에 저장
  5. 클러스터링 데이터 포인터 개수 출력
  6. 시각화

profile
안녕하세요. 일로 인해 잠시 쉽니다 :)

0개의 댓글