这是 林骥 公众号的第 64 篇原创文章

引言

本文是我写的人工智能系列的第 9 篇文章,文末有前面 8 篇文章的链接。

1. 聚类算法简介

聚类算法,就是把一些没有标签的数据,让「相似」的数据「聚」在一起,划分为不同的「类」,从而揭示数据内在的特征和规律。

聚类算法在很多领域都发挥着重要的作用。比如说,在目标客户定位中,根据客户的基本数据,将客户进行分群,定义并分析不同客群的消费行为模式。

聚类算法主要包括:以 K 均值为代表的划分式聚类算法、层次聚类算法、基于密度的聚类算法、基于网格的聚类算法、基于模型的聚类算法等。

本文以 sklearn 中自带的鸢尾花数据集为例,假设我们事先并不知道鸢尾花的种类,应用 K 均值聚类算法,将鸢尾花分成不同的类别。

2. 加载数据

为了方便进行数据可视化,我们只选取数据集中的 2 个特征:第 1 个特征(花萼长度)和第 3 个特征(花瓣长度),并绘制出相应的散点图,以便观察数据的分布情况。

import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasets

# 加载鸢尾花数据集iris = datasets.load_iris()

# 为了方便可视化,只选取 2 个特征X = iris.data[:, [0, 2]]

# 绘制散点图plt.figure(figsize=(8, 6))plt.scatter(X[:, 0], X[:, 1])plt.show()

在上面的散点图中,横轴代表花萼长度,纵轴代表花瓣长度。

根据观察和经验的判断,我们认为把这组数据分成 3 类是比较恰当的。所以,在下面的聚类算法中,我们设置聚类的数量 n_clusters 等于 3。

3. 调用算法

在 sklearn 中,先从 cluster 中导入 K 均值聚类算法 KMeans,然后用 fit 方法进行训练,就可以输出聚类的标签和中心点。

from sklearn.cluster import KMeans

# 设置聚类的数量n_clusters = 3

# 调用 K-Means 聚类算法km = KMeans(n_clusters)km.fit(X)

# 聚类的标签lbs = km.labels_

# 聚类的中心点cts = km.cluster_centers_

从上面的调用过程可以看到,聚类算法不要使用数据 y,只要使用数据 X,就可以得到聚类的结果,这种算法我们称之为「无监督学习算法」。

无监督学习,与我们认知事物的过程类似。当我们面临大量未知的事物时,可以通过寻找其中的规律,挖掘数据内部的分布特性,反映出数据之间的异同,从而建立一套划分的方法,让我们更加深入地了解事物的内在特征,从而提高了我们认知事物的能力。

比如说,当你进入一个陌生的群体时,没有人帮你介绍,你根据外貌、性格、行为等方面,将不同的人划分为不同的类别,并根据经验来定义类别的标签,例如:高富帅、白富美、谨慎型、外向型、体贴型等等。这个过程就属于无监督学习,因为事先无人教你。

而对于监督学习,就好像有一位老师在旁边教你,这位老师对群体里面的每一个人都很熟悉,他会向你介绍每一个人,帮你先做好了分类,并且贴好了标签。但是,当老师提供的信息有误时,就会导致你的认知出现偏误。如果来了一个「异类」,不属于老师所介绍的任一类型,那么就会导致你无法做出正确的判断。

4. 数据可视化

为了更加直观地看到聚类的效果,我们绘制出相应的决策边界,并用不同的颜色来代表不同的类别,红色的五角星符号来代表聚类的中心点。

from matplotlib.colors import ListedColormap

# 定义绘制决策边界的函数def plot_decision_boundary(model, axis):

    x0, x1 = np.meshgrid(        np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1),        np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1)    )    X_new = np.c_[x0.ravel(), x1.ravel()]

    y_predict = model.predict(X_new)    zz = y_predict.reshape(x0.shape)

    custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])

    plt.contourf(x0, x1, zz, cmap=custom_cmap)

# 设置图形大小plt.figure(figsize=(8, 6))

# 绘制决策边界plot_decision_boundary(km, axis=[3, 8, 0, 8])

# 绘制散点图for c in range(n_clusters):    plt.scatter(X[lbs == c, 0], X[lbs == c, 1])

# 画出每个聚类的中心点plt.scatter(cts[:, 0], cts[:, 1], marker='*', c='r', alpha=0.9, s=200)

plt.show()

5. K 均值聚类算法的优缺点

任何算法都有优点和缺点,K 均值聚类算法当然也不例外。【优点】(1)原理比较简单,实现也比较容易。(2)当数据比较集中时,聚类算法的效果较好。(3)算法的参数比较少。【缺点】(1)K 值的估计比较困难。(2)对初始点、噪音和异常点比较敏感。(3)有时只能得到局部的最优解。

小结

本文介绍了 K 均值聚类算法的应用,以鸢尾花数据集为例,演示了 K 均值聚类算法的实现过程,绘制了直观易懂的数据可视化图形,包括决策边界和中心点,并分析了 K 均值聚类算法的优缺点。

一个数据集到底分成多少类比较合适,是聚类算法的关键,也是较为困难的一个问题。通常需要结合一定的经验信息、背景知识和评价标准等,对聚类结果进行分析和解释,找到最适合的聚类数 K。

所以,需要对业务有深入地理解,这一点是非常重要的。

以上,希望能够对你有所启发。

作者:林骥,公众号 ID:linjiwx,从 2008 年开始从事数据分析工作,网名数据化分析,用数据化解分析难题,让数据更有价值,让分析更有效。敬请关注。

为了沉淀有价值的知识,结交有智慧的朋友,我创建了一个免费的「知识星球」,主要定位:

