【Python学习笔记】使用python进行kmeans聚类
K-Means 聚类是最常用的一种聚类算法,它的思想很简单,对于给定的样本集和用户事先给定的 K 的个数,将数据集里所有的样本划分成 K 个簇,使得簇内的点尽量紧密地连在一起,簇间的距离尽量远。由于每个簇的中心点是该簇中所有点的均值计算而得,因此叫作 K-Means 聚类。
算法过程
(1)从所有样本中随机选择 K 个样本作为初始的聚类中心。
(2)计算每个样本到各个初始聚类中心的距离,将样本分配到距离最近的类中(通常使用欧氏距离)。
(3)将所有样本都分配完毕后,重新计算 K 个聚类的中心,新的聚类中心即是该簇所有点的平均值。
(4)重复步骤(2)~(3)。
(5)当聚类中心不再发生变化或满足一定条件后,结束聚类。
算法的优缺点
优点:
(1)需要调节的参数只有聚类数目 K。
(2)对于大数据集,算法相对可伸缩和高效,计算的复杂度较低。
缺点:
(1)K-Means 聚类的结果很大程度上依赖于一开始随机选择的聚类中心,可能会导致最终的结果只是局部最优。为了获得最理想的结果,通常需要多次运行 K-Means 算法,选择不同的随机初始聚类中心,观察结果。
(2)K 值需要事先指定,但一般很难选择,需要多次尝试。
(3)对噪声点和异常值十分敏感。
(4)只适用于数值类型的样本数据,不适用于名义类型的样本数据。
使用python进行kmeans聚类
假设我们要解决一个这样的问题。
以下是一些同学,大萌是一个学霸,而我们想要找到这些人中的潜在学霸,所以我们要把这些人分为两类——学霸与非学霸。
| 高数 | 英语 | Python | 音乐 | |
|---|---|---|---|---|
| 小明 | 88 | 64 | 96 | 85 |
| 大明 | 92 | 99 | 95 | 94 |
| 小朋 | 91 | 87 | 99 | 95 |
| 大朋 | 78 | 99 | 97 | 81 |
| 小萌 | 88 | 78 | 98 | 84 |
| 大萌 | 100 | 95 | 100 | 92 |
1 方法一:使用scipy
那么使用scipy的Python实现的代码如下:
import numpy as np
from scipy.cluster.vq import vq,kmeans,whiten
list1=[88.0,74.0,96.0,85.0]
list2=[92.0,99.0,95.0,94.0]
list3=[91.0,87.0,99.0,95.0]
list4=[78.0,99.0,97.0,81.0]
list5=[88.0,78.0,98.0,84.0]
list6=[100.0,95.0,100.0,92.0]
data=np.array([list1, list2, list3, list4, list5, list6])
whiten=whiten(data) # 算出各列元素的标准差,形成一个新的数组
centroids,_=kmeans(whiten,2)
result,_=vq(whiten,centroids)
print(result)
其中,kmeans()函数的功能是对数据进行聚类,返回结果是一个元组,其中我们只需要它的第一个值,这是一个聚类中心数组。vq()函数的功能是矢量量化数据,它可以对每一个数据,也就是对我们这边的每一个人进行归类。
结果如下:
[1 0 0 1 1 0]
说明大明、小朋和大萌都是学霸组的。
需要说明的是,kmeans找到的只是一个局部最优解,而不是全局。
2 方法二:使用sklearn
那么使用sklearn的Python实现的代码如下:
import numpy as np
from sklearn.cluster import KMeans
list1=[88.0,74.0,96.0,85.0]
list2=[92.0,99.0,95.0,94.0]
list3=[91.0,87.0,99.0,95.0]
list4=[78.0,99.0,97.0,81.0]
list5=[88.0,78.0,98.0,84.0]
list6=[100.0,95.0,100.0,92.0]
X=np.array([list1, list2, list3, list4, list5, list6])
kmeans=KMeans(n_clusters=2).fit(X)
pred=kmeans.predict(X)
print(pred)
其中,fit()方法是对Kmeans确定类别以后的数据集进行聚类,而predict()是根据聚类结果,确定所属类别。
结果如下:
[0 1 1 1 0 1]
说明这次大明、小朋、大朋和大萌都是学霸组的。
再次说明,kmeans找到的只是局部最优解。
【参考】
[1] Coursera课程《用Python玩转数据》
[2] 裔隽,张怿檬,张目清等.Python机器学习实战[M].北京:科学技术文献出版社,2018
【Python学习笔记】使用python进行kmeans聚类的更多相关文章
- python 学习笔记 9 -- Python强大的自省简析
1. 什么是自省? 自省就是自我评价.自我反省.自我批评.自我调控和自我教育,是孔子提出的一种自我道德修养的方法.他说:“见贤思齐焉,见不贤而内自省也.”(<论语·里仁>)当然,我们今天不 ...
- python 学习笔记一——Python安装和IDLE使用
好吧,一直准备学点啥,前些日子也下好了一些python电子书,但之后又没影了.年龄大了,就是不爱学习了.那就现在开始吧. 安装python 3 Mac OS X会预装python 2,Linux的大多 ...
- python学习笔记(一):python简介和入门
最近重新开始学习python,之前也自学过一段时间python,对python还算有点了解,本次重新认识python,也算当写一个小小的教程.一.什么是python?python是一种面向对象.解释型 ...
- python学习笔记(python简史)
一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum) 目前python主要应用领域: ·云计算 ·WEB开发 ·科学运算.人工智能 ·系统运维 ·金融:量化交 ...
- python学习笔记(1)--python特点
python诞生于复杂的信息系统时代,是计算机时代演进的一种选择. python的特点,通用语言,脚本语言,跨平台语言.这门语言可以用于普适的计算,不局限于某一类应用,通用性是它的最大特点.pytho ...
- python学习笔记之——python模块
1.python模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python ...
- Python学习笔记 - day12 - Python操作NoSQL
NoSQL(非关系型数据库) NoSQL,指的是非关系型的数据库.NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称.用于超大规模数据的存储.(例如 ...
- [Python学习笔记1]Python语言基础 数学运算符 字符串 列表
这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...
- python学习笔记一 python入门(基础篇)
简单介绍一下python2.x和3.5的区别 print 在python3.5中print 变为print() Old: print * New: print( * ) 如果想要不换行,之前的 ...
- python学习笔记:python数字
一.数字类型分类 数字提供了标量存储和直接访问,它是不可更改类型,也就是说变更数字的值会产生新的对象.python的对象模型与常规对象模型有些不同,对数字对象的更新,实际上是生成了一个新的数值对象,并 ...
随机推荐
- 【刷题】UOJ #207 共价大爷游长沙
火车司机出秦川,跳蚤国王下江南,共价大爷游长沙.每个周末,勤劳的共价大爷都会开车游历长沙市. 长沙市的交通线路可以抽象成为一个 \(n\) 个点 \(n−1\) 条边的无向图,点编号为 \(1\) 到 ...
- 学习Spring Boot:(八)Mybatis使用分页插件PageHelper
首先Mybqtis可以通过SQL 的方式实现分页很简单,只要在查询SQL 后面加上limit #{currIndex} , #{pageSize}就可以了. 本文主要介绍使用拦截器的方式实现分页. 实 ...
- P3320 [SDOI2015]寻宝游戏 解题报告
P3320 [SDOI2015]寻宝游戏 题目描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有\(N\)个村庄和\(N-1\)条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以 ...
- google插件备份与安装
说明 chrome浏览器中有很多有用的扩展程序, 但是可能因为某些原因我们不能直接去扩展程序商店进行下载获取, 如果我们自己电脑上已经通过某种方式添加了扩展程序, 想把它移植到其他没有FQ或者压根没有 ...
- Android Studio 换主题 + 背景图片 + 去掉白色竖线
1.去掉AS编辑区域右边的白色竖线: 把right margin 设置的大一点就可以了,默认是120 ,设置成 1200就ok了 2.AS主题下载换装 可以去如下网站下载,然后导入jar, 具体用法百 ...
- fzyzojP3412 -- [校内训练20171212]奇数
套路地, 考虑dfs树上搞事情 容易发现,对于(x,y)如果dfs树上距离为奇数,或者dfs树上路径中有一条边在某个简单奇环上,那么可以经过奇数条边到达 判断边在某个奇环上: 点双,点双中黑白染色,如 ...
- Webpack + React 开发 01 HelloWorld
1.项目依赖 安装所需要依赖的其它第三方开源库,项目依赖如下: "dependencies": { "babel-core": "^6.21.0&qu ...
- 最短路 dijkstra 优先队列
1.裸题 hdu2544 http://acm.hdu.edu.cn/showproblem.php?pid=2544 Way1: 好像不对 #include <cstdio> #incl ...
- mac 安装 pecl
下载 pear curl -O http://pear.php.net/go-pear.phar sudo php -d detect_unicode= go-pear.phar 配置和安装 pear ...
- 【Asp.net入门4-02】使用Visual Studio调试器