SciPy k均值聚类
章节
聚类(K-means clustering)是在一组未标记的数据中,将相似的数据(点)归到同一个类别中的方法。聚类与分类的最大不同在于分类的目标事先已知,而聚类则不知道。
K-means是聚类中最常用的方法之一,它是基于点与点的距离来计算最佳类别归属,即靠得比较近的一组点(数据)被归为一类。
K-means的算法原理如下:
- 随机选取k个点作为中心点
- 遍历所有点,将每个点划分到最近的中心点,形成k个聚类
- 根据聚类中点之间的距离,重新计算各个聚类的中心点
- 重复2-3步骤,直到这k个中线点不再变化(收敛了),或达到最大迭代次数
SciPy中,cluster包已经很好地实现了K-Means算法,我们可以直接使用它。
使用SciPy中的k均值聚类功能
导入 K-Means
导入要使用的模块:
from SciPy.cluster.vq import kmeans,vq,whiten
样本数据生成
准备样本数据:
from numpy import vstack,array
from numpy.random import rand
# 具有3个特征值的样本数据生成
data = vstack((rand(100,3) + array([.5,.5,.5]),rand(100,3)))
上面的程序将生成以下样本数据:
[[9.08178137e-01 1.13621041e+00 1.37775140e+00]
[8.03177864e-01 8.61501332e-01 1.36841278e+00]
[1.20454835e+00 5.80649650e-01 1.02232192e+00]
[5.78773849e-01 1.29952832e+00 9.01418916e-01]
[1.00196410e+00 1.15425599e+00 5.68536029e-01]
[1.12860722e+00 7.63647578e-01 6.03910440e-01]
[1.29241389e+00 1.33779906e+00 1.38514877e+00]
[6.98439684e-01 1.10509272e+00 7.13420372e-01]
...
数据白化预处理
数据白化预处理是一种常见的数据预处理方法,作用是去除样本数据的冗余信息。
可以使用以下代码来白化数据。
# 白化数据
data = whiten(data)
分成3个聚类
我们会把样本数据分成3个聚类,使用kmeans()
函数计算3个聚类的中心点。
# 计算 K = 3 时的中心点
centroids, _ = kmeans(data, 3)
打印中心点:
print(centroids)
输出:
[[2.33037825 1.63328035 1.76901626]
[0.69611182 1.48776606 1.25827876]
[2.39743406 2.98803923 2.99201397]]
使用vq
函数将样本数据中的每个样本点分配给一个中心点,形成3个聚类。
# 将样本数据中的每个值分配给一个中心点,形成3个聚类。
# 返回值clx标出了对应索引样本的聚类,dist表示对应索引样本与聚类中心的距离。
clx, dist = vq(data, centroids)
输出聚类
# 打印聚类
print(clx)
输出:
[1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 0 0 1 0
1 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 0
0 0 1 0 0 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 0 1 0 0 1 1 0 2 0 2 0 2 2 2 0 2 0
0 0 2 2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 2 2 0 2 0 2 2 0 2 0 2 2 2 2 2 2 0 2 2
2 2 2 2 2 0 2 0 0 2 2 0 0 0 0 0 0 0 2 0 0 2 0 0 2 2 2 2 2 2 2 0 2 0 0 2 2
2 0 2 2 0 0 2 2 2 2 0 2 0 0 2]
上面数组中,值0,1,2分别表示3个聚类,某个位置上的值表示该对应索引数据属于哪个聚类,例如clx[0]=1,表明data[0]样本属于聚类1。
SciPy k均值聚类的更多相关文章
- 【转】算法杂货铺——k均值聚类(K-means)
k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...
- 5-Spark高级数据分析-第五章 基于K均值聚类的网络流量异常检测
据我们所知,有‘已知的已知’,有些事,我们知道我们知道:我们也知道,有 ‘已知的未知’,也就是说,有些事,我们现在知道我们不知道.但是,同样存在‘不知的不知’——有些事,我们不知道我们不知道. 上一章 ...
- 机器学习实战5:k-means聚类:二分k均值聚类+地理位置聚簇实例
k-均值聚类是非监督学习的一种,输入必须指定聚簇中心个数k.k均值是基于相似度的聚类,为没有标签的一簇实例分为一类. 一 经典的k-均值聚类 思路: 1 随机创建k个质心(k必须指定,二维的很容易确定 ...
- Python实现kMeans(k均值聚类)
Python实现kMeans(k均值聚类) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=> ...
- 机器学习理论与实战(十)K均值聚类和二分K均值聚类
接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...
- 第十篇:K均值聚类(KMeans)
前言 本文讲解如何使用R语言进行 KMeans 均值聚类分析,并以一个关于人口出生率死亡率的实例演示具体分析步骤. 聚类分析总体流程 1. 载入并了解数据集:2. 调用聚类函数进行聚类:3. 查看聚类 ...
- K均值聚类的失效性分析
K均值聚类是一种应用广泛的聚类技术,特别是它不依赖于任何对数据所做的假设,比如说,给定一个数据集合及对应的类数目,就可以运用K均值方法,通过最小化均方误差,来进行聚类分析. 因此,K均值实际上是一个最 ...
- K均值聚类
聚类(cluster)与分类的不同之处在于, 分类算法训练过程中样本所属的分类是已知的属监督学习. 而聚类算法不需要带有分类的训练数据,而是根据样本特征的相似性将其分为几类,又称为无监督分类. K均值 ...
- ML: 聚类算法-K均值聚类
基于划分方法聚类算法R包: K-均值聚类(K-means) stats::kmeans().fpc::kmeansruns() K-中心点聚类(K-Medoids) ...
随机推荐
- 关于PGSQL连接问题
今天把运维管理服务移植在Linux下测试,但又不想在Linux中安装PGSQL的服务器,就想让运维管理服务在虚拟机中连接windows的PG服务,却发现PG服务器一直拒绝连接,检查了网络端口之后都没问 ...
- MySQL - 设置UTF-8编码
1. 在Windows上,安装时请选择UTF-8编码,以便正确地处理中文. 在Mac或Linux上,需要编辑MySQL的配置文件,把数据库默认的编码全部改为UTF-8.MySQL的配置文件默认存放在/ ...
- leetcode刷题-- 2. 排序(待更新)
排序 参考五分钟学算法 复杂度比较 时间复杂度 O(n2) 各种简单的排序:直接插入.直接选择.冒泡 O(nlog2n) 快速排序.堆排序.归并排序 O(n1+\(\lambda\)),希尔排序 线性 ...
- ES5-严格模式
在es5中可以开启一种严格模式的代码形式,开启方式是:将全局或者函数的第一条语句定义为:'use strict';. 如果浏览器不支持,会将其解析为一条普通语句,没有任何的副作用. 开启全局模式后会有 ...
- Servlet 学习(三)
HTTP 请求的构成 1.HTTP 请求行: 请求方式,比如 GET .POST 等 本次请求的URI ,比如 /hello 协议和版本号 2. HTTP 请求报头: (头部/首部/请求头) 请求头和 ...
- Eth合约攻击续
合同代表一个非常简单的游戏:谁给它发送了比当前奖金还大的数量的以太,就成为新的国王.在这样的事件中,被推翻的国王获得了新的奖金,但是如果你提交的话那么合约就会回退,让level重新成为国王,而我们的目 ...
- 解题报告:luogu P5543 [USACO19FEB]The Great Revegetation S
题目链接:P5543 [USACO19FEB]The Great Revegetation S 好坑啊,都身败名裂了. 思路一: 考虑染色法,跑一遍搜所就好了,不给代码了. 思路二: 考虑并查集,我想 ...
- Day11 - O - Coin Game HDU - 3951
题目链接 思路:考虑第一个人取的方式: 1.每次能取的次数>= n, 一次取完 first win 2.每次能取1个,n是奇数 first win 3.一次取不完,这种情况下也分2种情况 1)s ...
- windows下pycharm连接vagrant的python环境
- 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)
PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...