1. 分享自己十多年来的思考感悟。内容会涉及:数据分析、人工智能,以及其他我认为有价值的知识。2. 分享一些我认为有价值的文章或资源。3. 和大家一起营造很好的互助氛围,你可以在星球里面提问,大家互帮互助,给你带来更大的价值。希望这个知识星球,能给你带来真正有价值的帮助,让我们之间的关系更进一步。

推荐阅读

  • 决策树算法应用及结果解读

  • 逻辑回归算法

  • 梯度下降法有什么用?

  • 模型越复杂越好吗?

  • 这 2 种方法,让我受益匪浅

  • 如何评价算法的好坏?

  • 如何用人工智能预测双 11 的交易额?

  • 如何用人工智能算出美不美?

 请点一点?在看

模糊c均值聚类_聚类算法及其数据可视化相关推荐

  1. python聚类算法中x是多维、y是一维怎么画图_基于Python的数据可视化:从一维到多维...

    目录 一.iris数据集介绍 二.一维数据可视化 三.二维数据可视化 四.多维数据可视化 五.参考资料 一.iris数据集介绍 iris数据集有150个观测值和5个变量,分别是sepal length ...

  2. python函一维聚类_聚类实战:一维数组数据聚类

    大部分聚类方法针对的是多维数据,现实场景中还有可能存在以为数据的情况,针对以为数组的聚类和多维的数据有很大的不同,今天就来实战演练下: 需求内容:分析订单的价格分布 常见方案:按照100为梯度,分析不 ...

  3. 数据可视化 信息可视化_更好的数据可视化的8个技巧

    数据可视化 信息可视化 Ggplot is R's premier data visualization package. Its popularity can likely be attribute ...

  4. react 数据可视化_使用d3创建数据可视化并在2020年做出React

    react 数据可视化 Data visualisation and application technologies have evolved greatly over the past decad ...

  5. seaborn 教程_使用Seaborn进行数据可视化教程

    seaborn 教程 "Seaborn makes the exploratory data analysis phase of your data science project beau ...

  6. 数据库可视化库_漂亮的javascript数据可视化库

    数据库可视化库 If you're building a web app using JavaScript, it is inevitable that at some point you'll ne ...

  7. python 聚类_聚类算法中的四种距离及其python实现

    欧氏距离 欧式距离也就是欧几里得距离,是最常见也是最简单的一种距离,再n维空间下的公式为: 在python中,可以运用scipy.spatial.distance中的pdist方法来实现,但需要调整其 ...

  8. 网页开发 与数据联动的图_零基础学习数据可视化pyecharts人物关系图开发

    Pyecharts人物关系图开发 1. Pyecharts版本说明 Pyecharts的版本最新版本为1.7.0版本,此版本跟0.5版本的使用方法不一样了.很多参数方法配置不一样了.Import的内容 ...

  9. processing文本可视化_推荐7个数据可视化工具,让你的信息快速生成可视化

    现在我们对可视化信息的需求越来越高,可视化信息比传统的文本信息更吸引眼球,方便阅读,加深记忆,因此也可以更快地被人们传播出去.近年来涌现出了许多数据可视化工具.有哪些值得使用呢?下面与大家分享九大数据 ...

  10. python 3d大数据可视化_基于Python的数据可视化库pyecharts介绍

    什么是pyecharts? pyecharts 是一个用于生成 Echarts 图表的类库. echarts 是百度开源的一个数据可视化 JS 库,主要用于数据可视化.pyecharts 是一个用于生 ...

最新文章

  1. setsockopt()函数使用详解
  2. Android測试APP工具(一)
  3. java多进程、多线程讲解
  4. vim莫名假死的解决办法
  5. ssr机场_史丹索普SSR草莓绑苗工作两周
  6. 化学人学python有前途吗-Java之父点赞的开源Java深度学习框架,你不学下吗?
  7. 什么是GPS,GPS技术主要有哪些特点?
  8. 微信接入验证 php,php版微信公共平台开发者认证实例
  9. 手机文件上传服务器,如何上传文件到服务器 上传文件到服务器方法
  10. 回帖送大奖 『和AI在一起』
  11. 20条非常实用的Python代码实例
  12. 对main 未定义的引用_错误:ID返回1个退出状态(对“ main”的未定义引用)
  13. linux ar -x64,Linux ar 命令 command not found ar 命令详解 ar 命令未找到 ar 命令安装 - CommandNotFound ⚡️ 坑否...
  14. Deskpool云办公系列化配置
  15. AngularJS 精妙绝伦的控制器
  16. Word连续引用[1, 2] [3-5]
  17. beego框架 golang web项目-个人博客系统
  18. EMC电磁兼容性问题总结
  19. 探索式测试:通宵测试法
  20. 焱融科技为国家重点实验室打造海量高性能存储

热门文章

  1. 【优化算法】杂草优化算法(IWO)【含Matlab源码 1076期】
  2. 【语音隐写】基于matlab GUI DWT音频数字水印(带语音播报)【含Matlab源码 711期】
  3. 【优化选址】基于matlab禁忌搜索算法求解基站选址优化问题【含Matlab源码 440期】
  4. BP算法和RNN_RNN/LSTM BPTT详细推导以及梯度消失问题分析
  5. 在Covid-19期间测量社交距离
  6. Scrapy实战,利用Scrapy简单爬取新闻并将内容储存
  7. python双重for循环 列表推导式_Python轻量级循环-列表推导式
  8. java 的strip_javastript
  9. 顶级数据团队建设全景报告_从蚂蚁金服的BI和大数据团队建设,看透BI发展,再不懂就落伍了...
  10. 计算机中答案没有小数怎么办,嵌入式编程中计算机是如何存储小数的