지도 학습 vs 비지도 학습
지도 학습은 모델에게 target data(y값)이 주어지나, 비지도 학습은 주어지지 않음
★ 샘플 데이터
from sklearn.datasets import load_wine
import pandas as pd
dataset = load_wine()
data = pd.DataFrame(dataset.data, columns=dataset.feature_names)
df = data.copy()
★ ★ 데이터 전처리
# 표준화 스케일링
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data = scaler.fit_transform(data)
df = data.copy()
# PCA 2차원 축소
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
df = pca.fit_transform(df)
df = pd.DataFrame(df)
1. 비계층적 군집분석 : 군집의 수를 가장 먼저 선정
중심값으로 떨어져있는 거리를 토대로 군집화, 초기 중심 값은 임의로 선정하며, 중심 값이 이동함
1) KMeans
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(df)
pred = kmeans.predict(df)
모델을 만들 때 별 다른 것은 없다. n_clusters 파라미터 즉, 군집의 수만 지정해주어도 모델을 생성할 수 있다.
시각화를 해보면 결과를 볼 수 있다.
df['pred'] = pred
centers = kmeans.cluster_centers_
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(12,6))
sns.scatterplot(x=df.iloc[:,0], y=df.iloc[:,1], hue=df['pred'])
plt.scatter(centers[:,0], centers[:,1])])
★ 실제값과 예측값 비교
df["target"] = dataset.target
df.groupby(["target","pred"])['pred'].count()
범주의 값은 무작위로 선정되기 때문에, target의 0이 pred의 0과 다를 수 있음을 주의하여야 한다.
★ ★ 군집화 갯수 정하는 팁
inertia = []
for i in range(1, 10) :
kmeans = KMeans(n_clusters=i, random_state=1) # 초기 중앙값 고정
kmeans.fit(df)
inertia.append(kmeans.inertia_)
plt.plot(range(1,10), inertia)
군집별로 inertia_값(중심값과 군집 데이터들간의 거리차 제곱)을 도출해본다. random_state는 초기 중앙값을 고정하기 위해 넣는다. 적정선의 군집 수를 정하면 된다.
2. 계층적 군집분석(전통적) : 군집의 수를 나중에 선정
kdata = df[:3]
kdata = kdata.append(df[70:73])
kdata = kdata.append(df[170:173])
결과가 각 0, 1, 2인 데이터 몇개를 추출해본다.
from scipy.cluster.hierarchy import dendrogram, ward
linkage = ward(kdata)
dendrogram(linkage)
'Python > Scikit-learn' 카테고리의 다른 글
Sklearn의 기초 - 자연어 처리(CountVectorizer, TfidfVectorizer) (0) | 2023.11.29 |
---|---|
Scikit-learn의 기초 - 회귀(선형, 라쏘, 릿지, 랜덤포레스트, XGBoost) (0) | 2023.11.25 |
Scikit-learn의 기초 - 분류(의사결정나무, 랜덤포레스트, xgboost) (2) | 2023.11.23 |
Scikit-learn의 기초 - 지도학습 데이터 split(학습, 검증용), 교차 검증 (0) | 2023.11.22 |
Scikit-learn의 기초 - 데이터 전처리(레이블, 스케일링, 차원축소) (4) | 2023.11.22 |