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. Ubuntu快捷键

    https://linux.cn/article-3025-1.html 超级键操作 1.超级键(Win键)–打开dash. 2.长按超级键– 启动Launcher.并快捷键列表. 3.按住超级键,再 ...

  2. Spring 框架下Controller 返回结果在EasyUI显示

    这几天弄了一下java下的在后台返回数据到jsp页面上的显示: 总结一下: 首先后台方面: @RequestMapping(value="/searchByUserName") @ ...

  3. 用Js+css3实现图片旋转,缩放,裁剪,滤镜

    还是前端图片的老话题,花了半天时间,东拼西凑,凑出个demo,优点在于代码少,核心代码就6行,目前刚做了旋转,缩放,裁剪,滤镜要js做,网络上也有现成的代码, 但是想做到自定义的滤镜咋办呢?这还要从底 ...

  4. js 默认选中分页条件项

    <table border="0" cellspacing="0" cellpadding="0" height="100% ...

  5. cookie 二:

    本篇随笔从cookie的入门开始,介绍了cookie的设置获取和移除,还有一些小的应用案例:一.设置cookie <script> //设置cookie:function setCooki ...

  6. 回车键转tab键解决方案一

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 回车键转tab键

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head ...

  8. 如果重新设计网络,有没有可能合并IP地址跟MAC地址?

    前阵子看网络基础相关的书籍,冒过一个疑问,为什么要有MAC地址跟IP地址?两者可否合二为一?   现在的逻辑是这样子:在数据传输过程中,路由器查看这个数据包的IP地址,跟路由表中记录的“IP集合:下一 ...

  9. 对已经发布订阅的sqlserver进行修改-添加新的表

    1.以服务器名称连接数据库 2.找到复制-本地发布-对应的数据库发布订阅-右键属性-选择项目-选择新增的表(没有看到,注意取消右侧的仅显示列表已选择的项目) 3.然后重新初始化所有订阅 4.如果出现“ ...

  10. Java - 简单的对象排序 - Comparator

    注:对象排序,就是对对象中的某一字段进行比较,以正序或倒序进行排序. 例: 需要排序的对象: public class Person { public int age; public String n ...