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转换摩斯密码示例
Feb 16 Python
Python实现对比不同字体中的同一字符的显示效果
Apr 23 Python
python使用range函数计算一组数和的方法
May 07 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
python生成带有表格的图片实例
Feb 03 Python
Python子类继承父类构造函数详解
Feb 19 Python
详解Python文件修改的两种方式
Aug 22 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 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中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
javascript Prototype 对象扩展
2009/05/15 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
jQuery实现轮播图源码
2019/10/23 jQuery
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
python安装教程 Pycharm安装详细教程
2017/05/02 Python
Python文件操作基本流程代码实例
2017/12/11 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
python 元组的使用方法
2020/06/09 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
大学生实习思想汇报
2014/01/12 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
公司离职证明标准样本
2014/10/05 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
台风停课通知
2015/04/24 职场文书
2015教师节通讯稿
2015/07/20 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
nginx配置之并发频次限制
2022/04/18 Servers