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 相关文章推荐
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
python文件操作之目录遍历实例分析
May 20 Python
深入解析Python中的urllib2模块
Nov 13 Python
Python常用爬虫代码总结方便查询
Feb 25 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
Python实现计算图像RGB均值方式
Jun 04 Python
如何利用python和DOS获取wifi密码
Mar 31 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
Python进程池与进程锁之语法学习
Apr 11 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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
JS 常用校验函数
2009/03/26 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
pytyon 带有重复的全排列
2013/08/13 Python
Python读写配置文件的方法
2015/06/03 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
python自动发送邮件脚本
2018/06/20 Python
Django框架模板介绍
2019/01/15 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
详解Django配置JWT认证方式
2020/05/09 Python
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
大学生创业策划书
2014/02/02 职场文书
物流专员岗位职责
2014/02/17 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
小学生表扬稿范文
2015/05/05 职场文书
班主任工作总结范文
2015/08/13 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python