python ML 笔记:Kmeans
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的更多相关文章
- Python机器学习笔记:K-Means算法,DBSCAN算法
K-Means算法 K-Means 算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means 算法有大量的变体,本文就从最传统的K-Means算法学起,在其基础上学习 ...
- Python机器学习笔记:不得不了解的机器学习面试知识点(1)
机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...
- Python机器学习笔记:sklearn库的学习
网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一方面,其实最好的教程就是官方文档. 官方文档地址:https://scikit-learn.org/stable/ (可是官方文档非常 ...
- python机器学习笔记:EM算法
EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域的基础,比如隐式马尔科夫算法(HMM),LDA主题模型的变分推断算法等等.本文对于E ...
- Python机器学习笔记:异常点检测算法——LOF(Local Outiler Factor)
完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 在数据挖掘方面,经常需 ...
- Web Scraping with Python读书笔记及思考
Web Scraping with Python读书笔记 标签(空格分隔): web scraping ,python 做数据抓取一定一定要明确:抓取\解析数据不是目的,目的是对数据的利用 一般的数据 ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- VS2013中Python学习笔记[Django Web的第一个网页]
前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
随机推荐
- SQL2008游标
最近让写一个自动生成数据的存储过程,其中会遍历表中数据并做出相应处理,因为数据量不算太大所以使用到了游标,初识游标遇到几个小问题,所以来和大家一起分享一下: 使用游标的五个步骤: 1.声明游标 语法: ...
- Kth Largest Element in an Array - LeetCode
examination questions Find the kth largest element in an unsorted array. Note that it is the kth lar ...
- 《BI项目笔记》数据源视图设置
目的数据源视图是物理源数据库和分析维度与多维数据集之间的逻辑数据模型.在创建数据源视图时,需要在源数据库中指定包含创建维度和多维数据集所需要的数据表格和视图.BIDS与数据库连接,读取表格和视图定义, ...
- Mac 安装mysql
下载mysql-5.7.14-osx10.11-x86_64.tar # 移动解压后的二进制包到安装目录 sudo mv mysql-5.6.24-osx10.9-x86_64 /usr/local/ ...
- Django1.9开发博客(12)- i18n国际化
国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指 ...
- easy ui datagrid 中getSelections方法只能获取一行数据
解决方案:设置 idField : "", // 设置标识
- javascript new
1. 仅function可以使用new 2. function使用new时,会拷贝function中this的内容给新对象,并将function的prototype指向新对象(如果该function没 ...
- 读javascript高级程序设计05-面向对象之创建对象
1.工厂模式 工厂模式是一种常用的创建对象的模式,可以使用以下函数封装创建对象的细节: function CreatePerson(name,age){ var p=new Object(); p.n ...
- PHP基础示例:商品信息管理系统v1.1[转]
实现目标:使用php和mysql写一个商品信息管理系统,并带有购物车功能 一.创建数据库和表 1.创建数据库和表:demodb 2.创建表格:goods 字段:商品编号,商品名称,商品类型,商品图 ...
- Linux有用命令
1.nohup命令 使用方法:nohup ./run.sh 作用:忽略所有挂断(SIGHUP)信号,不挂断地运行命令