• python数据分析——聚类


    参考资料:活用pandas库

    1、k均值聚类

            使用k均值算法,首先要选定数据中的群集数(k)。它会随机选取数据中的k个点,计算每个数据点到最初选取的k个点之间的距离。最接近某个群集的点会被划分到同一个集群组。然后把每个群集的中心指定为新的集群中心。重复该过程,计算每个点到每个群集中心的距离,并将其分配给一个群集,然后选择一些新的中心。该算法会重复执行直至收敛。

    1. # 导入pandas库
    2. import pandas as pd
    3. # 读取数据集
    4. wine=pd.read_csv(r"...\data\wine.csv")
    5. # 数据展示,注意:数据值全是数值
    6. print(wine.head())
    7. # 删除Cultivar列,因为它与数据中的实际群集关联太过紧密
    8. wine=wine.drop("Cultivar",axis=1)
    9. # 导入KMeans模块
    10. from sklearn.cluster import KMeans
    11. # 创建3个群集
    12. # 设置随机种子
    13. kmeans=KMeans(n_clusters=3,random_state=42).fit(wine.values)
    14. # 输出kmeans对象
    15. print(kmeans)
    16. import numpy as np
    17. print(np.unique(kmeans.labels_,return_counts=True))

            由于人眼只能看到三维空间中的事物,所以需要减少数据的维数(至少要降至3维)。而且由于在纸张上绘制这些点,应尽量把维数降至2。

            主成分分析(PCA)是一种投影技术,用于减少数据集的维数。其工作原理是在数据中找到较低的维数,将方差最大化。

    1. # 从sklearn库中导入PCA模块
    2. from sklearn.decomposition import PCA
    3. # 把数据投射到两个成分上
    4. pca=PCA(n_components=2).fit(wine)
    5. # 转换数据到新空间
    6. pca_trans=pca.transform(wine)
    7. # 为投影命名
    8. pca_trans_df=pd.DataFrame(pca_trans,columns=['pca1','pca2'])
    9. # 连接数据
    10. kmeans_3=pd.DataFrame(kmeans.labels_,columns=['cluster'])
    11. kmeans_3=pd.concat([kmeans_3,pca_trans_df],axis=1)
    12. print(kmeans_3.head())
    13. # 绘制散点图
    14. import seaborn as sns
    15. import matplotlib.pyplot as plt
    16. fig=sns.lmplot(x='pca1',y='pca2',data=kmeans_3,
    17. hue='cluster',fit_reg=False)

    2、层次聚类

            层次聚类旨在构建群体层次结构。具体实现方法有两种:一种是自下而上的凝聚法,另一种是从上到下的分裂法。

    (1)最长距离法

    1. # 导入hierarchy模块
    2. from scipy.cluster import hierarchy
    3. wine_complete=hierarchy.complete(wine)
    4. fig=plt.figure()
    5. dn=hierarchy.dendrogram(wine_complete)

    (2)最短距离法

    1. wine_single=hierarchy.single(wine)
    2. fig=plt.figure()
    3. dn=hierarchy.dendrogram(wine_single)

    (3)平均距离法

    1. wine_average=hierarchy.average(wine)
    2. dn=hierarchy.dendrogram(wine_average)

    (4)重心法

    1. wine_centroid=hierarchy.centroid(wine)
    2. dn=hierarchy.dendrogram(wine_centroid)

    (5)手动设置阈值

            可以为color_threshold传入值来根据特定阈值给组着色。scipy默认使用预设的MATLAB值。

    1. wine_complete=hierarchy.complete(wine)
    2. fig=plt.figure()
    3. dn=hierarchy.dendrogram(
    4. wine_complete,
    5. # 默认MATLAB阈值
    6. color_threshold=0.7*max(wine_complete[:,2]),
    7. above_threshold_color='y'
    8. )

  • 相关阅读:
    【Linux刷题练习】
    Centos系统上安装包(软件)时常用的命令wget、rpm、yum分别是什么意思和作用?
    蓝桥杯-回文日期[Java]
    java类加载过程
    开源大模型RAG企业本地知识库问答机器人-ChatWiki
    spring5.0源码解析 Aop 04 配置通知器
    Docker 入门,学明白这一篇就够啦
    Go开发工具GoLand V2022.2 来了——Go 工作区重大升级
    Python中logging日志模块详解
    ThingsBoard开源物联网平台介绍
  • 原文地址:https://blog.csdn.net/maizeman126/article/details/139378193