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 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python实现将n个点均匀地分布在球面上的方法
Mar 12 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
Python实现的桶排序算法示例
Nov 29 Python
django删除表重建的实现方法
Aug 28 Python
python打包成so文件过程解析
Sep 28 Python
python实现while循环打印星星的四种形状
Nov 23 Python
python扫描线填充算法详解
Feb 19 Python
python文件及目录操作代码汇总
Jul 08 Python
基于python爬取梨视频实现过程解析
Nov 09 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安全配置
2006/10/09 PHP
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
详解PHP中的Traits
2015/07/29 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
基于jquery的多功能软键盘插件
2012/07/25 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
详解小白之KMP算法及python实现
2019/04/04 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
包装类的功能、种类、常用方法
2012/01/27 面试题
圣诞节红领巾广播稿
2014/02/03 职场文书
外贸业务员求职信
2014/06/16 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
python scrapy简单模拟登录的代码分析
2021/07/21 Python
如何解决php-fpm启动不了问题
2021/11/17 PHP
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers