样本聚类

这篇博客详细探讨了样本聚类,包括层次聚类、K-Means聚类和高斯混合模型。通过使用“cities_10.csv”数据集,作者展示了聚类过程,如聚类个数选择、效果评估以及预处理步骤。此外,还讨论了密度聚类和不同聚类方法的比较。
摘要由CSDN通过智能技术生成

样本聚类

%matplotlib inline

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['font.size'] = 15 # 设置默认字体大小
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

使用“cities_10.csv”数据集进行层次聚类

  • 原始数据的可视化
cities = pd.read_csv('cities_10.csv', encoding='gbk')
cities
AREA X1 X2 X3 X4 X5 X6 X7 X8 X9
0 辽宁 5458.2 13000 1376.2 2258.4 1315.9 529.0 2258.4 123.7 399.7
1 山东 10550.0 11643 3502.5 3851.0 2288.7 1070.7 3181.9 211.1 610.2
2 河北 6076.6 9047 1406.7 2092.6 1161.6 597.1 1968.3 45.9 302.3
3 天津 2022.6 22068 822.8 960.0 703.7 361.9 941.4 115.7 171.8
4 江苏 10636.3 14397 3536.3 3967.2 2320.0 1141.3 3215.8 384.7 643.7
5 上海 5408.8 40627 2196.2 2755.8 1970.2 779.3 2035.2 320.5 709.0
6 浙江 7670.0 16570 2356.5 3065.0 2296.6 1180.6 2877.5 294.2 566.9
7 福建 4682.0 13510 1047.1 1859.0 964.5 397.9 1663.3 173.7 272.9
8 广东 11769.7 15030 4224.6 4793.6 3022.9 1275.5 5013.6 1843.7 1201.6
9 广西 2455.4 5062 367.0 995.7 542.2 352.7 1025.5 15.1 186.7
from sklearn.preprocessing import scale
from sklearn.decomposition import PCA, FactorAnalysis

scale_cities = scale(cities.iloc[:, 1:])
pca_scale_cities = PCA(n_components=2, whiten=True).fit_transform(scale_cities)
fa_scale_cities  = FactorAnalysis(n_components=2).fit_transform(scale_cities)
from sklearn.cluster import AgglomerativeClustering

ward = AgglomerativeClustering(n_clusters=3, linkage='ward', compute_full_tree=True)
ward.fit(pca_scale_cities)
AgglomerativeClustering(affinity='euclidean', compute_full_tree=True,
            connectivity=None, linkage='ward', memory=None, n_clusters=3,
            pooling_func=<function mean at 0x0000000004DDF2F0>)
cities['total'] = pca_scale_cities[:, 0]
cities['average'] = pca_scale_cities[:, 1]
cities['cluster'] = ward.labels_
fig, ax = plt.subplots(figsize=[5, 3])

for cluster, marker in zip(range(ward.n_clusters), ['x', 'o', 'd']):
    x_axis = cities['total'][cities['cluster'] == cluster]
    y_axis = cities['average'][cities['cluster'] == cluster]
    ax.scatter(x_axis, y_axis, marker=marker, color='b')

for x,y,s in np.vstack([cities['total'], cities['average'], cities['AREA']]).T
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值