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 Tkinter GUI编程入门介绍
Mar 10 Python
PyTorch学习笔记之回归实战
May 28 Python
Django中使用第三方登录的示例代码
Aug 20 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
python pandas获取csv指定行 列的操作方法
Jul 12 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
python列表返回重复数据的下标
Feb 10 Python
关于多元线性回归分析——Python&amp;SPSS
Feb 24 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
Apr 30 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
Python numpy大矩阵运算内存不足如何解决
Nov 19 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 session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
python中字典(Dictionary)用法实例详解
2015/05/30 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
对Python 语音识别框架详解
2018/12/24 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
小学生运动会通讯稿
2014/09/23 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
python实现三次密码验证的示例
2021/04/29 Python
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
Minikube搭建Kubernetes集群
2022/03/31 Servers
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技