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 自动安装 Rising 杀毒软件
Apr 24 Python
python中Flask框架简单入门实例
Mar 21 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
python实现list由于numpy array的转换
Apr 04 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
python性能测量工具cProfile使用解析
Sep 26 Python
python3 配置logging日志类的操作
Apr 08 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 Python
Python基于百度API识别并提取图片中文字
Jun 27 Python
关于python爬虫应用urllib库作用分析
Sep 04 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来自动调用不同服务器上的flash
2006/10/09 PHP
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
python让列表倒序输出的实例
2018/06/25 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
python时间time模块处理大全
2020/10/25 Python
python如何调用php文件中的函数详解
2020/12/29 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
大学生求职中的自我评价
2013/10/01 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
初一学生期末评语
2014/04/24 职场文书
租房协议书范例
2014/10/14 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
python pyhs2 的安装操作
2021/04/07 Python
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL