Study/class note

머신러닝 / 파이썬으로 k-means 모델 만들기2

chanzae 2022. 3. 2. 10:51

ㅇ과일과 단백질 데이터를 2개로 군집화하고 seaborn으로 시각화하기

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 1. 데이터 로드
fruits = pd.DataFrame(
{'재료': ['사과','베이컨','배','당근','참외','치즈','햄','계란'],
 '단맛':[10,1,10,7,8,1,2,3],
 '아삭한맛':[9,3,8,10,7,1,1,2],
 '음식종류':['과일','단백질','과일','과일','과일','단백질','단백질','단백질']}
)

#2. 필요한 컬럼만 선택
fruits2 = fruits.iloc[:,1:3]

#3. 정규화 진행
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
fruits_scaled = scaler.fit_transform(fruits2)

#4. k-means 모델 생성
from sklearn.cluster import KMeans

model = KMeans(n_clusters = 2, random_state = 1)

#5. 군집화 k = 2
model.fit(fruits_scaled)
fruits['cluster'] = model.labels_

#6. 정확도 확인
y_train = fruits.음식종류.apply(lambda x: x == '과일').astype(int)
sum(y_train == model.labels_) / len(y_train)  #1.0

#7. 시각화
plt.rc('font',family = 'Malgun Gothic')  # 한글 안깨지게 하는 코드
sns.swarmplot(data = fruits, x = '단맛', y = '아삭한맛', size = 10, hue = 'cluster')

plt.show()

 

ㅇ사이킷런의 k-means 함수를 이용해 유방암 데이터의 양성과 악성을 분류

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.cluster import KMeans

#1. 데이터 로드
df = pd.read_csv("c:\\data\\wisc_bc_data.csv")

#2. 결측치 확인
df.isnull().sum()

#3. 필요한 컬럼 선택
df2 = df.iloc[:,2:]  #환장번호랑 정답 제외
df2.head()

#4. 정규화

scaler = MinMaxScaler()
df_scaled = scaler.fit_transform(df2)

#5. k-means모델 생성 및 훈련, 군집화
model = KMeans(n_clusters = 2, random_state = 1)
model.fit(df_scaled)
km = model.labels_

#6. 정확도 확인
df['cluster'] = km
df[['diagnosis','cluster']]

y_train = df.diagnosis.apply(lambda x: x=='M').astype(int)
sum(y_train == km) / len(y_train) * 100  #92.79437609841827

> 파이썬은 R처럼 차원을 축소해서 시각화할 수 없음.

 

 

반응형