왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 영상처리
  • OpenCV
  • TensorFlow
  • ComputerVision
  • UnboundLocalError
  • PYTHON
  • ckpt_file
  • matplotlib
  • 기상탐사
  • pip install labelme
  • 컴퓨터비전
  • tune()
  • imageprocessing
  • numpy
  • 딥러닝
  • unsupervised
  • labelme UnocodeDecodeError
  • yolov8
  • labelme
  • alibidetect
  • 의료이미징
  • 비지도학습
  • 영상처리역사
  • PIL
  • 영상기술
  • encoding='utf-8'
  • pytorch
  • get_long_description
  • alibi-detection
  • maskimage

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

머신러닝 : K-Means Clustering
인공지능/머신러닝

머신러닝 : K-Means Clustering

2022. 12. 5. 12:30
728x90

K-Means Clustering은 Unsupervised Learning이다.

다음을 두개, 세개, 네개 그룹 등등 원하는 그룹으로 만들 수 있다.

또다시 중심에 직교하는 선을 긋고, 자신의 영역안에 있는 것들을 자신의 색으로 바꾼다.

 

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

우선 필요한 라이브러리들을 import 해줍니다.

df=pd.read_csv('../data/Mall_Customers.csv')
df

데이터 프레임 확인, describe로 데이터 요약통계랑을 확인하고

df.isna().sum()

결측치 확인

X,y를 분리하여 셋팅하던 이전 포스팅 글들과는 다르게 언수퍼바이즈드 러닝은 y가 없기 때문에, X만 셋팅한다.

X=df.iloc[:,3:]

모델링 과정.

from sklearn.cluster import KMeans
wcss = [] # 빈 리스트 생성
for k in np.arange(1,10+1):
    kmeans=KMeans(n_clusters=k,random_state=5)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)

wcss (Within Clusters Sum of Squares)를 확인 해보면 아래 사진과 같다.

# 위의 각 클러스터의 갯수마다 구한
# WCSS값을, 차트로 나타내라. => 엘보우 메소드(Elbow Method)

x = np.arange(1,10+1)
plt.plot(x,wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')
plt.show()

kmeans = KMeans(n_clusters=5,random_state=5)
y_pred=kmeans.fit_predict(X)
df['Group']=y_pred
df

예측한 그룹을 df의 새로운 컬럼으로 만들고 df 를 확인해보면 아래 사진과 같다

import seaborn as sb
sb.scatterplot(data=df,x='Annual Income (k$)',y='Spending Score (1-100)')
plt.show()

seaborn의 scatterplot으로 차트를 확인해보면 아래 사진과 같다.

plt.figure(figsize=[12,8])
plt.scatter(X.values[y_pred == 0, 0], X.values[y_pred == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X.values[y_pred == 1, 0], X.values[y_pred == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X.values[y_pred == 2, 0], X.values[y_pred == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(X.values[y_pred == 3, 0], X.values[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4')
plt.scatter(X.values[y_pred == 4, 0], X.values[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroids')
plt.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()


예제)

# 1. 그룹이 3인 사람들의 데이터를 가져오세요.

group_3=df.loc[df['Group'] == 3,]
group_3

# 2. 그룹이 3인 사람들의 수입 평균은 얼마입니까?

group_3['Annual Income (k$)'].mean()

#3 각 그룹별, 수입과 소비지표의 평균을 구하시오

 

1) groupby함수를 이용한 방법.

df.groupby('Group')[['Spending Score (1-100)','Annual Income (k$)']].agg([np.mean])

 

2) pivot_table을 이용한 방법.

pd.pivot_table(df,index='Group', aggfunc=np.mean,values=['Annual Income (k$)','Spending Score (1-100)'])

'인공지능 > 머신러닝' 카테고리의 다른 글

지도학습 vs 비지도학습 쉽게 이해하기  (0) 2023.08.04
머신러닝 : Hierarchical Clustering과 Dendrogram  (0) 2022.12.05
머신러닝 : Decision Tree  (0) 2022.12.02
머신러닝 : BREAST CANCER CLASSIFICATION 예제풀이  (0) 2022.12.02
머신러닝 : Support Vector Machine SVM  (0) 2022.12.02
    '인공지능/머신러닝' 카테고리의 다른 글
    • 지도학습 vs 비지도학습 쉽게 이해하기
    • 머신러닝 : Hierarchical Clustering과 Dendrogram
    • 머신러닝 : Decision Tree
    • 머신러닝 : BREAST CANCER CLASSIFICATION 예제풀이
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바