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的文件, ...
随机推荐
- 凯撒加密(key为3)
基本思想: 加密是把字符串中的每一个字符+3解密是每一个字符-3 源代码: package demo;import java.util.Scanner; class Encryption{ Strin ...
- 《BI项目笔记》创建时间维度(2)
创建步骤: 序号 选择的属性 重命名后的名称 属性类别 1 DateKey DateKey 常规 2 Month Key Month Key 月份 3 English Month Name Eng ...
- JDBC连接sql server数据库及其它
JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的 ...
- STL中的查找算法
STL中有很多算法,这些算法可以用到一个或多个STL容器(因为STL的一个设计思想是将算法和容器进行分离),也可以用到非容器序列比如数组中.众多算法中,查找算法是应用最为普遍的一类. 单个元素查找 1 ...
- PHP中的变量详解
php变量通过名只能我们就知道首先变量,是在程序执行期间,可以变化的量. 1.那变量是干嘛的呢,用变量就可以来保存我们值,这就是变量,那么我们接着来看,知道了变量是什么,以及它能干什么,我们再来看一下 ...
- java 滤镜实现
一句话,滤镜的实现就是对像素点(RGBA)进行再运算,输出新的像素点. F(r,g,b,a)=G(r,g,b,a); 这个公式包含四个变换,即RGB颜色空间中RGB三个分量的变换以及透明度Alh ...
- VIM 代码折叠
VIM 代码折叠 VIM代码折叠方式可以用"foldmethod"选项来设置,如: set foldmethod=indent 有6种方式来折叠代码 1. manual //手工定 ...
- java 注释
单行注释// 多行注释/* */ 注释并写入javadoc /** */ // 这是单行注释的示例 /* 这个也是单行注释的示例 */ /* 这是第一个Java程序 *它将打印Hello Worl ...
- 课时9—popup
内容比较多的时候可以全屏显示,用第一种实现方式,如图1 图1 内容较少的话可以使用第二种实现方式如图2:图2 具体的实现代码如下: .header,.footer,.wrap-page{ positi ...
- Selenium for C#的入门Demo
原文转载:http://www.cnblogs.com/halia/p/3562132.html?utm_source=tuicool 最近刚开始接触Selenium, 发现很多例子都是用java写的 ...