Python实现k-means算法


Posted in Python onFebruary 23, 2018

本文实例为大家分享了Python实现k-means算法的具体代码,供大家参考,具体内容如下

这也是周志华《机器学习》的习题9.4。

数据集是西瓜数据集4.0,如下

编号,密度,含糖率
1,0.697,0.46
2,0.774,0.376
3,0.634,0.264
4,0.608,0.318
5,0.556,0.215
6,0.403,0.237
7,0.481,0.149
8,0.437,0.211
9,0.666,0.091
10,0.243,0.267
11,0.245,0.057
12,0.343,0.099
13,0.639,0.161
14,0.657,0.198
15,0.36,0.37
16,0.593,0.042
17,0.719,0.103
18,0.359,0.188
19,0.339,0.241
20,0.282,0.257
21,0.784,0.232
22,0.714,0.346
23,0.483,0.312
24,0.478,0.437
25,0.525,0.369
26,0.751,0.489
27,0.532,0.472
28,0.473,0.376
29,0.725,0.445
30,0.446,0.459

算法很简单,就不解释了,代码也不复杂,直接放上来:

# -*- coding: utf-8 -*- 
"""Excercise 9.4"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sys
import random

data = pd.read_csv(filepath_or_buffer = '../dataset/watermelon4.0.csv', sep = ',')[["密度","含糖率"]].values

########################################## K-means ####################################### 
k = int(sys.argv[1])
#Randomly choose k samples from data as mean vectors
mean_vectors = random.sample(data,k)

def dist(p1,p2):
  return np.sqrt(sum((p1-p2)*(p1-p2)))
while True:
  print mean_vectors
  clusters = map ((lambda x:[x]), mean_vectors) 
  for sample in data:
    distances = map((lambda m: dist(sample,m)), mean_vectors) 
    min_index = distances.index(min(distances))
    clusters[min_index].append(sample)
  new_mean_vectors = []
  for c,v in zip(clusters,mean_vectors):
    new_mean_vector = sum(c)/len(c)
    #If the difference betweenthe new mean vector and the old mean vector is less than 0.0001
    #then do not updata the mean vector
    if all(np.divide((new_mean_vector-v),v) < np.array([0.0001,0.0001]) ):
      new_mean_vectors.append(v)  
    else:
      new_mean_vectors.append(new_mean_vector)  
  if np.array_equal(mean_vectors,new_mean_vectors):
    break
  else:
    mean_vectors = new_mean_vectors 

#Show the clustering result
total_colors = ['r','y','g','b','c','m','k']
colors = random.sample(total_colors,k)
for cluster,color in zip(clusters,colors):
  density = map(lambda arr:arr[0],cluster)
  sugar_content = map(lambda arr:arr[1],cluster)
  plt.scatter(density,sugar_content,c = color)
plt.show()

运行方式:在命令行输入 python k_means.py 4。其中4就是k。
下面是k分别等于3,4,5的运行结果,因为一开始的均值向量是随机的,所以每次运行结果会有不同。

Python实现k-means算法

Python实现k-means算法

Python实现k-means算法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
最大K个数问题的Python版解法总结
Jun 16 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
Python_查看sqlite3表结构,查询语句的示例代码
Jul 17 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
python程序输出无内容的解决方式
Apr 09 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
python语言中with as的用法使用详解
Feb 23 #Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 #Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 #Python
python3调用R的示例代码
Feb 23 #Python
python中kmeans聚类实现代码
Feb 23 #Python
python实现SOM算法
Feb 23 #Python
python实现k-means聚类算法
Feb 23 #Python
You might like
PHP.MVC的模板标签系统(三)
2006/09/05 PHP
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
php的控制语句
2006/10/09 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
详解如何使用Python编写vim插件
2017/11/28 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
python生成ppt的方法
2018/06/07 Python
python爬虫实例详解
2018/06/19 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
书法比赛获奖感言
2014/02/10 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
《日月潭》教学反思
2016/02/20 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python