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之折腾一下目录
Oct 24 Python
Python中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
在Django的模型和公用函数中使用惰性翻译对象
Jul 27 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
python matplotlib库直方图绘制详解
Aug 10 Python
python Opencv计算图像相似度过程解析
Dec 03 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
pytorch查看网络参数显存占用量等操作
May 12 Python
python b站视频下载的五种版本
May 27 Python
python使用pymysql模块操作MySQL
Jun 16 Python
总结Python使用过程中的bug
Jun 18 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 MYSQL中插入当前时间
2008/04/06 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
jQuery.Form上传文件操作
2017/02/05 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
python实现用户答题功能
2018/01/17 Python
Django框架模板用法入门教程
2019/11/04 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
Java如何格式化日期
2012/08/07 面试题
采购部岗位职责
2013/11/24 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
英文邀请函
2015/02/02 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
通用员工手册范本
2015/05/14 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
纯html+css实现打字效果
2021/08/02 HTML / CSS
vue实现列表垂直无缝滚动
2022/04/08 Vue.js