zoukankan      html  css  js  c++  java
  • 聚类分析 | 概述、 k均值聚类算法 KMeans 处理数据及可视化

    一 概述

    • 聚类分析目的
      • 将大量数据集中具有“相似”特征的数据点或样本划分为一个类别
    • 常见应用场景
      • 在没有做先验经验的背景下做的探索性分析
      • 样本量较大情况下的数据预处理工作
      • 将数值类的特征分成几个类别
    • 聚类分析能解决的问题包括
      • 数据集可以分为几类
      • 每个类别有多少样本量
      • 不同类别中各个变量的强弱关系如何
      • 不同类别的典型特征是什么
    • k均值聚类算法 KMeans
      • 注意事项
        • 需要处理异常值
        • 如果建模的特征中,量纲差距比较大,需要做归一化/标准化
      • 创建KMeans对象 建模
        • n_cluster 聚类个数
        • init='k-means++' 在选点的时候,找距离初始点比较远的点
        • random_state  随机种子数
        • kmeans.inertia_ 簇内误差平方和
        • 轮廓系数 metrics.silhouette_score()
        • kmeans_model.cluster_centers_ 聚类中心点
        • kmeans_model.labels_ 聚类之后的标签

    二 案例

    1 数据准备

    import pandas as pd
    df = pd.read_csv('data.csv')
    
    # 使用最后两列作为分群依据
    x = df.iloc[:,3:].values

     2 创建 KMeans 模型,进行聚类【核心代码】

    # 导包
    from sklearn.cluster import KMeans
    
    # 模型创建
    kmeans_model = KMeans(n_clusters=5, init='k-means++', random_state= 11)
    
    # 进行聚类处理
    y_kmeans = kmeans_model.fit_predict(x)

     此时已经将数据 分成了5类,将标签加入数据中

     3 聚类结果可视化

    # 导入可视化工具包
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    # 颜色和标签列表
    colors_list = ['red', 'blue', 'green','yellow','pink']
    labels_list = ['Traditional','Normal','TA','Standard','Youth']
    
    # 需要将DataFrame转成ndarray,才能进行 x[y_kmeans==i,0]
    x = x.values
    
    for i in range(5):
        plt.scatter(x[y_kmeans==i,0], x[y_kmeans== i,1], s=100,c=colors_list[i],label=labels_list[i])
    
    # 聚类中心点
    plt.scatter(kmeans_model.cluster_centers_[:,0],kmeans_model.cluster_centers_[:,1], s=300,c='black',label='Centroids')
    
    plt.legend()
    plt.xlabel('Annual Income (k$)')
    plt.ylabel('Spending Score (1-100)')
    plt.show()

    4 评估聚类个数

    # 用于盛放簇内误差平方和的列表
    distortion = []
    
    for i in range(1,11):
        kmeans = KMeans(n_clusters=i,init='k-means++', random_state=11)
        kmeans.fit(x)
        distortion.append(kmeans.inertia_)
        
    plt.plot(range(1,11), distortion)
    
    plt.title('The Elbow Method')
    plt.xlabel('Number of cluster')
    plt.ylabel('Distortion')
    plt.show()

    完成辣!

    附几个变量说明,便于复习

    ========================

     

    ========================

     

     本文仅用于学习

  • 相关阅读:
    window 安装使用npm
    php 身份证验证类
    php nl2br 将 变成<br />
    win10 system guard运行时监视器,关闭服务
    PHP7 引入的“??” 和“?:”的区别
    git 本地删除修改文件后从远程拉取
    深入解读阿里云Redis开发规范
    阿里云Redis开发规范
    Centos7 安装docker
    api-doc-php
  • 原文地址:https://www.cnblogs.com/ykit/p/12383257.html
Copyright © 2011-2022 走看看