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 Queue模块详细介绍及实例
Dec 27 Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 Python
python3 读写文件换行符的方法
Apr 09 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
Jun 09 Python
python设置值及NaN值处理方法
Jul 03 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
python实现整数的二进制循环移位
Mar 08 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
python 字符串常用函数详解
Sep 11 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
JS实现图片翻书效果示例代码
2013/09/09 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
最新奶茶店创业计划书范文
2014/02/08 职场文书
企业宣传口号
2014/06/12 职场文书
临床专业自荐信
2014/06/22 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
共青团员自我评价
2015/03/10 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
学风建设主题班会
2015/08/17 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书