1.聚类分析
2.聚类的基本使用
2.1 思路
1.生成有2个特征,分布有3个中心的假数据
2.用散点图展示
3.训练预测并展示
2.2 实现
2.2.1导包
import numpy as np
import pandas as pd
from pandas import Series, DataFrameimport matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
2.2.2 生成数据并展示
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=150, n_features=2, centers=3, cluster_std=1.5, random_state=2) # 150个数据,2个特征,3个中心,方差为1.5, 随机种子为2.
展示
sns.set()
plt.scatter(X[:,0], X[:,1], c=y, cmap=plt.cm.Accent_r)
2.2.3 建模 KMeans聚类
from sklearn.cluster import KMeans
n_clusters=8 聚类的个数, 设置为一个整型数字
如何去确定你的聚类个数: 根据业务需求
km = KMeans(n_clusters=3) # 聚为3类,一般3维以上很难展示出来。
训练并预测
y_ = km.fit_predict(X)
展示结果
plt.figure(figsize=(12,4))
ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(1,2,2)
ax1.scatter(X[:,0], X[:,1], c=y, cmap=plt.cm.Accent)
ax2.scatter(X[:,0], X[:,1], c=y_, cmap=plt.cm.Accent)
ax2.scatter(cluster_centers[:,0], cluster_centers[:,1], color='red', marker='*', s=[200,800, 2000])
ax1.set_title('True')
ax2.set_title('Kmeans')
plt.show()
获取聚类中心
cluster_centers = km.cluster_centers_
3.球队综合实力聚类分析
3.1 导入数据
data = pd.read_csv('./data/AsiaZoo.txt', header=None)
data.columns = ["国家","2006世界杯","2010世界杯","2007亚洲杯"]
3.2 3D展示
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams # 找到设置的项的名字
sns.set_style(style='white')# darkgrid, whitegrid, dark, white, ticks 设置图像背景格式
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文展示
plt.rcParams['axes.unicode_minus'] = False #设置负数显示
绘图展示
plt.figure(figsize=(10,6))
ax = plt.subplot(projection = '3d') # 设置子画布
ax.scatter3D(data['2006世界杯'], data['2010世界杯'], data['2007亚洲杯'], s=200, c= y_, alpha=1) # 设置颜色按y_分类显示,alpha设置透明度,s设置点的大小。
ax.set_xlabel('2006世界杯') # 子画布的名称设置要用set_xlabel
ax.set_ylabel('2010世界杯')
ax.set_zlabel('2007亚洲杯')
plt.show()
3.3 准备X,建模
X = data.iloc[:,1:]
X
建模
km = KMeans(n_clusters=3) # 设置3个聚类中心
y_ = km.fit_predict(X) #训练并预测数据
3.4查看哪些球队被划分成一组
两层for循环。
data['类别'] = y_
for _, indexes in data.groupby('类别').groups.items():
countrys = data.loc[indexes, '国家']
for country in countrys:
print(country, end=' ')
print()
data.groups可以得到一组字典,进行遍历,得到索引,用索引对data进行访问。