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实现微信模板消息
Dec 21 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
python中pip的安装与使用教程
Aug 10 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
Django 大文件下载实现过程解析
Aug 01 Python
python飞机大战pygame游戏框架搭建操作详解
Dec 17 Python
python实现手势识别的示例(入门)
Apr 15 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
基于Python实现全自动下载抖音视频
Nov 06 Python
python requests库的使用
Jan 06 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
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
原生js生成图片验证码
2020/10/11 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
对Python实现累加函数的方法详解
2019/01/23 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
Python assert语句的简单使用示例
2019/07/28 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
Python列表如何更新值
2020/05/27 Python
Python flask框架端口失效解决方案
2020/06/04 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
英国现代绅士品牌:Hackett
2017/12/17 全球购物
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
高中学生干部学习的自我评价
2014/02/21 职场文书
代理人委托书
2014/09/16 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
2014年教师工作总结
2014/11/10 职场文书
英文辞职信范文
2015/05/13 职场文书
安全教育主题班会教案
2015/08/12 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript