rubus0304 님의 블로그
[머신러닝 군집] 본문
pip install yellowbrick 이거 해야함!!
Z-score 평균으로부터 얼마나 떨어져
Z-Score : 0 해당 데이터는 평균과 같음을 의미합니다. (=평균에서 떨어진 거리가 0)
IQR 4분위로 나눈
데이터의 25% 지점()과 75% 지점() 사이의 범위()를 사용합니다. 이를 벗어나는 값들은 모두 이상치로 간주
------ 이 아래로 cluster 해보기 ------
Isolation Forest -- 프로젝트에서 사용해보기
DBScan 밀도기반
표준화:
실험하고 더 잘 나오는 거로....
minmax scale 자주 안 사용
모든 데이터 0과 1사이 배치 (표준화보다 정규화에 더 가까움)
- 데이터의 분포를 가져갈 수 없기 때문
standrd scale 현실에서 그냥 씀
평균을 0, 표준편차를 1로 변환
데이터의 한계가 없음.
* 표준화는 필수가 아니다.
데이터셋이 압도적으로 크면 표준화해주는게 좋음
그러나 왠만하면 하는 걸 추천.
둘다 해보고 비교해보고 하는것.
차원축소(PCA)
많은 컬럼으로 구성된 다차원 데이터 세트의 차원을 축소해 새로운 차원의 데이터 세트를 생성하는 것.
(컬럼이 너무 많이 때문에 학습이 어렵고, 더 좋은 특징만 가지고 사용하겠다.)
각각의 테이블들에서 뽑아내서 합쳐서 보는 것.
클러스터링할 때,
1. 고유갓은 드랍해야함 숫자형만 넣어야함.
2. 연속형
0번인 친구와 1번 친구 특징 뭔지.
ㄹ
평균 0 분산 1로 만드는 친구 StandardScaler ( )
한번 넣으면 알아서 컬럼끼리 수행함.
pca = PCA (n_components = ) (1~3까지만 넣을 수 있음) 1차원, 2차원, 3차원 (4부터는 안 나옴)
[실습]
# 기본 라이브러리 import
import pandas as pd
import numpy as np
# 시각화 라이브러리 import
import seaborn as sns
import matplotlib.pyplot as plt
# 표준화 라이브러리 import
from sklearn.preprocessing import StandardScaler
# k 값 참고: scree plot을 통한 k 값 확인을 위한 라이브러리 import
from yellowbrick.cluster import KElbowVisualizer
# k 값 참고: distance map 라이브러리 import
from yellowbrick.cluster import intercluster_distance
from sklearn.cluster import MiniBatchKMeans
# k 값 참고: 실루엣 계수 확인을 위한 라이브러리 import
from sklearn.metrics import silhouette_score
# 데이터셋 주성분 분석중 하나인 pca 를 수행하기 위한 라이브러리 import
from sklearn.decomposition import PCA
# k-means 알고리즘 활용을 위한 라이브러리 import
from sklearn.cluster import KMeans
import warnings
warnings.filterwarnings('ignore')
# 데이터셋 로드
base_df = pd.read_csv('merge_df.csv')
# 결측치 확인
base_df.isnull().sum()
# 클러스터링 할 컬럼 지정
feature_names=['customer_zip_code_prefix','price','shipping_charges','payment_sequential','payment_value']
# 지정된 컬럼으로 새로운 dataframe 생성
base_df = pd.DataFrame(base_df, columns=feature_names)
# 표준화
# 표준화 방식: standard scaler (평균0, 분산1)
scale_df = StandardScaler().fit_transform(base_df)
# 주성분 개수를 판단하기 위한 pca임의 시행
pca = PCA(n_components=3)
pca.fit(scale_df)
# 설정한 주성분의 갯수로 전체 데이터 분산을 얼만큼 설명 가능한지
pca.explained_variance_ratio_.sum()
# pca 시행
pca_df = pca.fit_transform(scale_df)
pca_df = pd.DataFrame(data = pca_df, columns = ['PC1','PC2','PC3'])
# Show the first 5 firms
pca_df.head()
# 초기 k 값 참고를 위한 scree plot 을 그리고, 군집이 나뉘는 시간까지 고려한 k 값 확인
model = KMeans()
# k 값의 범위를 조정해 줄 수 있습니다.
visualizer = KElbowVisualizer(model, k=(3,12))
# 데이터 적용
visualizer.fit(pca_df)
visualizer.show()
# 초기 k 값 참고를 위한 distance map 시각화
# 그룹의 갯수를 지정해 줄 수 있습니다. 저는 5로 적어두었습니다.
intercluster_distance(MiniBatchKMeans(5, random_state=42), pca_df)
# KMEANS
# 군집개수(n_cluster)는 5,초기 중심 설정방식 랜덤,
kmeans = KMeans(n_clusters=5, random_state=42,init='random')
# pca df 를 이용한 kmeans 알고리즘 적용
kmeans.fit(pca_df)
# 클러스터 번호 가져오기
labels = kmeans.labels_
# 클러스터 번호가 할당된 데이터셋 생성
kmeans_df = pd.concat([pca_df, pd.DataFrame({'Cluster':labels})],axis = 1)
# 클러스터 번호가 할당된 데이터셋 생성
kmeans_df
# 3차원으로 시각화
x =kmeans_df["PC1"]
y =kmeans_df["PC2"]
z =kmeans_df["PC3"]
fig = plt.figure(figsize=(12,10))
ax = plt.subplot(111, projection='3d')
ax.scatter(x, y, z, s=40, c=kmeans_df["Cluster"], marker='o', alpha = 0.5, cmap = 'Spectral')
ax.set_title("The Plot Of The Clusters(3D)")
plt.show()
# 2차원으로 시각화
plt.figure(figsize=(8,6))
sns.scatterplot(data = kmeans_df, x = 'PC1', y='PC2', hue='Cluster')
plt.title('The Plot Of The Clusters(2D)')
plt.show()
'Data Analyst > 라이브세션' 카테고리의 다른 글
[머신러닝 개인과제 해설] (0) | 2024.12.11 |
---|---|
[비즈니스 매트릭스 기초] (0) | 2024.12.11 |
[머신러닝 빌드업2] 지도, 비지도, 강화학습 (0) | 2024.11.25 |
[머신러닝 빌드업 1] 머신러닝 개념 (0) | 2024.11.21 |
[통계야 놀자] 강의 주요내용 (1) | 2024.11.21 |