聚类分析 | 概述、 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()

 

完成辣!

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

 

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

 

 

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

 

 本文仅用于学习

posted @ 2020-02-29 15:39  机器快点学习  阅读(6245)  评论(2编辑  收藏  举报