文章目录

  • 1 导包
  • 2 构建数据
  • 3 模型对比
    • Kmeans
    • MiniBatchKmeans
    • DBSCAN
    • AgglomerativeClustering
    • MeanShift
  • 4 总结

1 导包

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import warnings
from collections import Counter
from sklearn.datasets import make_blobs, make_circles, make_moons, make_classification
from sklearn.cluster import KMeans, MiniBatchKMeans, DBSCAN, AgglomerativeClustering, MeanShift
from sklearn.decomposition import PCA
from sklearn.metrics import adjusted_rand_score, silhouette_score

2 构建数据

step1:使用sklearn自带的函数make_blobs()、make_circlues()、make_moons()、make_classification()构建数据集

step2:绘制二维散点图

step3:定义绘图函数便于下面使用,为了避免估计的标签类别数少于实际类别数导致计算轮廓系数报错,故加上try-except语句

# 生成数据集
X1, y1 = make_blobs(n_samples=1000, n_features=2, centers=4, shuffle=True, random_state=3)
X2, y2 = make_circles(n_samples=1000, noise=0.05, factor=0.6, shuffle=True, random_state=0)
X3, y3 = make_moons(n_samples=1000, noise=0.05, shuffle=True, random_state=0)
X4, y4 = make_classification(n_samples=1000, n_features=2, n_classes=3, n_redundant=0, n_repeated=0, n_clusters_per_class=1, shuffle=True, random_state=5)# 绘制图
# 1
dataset1 = pd.DataFrame({"x1": X1[:, 0], "x2": X1[:, 1], "label": y1})
plt.figure(figsize=(6, 6))
grouped = dataset1.groupby('label')
colors = ['r', 'g', 'b', 'm']
for label, df in grouped:plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=colors[label], s=1, label=label)
plt.legend()
plt.show()# 2
plt.figure(figsize=(6, 6))
plt.scatter(X2[:, 0], X2[:, 1], c=y2, s=1)
plt.show()# 3
plt.figure(figsize=(6, 6))
plt.scatter(X3[:, 0], X3[:, 1], c=y3, s=1)
plt.show()# 4
plt.rcParams['figure.figsize'] = (12, 6)
plt.subplots(1, 2)
plt.subplot(1, 2, 1)
plt.scatter(X4[:, 0], X4[:, 1], c=y4, s=1)
plt.subplot(1, 2, 2)
sns.kdeplot(x=X4[:, 0])
plt.show()# 打印预测的散点图
def plot_predict_scatters(datas):plt.rcParams['figure.figsize'] = (16, 16)plt.subplots(2, 2)for i, data in enumerate(datas):x, y, y_predict = dataplt.subplot(2, 2, i + 1)plt.scatter(x[:, 0], x[:, 1], c=y_predict, s=1)rand_score = adjusted_rand_score(y, y_predict)try:sil_score = silhouette_score(x, y_predict)except Exception as e:warnings.warn(message=str(e))sil_score = Noneplt.title('Figure %d: rand_score=%.2f' % (i + 1, rand_score))if sil_score != None:plt.title('Figure %d: rand_score=%.2f sil_score=%.2f' % (i + 1, rand_score, sil_score))plt.show()

展示:



3 模型对比

Kmeans

# KMeans聚类
y_predict11 = KMeans(n_clusters=4).fit_predict(X1)
y_predict12 = KMeans(n_clusters=2).fit_predict(X2)
y_predict13 = KMeans(n_clusters=2).fit_predict(X3)
y_predict14 = KMeans(n_clusters=3).fit_predict(X4)datas = [(X1, y1, y_predict11),(X2, y2, y_predict12),(X3, y3, y_predict13),(X4, y4, y_predict14)]
plot_predict_scatters(datas)

MiniBatchKmeans

# MnniBatch聚类
y_predict21 = MiniBatchKMeans(n_clusters=4).fit_predict(X1)
y_predict22 = MiniBatchKMeans(n_clusters=2).fit_predict(X2)
y_predict23 = MiniBatchKMeans(n_clusters=2).fit_predict(X3)
y_predict24 = MiniBatchKMeans(n_clusters=3).fit_predict(X4)
datas = [(X1, y1, y_predict21),(X2, y2, y_predict22),(X3, y3, y_predict23),(X4, y4, y_predict24)]
plot_predict_scatters(datas)

DBSCAN

# DBSCAN聚类
y_predict31 = DBSCAN(eps=1.0, min_samples=10).fit_predict(X1)
y_predict32 = DBSCAN(eps=0.2, min_samples=50).fit_predict(X2)
y_predict33 = DBSCAN(eps=0.2, min_samples=20).fit_predict(X3)
y_predict34 = DBSCAN(eps=0.1, min_samples=10).fit_predict(X4)
datas = [(X1, y1, y_predict31),(X2, y2, y_predict32),(X3, y3, y_predict33),(X4, y4, y_predict34)]
plot_predict_scatters(datas)


DBSCAN对第2类、第3类、第4类聚类效果均好于KMeans,不过需要适当的调参。

AgglomerativeClustering

# 层次聚类
y_predict41 = AgglomerativeClustering(n_clusters=4).fit_predict(X1)
y_predict42 = AgglomerativeClustering(n_clusters=2).fit_predict(X2)
y_predict43 = AgglomerativeClustering(n_clusters=2).fit_predict(X3)
y_predict44 = AgglomerativeClustering(n_clusters=3).fit_predict(X4)
datas = [(X1, y1, y_predict41),(X2, y2, y_predict42),(X3, y3, y_predict43),(X4, y4, y_predict44)]
plot_predict_scatters(datas)

