Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- SQL
- 빅분기
- level 1
- Oracel
- 실기
- python3
- R
- 실습
- Numpy
- 코딩테스트
- 파이썬
- 머신러닝
- 오라클
- 튜닝
- sklearn
- 카카오
- 프로그래머스
- 데이터 분석
- level 2
- 빅데이터 분석 기사
- Kaggle
- matplotlib
- seaborn
- Python
- oracle
- 알고리즘
- pandas
Archives
- Today
- Total
라일락 꽃이 피는 날
Kmeans 군집 분류 본문
728x90
1. 2차원 군집 분석 (Kmeans)
- n_clusters: 군집의 갯수 (default=8)
- init: 초기화 방법. 'random'이면 무작위, 'k-means++'이면 K-평균++ 방법 (default=k-means++)
- n_init: centroid seed 시도 횟수. 무작위 중심위치 목록 중 가장 좋은 값을 선택 (default=10)
- max_iter: 최대 반복 횟수 (default=300)
- random_state: 시드값 (default=None)
1) 군집 분석
from sklearn.cluster import KMeans
x = preprocessed_df[['Attack', 'Defense']]
k_list = []
cost_list = []
for k in range(1, 6):
kmeans = KMeans(n_clusters=k).fit(x)
inertia = kmeans.inertia_
print("k:", k, "| cost:", inertia)
k_list.append(k)
cost_list.append(inertia)
plt.plot(k_list, cost_list)
관성(Inertia)에 기반하여 n 개수를 선택한다.
관성(Inertia) : 각 중심점(centroid)에서 군집 내 데이터간의 거리를 합산한 것으로 군집의 응집도를 나타낸다. 이 값이 작을수록 응집도가 높은 군집화를 의미한다.
kmeans = KMeans(n_clusters=4).fit(x)
cluster_num = kmeans.predict(x)
cluster = pd.Series(cluster_num)
preprocessed_df['cluster_num'] = cluster.values
preprocessed_df.head()
2) 군집 시각화
plt.scatter(preprocessed_df[preprocessed_df['cluster_num']==0]['Attack'],
preprocessed_df[preprocessed_df['cluster_num']==0]['Defense'],
s=50, c='red', label='Pokemon Group 1')
plt.scatter(preprocessed_df[preprocessed_df['cluster_num']==1]['Attack'],
preprocessed_df[preprocessed_df['cluster_num']==1]['Defense'],
s=50, c='green', label='Pokemon Group 2')
plt.scatter(preprocessed_df[preprocessed_df['cluster_num']==2]['Attack'],
preprocessed_df[preprocessed_df['cluster_num']==2]['Defense'],
s=50, c='blue', label='Pokemon Group 3')
plt.scatter(preprocessed_df[preprocessed_df['cluster_num']==3]['Attack'],
preprocessed_df[preprocessed_df['cluster_num']==3]['Defense'],
s=50, c='yellow', label='Pokemon Group 4')
plt.title("pokemon cluster")
plt.xlabel("Attack")
plt.ylabel("Defense")
plt.legend()
plt.show()
2. 다차원 군집 분석 (Kmeans)
1) 군집 분석
x = preprocessed_df[['HP', 'Attack', 'Defense', 'Sp. Atk', 'Sp. Def', 'Speed']]
k_list = []
cost_list = []
for k in range(1, 15):
kmeans = KMeans(n_clusters=k).fit(x)
inertia = kmeans.inertia_
print("k:", k, "| cost:", inertia)
k_list.append(k)
cost_list.append(inertia)
plt.plot(k_list, cost_list)
kmeans = KMeans(n_clusters=5).fit(x)
cluster_num = kmeans.predict(x)
cluster = pd.Series(cluster_num)
preprocessed_df['cluster_num'] = cluster.values
preprocessed_df.head()
2) 군집별 특성 시각화
fig = plt.figure(figsize=(12, 12))
ax = fig.gca()
sns.boxplot(x="cluster_num", y="HP", data=preprocessed_df, ax=ax)
plt.show()
728x90
'데이터 분석 > Python' 카테고리의 다른 글
Bootstrapping (부트스트래핑) (0) | 2021.06.03 |
---|---|
텍스트 마이닝 (0) | 2021.05.27 |
회귀분석 (0) | 2021.05.27 |
[Sklearn] 군집화 (0) | 2021.05.21 |
[Sklearn] 차원 축소 (0) | 2021.05.21 |