kmeans算法的python实现:

参考与样本来源《Machine Learning in Action》

 #-*-coding:UTF-8-*-
'''
Created on 2015年8月19日
@author: Ayumi Phoenix
'''
import numpy as np def distL2(a,b):
""" 计算两个向量之间的L2距离 """
return np.sqrt(np.sum((a-b)**2)) class Kmeans():
def __init__(self, dataset,k):
self.dataset = dataset
self.k = k
self.m, self.n = dataset.shape def randcent(self):
""" 根据输入数据集获得随机生成一组簇质心 """
maxn = np.max(self.dataset, 0) # 获取每一维的最大值
minn = np.min(self.dataset, 0) # 获取每一维的最小值
centoroid = np.random.rand(self.k,self.n) * (maxn - minn) + minn # k x n
return centoroid def train(self, dist, iter = 1):
"""
# 1. 计算每个样本与所有簇心的最近匹配距离数组 m x 1:
# 计算某样本与所有簇心的距离,
# 找到最小距离所属的下标序号 0...k-1
# 2. 根据当前类标的分配,重新计算平均聚类中心
# 按照当前分配索引样本数据
# 迭代次数减一
# 3. 返回最终的质心与分配的序号
"""
centoroid = self.randcent()
while iter:
labels = np.zeros((self.m,), int)
for i in range(self.m):
d = [dist(self.dataset[i,:],centoroid[j])
for j in range(self.k)]
labels[i] = np.argmin(d)
for i in range(self.k):
x = self.dataset[labels==i]
centoroid[i] = np.mean(x, 0)
iter -= 1
return centoroid, labels

读取数据与测试函数:

 ef loadDataSet(filename):
dataMat = []
with open(filename) as f:
for line in f.readlines():
curline = line.strip().split('\t')
fltline = map(np.float, curline)
dataMat.append(fltline)
return dataMat if __name__=="__main__":
pass
datMat = np.array(loadDataSet('testSet.txt'))
km = Kmeans(datMat,4)
centoroid, labels = km.train(distL2, iter=20) # 根据当前质心显示样本分布
import matplotlib.pylab as pl
pl.figure()
c = ['ro','go','bo','yo','co','ko','wo','mo']
for i in range(datMat.shape[0]):
pl.plot(datMat[i][0],datMat[i][1],c[labels[i]])
for cen in centoroid:
pl.plot(cen[0],cen[1],'mo')
pl.show()

结果:

python ML 笔记:Kmeans的更多相关文章

  1. Python机器学习笔记:K-Means算法,DBSCAN算法

    K-Means算法 K-Means 算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means 算法有大量的变体,本文就从最传统的K-Means算法学起,在其基础上学习 ...

  2. Python机器学习笔记:不得不了解的机器学习面试知识点(1)

    机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...

  3. Python机器学习笔记:sklearn库的学习

    网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一方面,其实最好的教程就是官方文档. 官方文档地址:https://scikit-learn.org/stable/ (可是官方文档非常 ...

  4. python机器学习笔记:EM算法

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域的基础,比如隐式马尔科夫算法(HMM),LDA主题模型的变分推断算法等等.本文对于E ...

  5. Python机器学习笔记:异常点检测算法——LOF(Local Outiler Factor)

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 在数据挖掘方面,经常需 ...

  6. Web Scraping with Python读书笔记及思考

    Web Scraping with Python读书笔记 标签(空格分隔): web scraping ,python 做数据抓取一定一定要明确:抓取\解析数据不是目的,目的是对数据的利用 一般的数据 ...

  7. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  8. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  9. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

随机推荐

  1. GZFramwork数据库层《四》单据主从表增删改查

    同GZFramwork数据库层<三>普通主从表增删改查 不同之处在于:实例 修改为: 直接上效果: 本系列项目源码下载地址:https://github.com/GarsonZhang/G ...

  2. Android学习简单总结

    1: 主要的view控件: 文字: TextView 图片: ImgView 视频:SurfaceView ... 2:控件 PopupWindow 实现类似左边导航栏 tabhost实现顶部或者下部 ...

  3. C语言语法之关键字

    注:该内容整理自以下链接. http://www.cnblogs.com/yezhenhan/archive/2011/10/16/2214420.html 由ANSI标准定义的C语言关键字共32个: ...

  4. CSS实现垂直居中

    Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生效,例如表格元素中的<td>. ...

  5. SPSS数据分析——t检验

    SPSS中t检验全都集中在分析—比较均值菜单中.关于t检验再简单说一下,我们知道一个统计结果需要表达三部分内容,即集中性.变异性.显著性. 集中性的表现指标是均值变异的的表现指标是方差.标准差或标准误 ...

  6. IIS6.0开启gzip压缩(来自百度)

    IIS6.0开启gzip压缩 | 更新:2012-08-10 10:29 1 2 3 4 5 分步阅读 开启gzip可以极大的加速网站.有时压缩比率高达80%,近来测试了一下,最少都有40%以上,还是 ...

  7. react native ScrollView

    ScrollView是一个通用的可滚动的容器,你可以在其中放入多个组件和视图,而且这些组件并不需要是同类型的.ScrollView不仅可以垂直滚动,还能水平滚动(通过horizontal属性来设置). ...

  8. scala学习笔记

    一 入门 为了增加编程趣味和技能,学习新语言,体会函数式编程和简易的并发管理模型,了解日渐活跃的Spark,尝试下Scala.Scala = Scalable language,作者是Martin O ...

  9. ImageMagick and JMagick install on Mac OSX

    接的遗留代码,在本地运行,有jmagick-6.4.0.jar 但是出现错误: javax.servlet.ServletException: java.lang.NoClassDefFoundErr ...

  10. POJ 3041 Asteroids 匈牙利算法,最大流解法,行列为点 难度:1

    http://poj.org/problem?id=3041 #include <cstdio> #include <cstring> #include <vector& ...