MeanShift

# MeanShift
y_predict51 = MeanShift(bandwidth=1).fit_predict(X1)
y_predict52 = MeanShift().fit_predict(X2)
y_predict53 = MeanShift().fit_predict(X3)
y_predict54 = MeanShift().fit_predict(X4)
datas = [(X1, y1, y_predict51),(X2, y2, y_predict52),(X3, y3, y_predict53),(X4, y4, y_predict54)]
plot_predict_scatters(datas)


可以观察到MeanShift对第3类数据聚类结果只聚为了1类,因此兰德指数为0,轮廓系数无法计算。

4 总结

聚类的评价指标
兰德指数:计算真实标签与聚类标签两种分布相似性之间的相似性,取值范围为 [0,1]
轮廓系数:是聚类效果好坏的一种评价方式。最早由 Peter J. Rousseeuw 在 1986 提出。 它结合内聚度和分离度两种因素。可以用来在相同原始数据的基础上用来评价不同算法、或者算法不同运行方式对聚类结果所产生的影响。取值范围:[-1,1],轮廓系数越大,聚类效果越好

数据挖掘实战(4)——聚类(Kmeans、MiniBatchKmeans、DBSCAN、AgglomerativeClustering、MeanShift)相关推荐

  1. 【Python数据挖掘实战案例】K-Means广告效果聚类分析

    作者:杨啊小强 来源:Python数据科学修炼之路 本案例的业务场景: 假如你们公司投放广告的渠道很多,每个渠道的客户性质也可能不同,比如在优酷视频投广告和今日头条投放广告,效果可能会有差异.现在需要 ...

  2. 聚类kmeans和DBSCAN算法的简单实现

    在无监督学习中,我们首先就会接触到kmeans算法,因为既简单,又实用,而且速度也很快.所以今天在这里写一个非常简单的kmeans算法,以帮助我们更快的领悟算法的思想,以及它的变种.一下是其实现步骤 ...

  3. 【数据挖掘实战】——航空公司客户价值分析(K-Means聚类案例)

    目录 一.背景和挖掘目标 1.RFM模型缺点分析 2.原始数据情况 3.挖掘目标 二.分析方法与过程 1.初步分析:提出适用航空公司的LRFMC模型 2.总体流程 第一步:数据抽取 第二步:探索性分析 ...

  4. python聚类分析如何确定分类个数_Python数据挖掘—聚类—KMeans划分法

    概念 聚类分析:是按照个体的特征将它们分类,让同一个类别内的个体之间具有较高的相似度,不同类别之间具有较大差异性 无分类目标变量(Y)--无监督学习 K-Means划分法.DBSCAN密度法.层次聚类 ...

  5. python 三种聚类算法(K-means,AGNES,DBScan)

    python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 更新时间:2019年06月27日 14:44:44   作者:weixin_42134141 这篇文章主要介绍了pyth ...

  6. kmeans鸢尾花分类python代码_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)

    一.分散性聚类(kmeans) 算法流程: 1.选择聚类的个数k. 2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心. 3.对每个点确定其聚类中心点. 4.再计算其聚类新中心. 5.重复以 ...

  7. R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据

    R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据

  8. R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据

    R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据

  9. 【Python数据挖掘课程】三.Kmeans聚类代码实现、作业及优化

    这篇文章直接给出上次关于Kmeans聚类的篮球远动员数据分析案例,同时介绍这次作业同学们完成的图例,最后介绍Matplotlib包绘图的优化知识.         前文推荐:        [Pyth ...

最新文章

  1. c语言如何持续输入字符直到指定字符结束_《小白学C》第三章 常用输入输出函数...
  2. 图像篡改检测pytorch版本
  3. 帝国cms调用缩略图和具体文章的方法
  4. PL/SQL Developer 导出表结构和表数据
  5. pyqt5 tableview 设置行颜色_Tools Ⅰ:如何用 PyQt5 和 Qt Designer 在 Pycharm 中愉快地开发软件...
  6. 电脑故障,路由器及网络
  7. 【机器学习】监督学习--(回归)多元线性回归
  8. 用newlisp管理windows下的nginx
  9. [bzoj1791][ioi2008]Island 岛屿(基环树、树的直径)
  10. RHEL AS 5 安装MYSQL
  11. 【精品软件】AE这套神级扩展终于支持2021了,AE脚本-Motion Factory 完整五套解锁版
  12. 闽什么什么院第二课堂网课破解-----微信内置浏览器
  13. App测试-怎么测试启动时间?
  14. Django之stark组件
  15. java把小写变大写_用java实现人民币小写变大写的方法
  16. 计算机可以唱什么音乐,5款经典的可以学习唱歌的app介绍
  17. Tanimoto系数
  18. 12个体育运动LUTs调色预设包
  19. 2020年回顾与2021年展望
  20. 医保结算单的“自费”、“自理”、“自负”分别是什么意思?

热门文章

  1. C#,入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果
  2. mysql权限和使用注意事项及mysql 数据类型详解和innodb,myisam区别
  3. Python Tkinter模块详解(后续持续补充)
  4. 人体解析任务 和 Look into Person数据集 (附源码分享)
  5. 3D软件开发工具HOOPS全套产品开发介绍 | HOOPS Visualize、HOOPS Publish
  6. 华为matepad鸿蒙系统,预装鸿蒙系统 华为MatePad Pro 2界面曝光
  7. 在PC体验sailfishos(旗鱼)系统
  8. ubuntu20.04上安装和使用frp内网穿透的方法
  9. python爬取陌生人的qq空间_Python爬取QQ空间好友说说并生成词云(超详细)
  10. python os.path模块