聚类分析 | 概述、 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 = KMeansn_clusters=5, init='k-means++', random_state= 11)

# 进行聚类处理
y_kmeans = kmeans_model.fit_predictx)

 此时已经将数据 分成了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 range5):
    plt.scatterx[y_kmeans==i,0], x[y_kmeans== i,1], s=100,c=colors_list[i],label=labels_list[i])

# 聚类中心点
plt.scatterkmeans_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 range1,11):
    kmeans = KMeansn_clusters=i,init='k-means++', random_state=11)
    kmeans.fitx)
    distortion.appendkmeans.inertia_)
    
plt.plotrange1,11), distortion)

plt.title'The Elbow Method')
plt.xlabel'Number of cluster')
plt.ylabel'Distortion')
plt.show)

完成辣!

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

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

 

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

 

 本文仅用于学习

Published by

风君子

独自遨游何稽首 揭天掀地慰生平