python中K-means算法基础知识点


Posted in Python onJanuary 25, 2021

能够学习和掌握编程,最好的学习方式,就是去掌握基本的使用技巧,再多的概念意义,总归都是为了使用服务的,K-means算法又叫K-均值算法,是非监督学习中的聚类算法。主要有三个元素,其中N是元素个数,x表示元素,c(j)表示第j簇的质心,下面就使用方式给大家简单介绍实例使用。

K-Means算法进行聚类分析

km = KMeans(n_clusters = 3)
km.fit(X)
centers = km.cluster_centers_
print(centers)

三个簇的中心点坐标为:

[[5.006 3.428 ]

[6.81276596 3.07446809]

[5.77358491 2.69245283]]

比较一下K-Means聚类结果和实际样本之间的差别:

predicted_labels = km.labels_
fig, axes = plt.subplots(1, 2, figsize=(16,8))
axes[0].scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1, 
        edgecolor='k', s=150)
axes[1].scatter(X[:, 0], X[:, 1], c=predicted_labels, cmap=plt.cm.Set1,
        edgecolor='k', s=150)
axes[0].set_xlabel('Sepal length', fontsize=16)
axes[0].set_ylabel('Sepal width', fontsize=16)
axes[1].set_xlabel('Sepal length', fontsize=16)
axes[1].set_ylabel('Sepal width', fontsize=16)
axes[0].tick_params(direction='in', length=10, width=5, colors='k', labelsize=20)
axes[1].tick_params(direction='in', length=10, width=5, colors='k', labelsize=20)
axes[0].set_title('Actual', fontsize=18)
axes[1].set_title('Predicted', fontsize=18)

k-means算法实例扩展内容:

# -*- 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算法基础知识点的文章就介绍到这了,更多相关python中K-means算法是什么内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现html转ubb代码(html2ubb)
Jul 03 Python
django的settings中设置中文支持的实现
Apr 28 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
jupyter notebook 增加kernel教程
Apr 10 Python
python实现IOU计算案例
Apr 12 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
python空元组在all中返回结果详解
Dec 15 Python
Python经典五人分鱼实例讲解
Jan 04 Python
Python进程间的通信之语法学习
Apr 11 Python
python中HTMLParser模块知识点总结
Jan 25 #Python
pycharm配置QtDesigner的超详细方法
Jan 25 #Python
Python扫描端口的实现
Jan 25 #Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 #Python
Python实现京东抢秒杀功能
Jan 25 #Python
Python Process创建进程的2种方法详解
Jan 25 #Python
使用python对excel表格处理的一些小功能
Jan 25 #Python
You might like
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
2017/01/21 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
vue实现文件上传功能
2018/08/13 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
学生逃课检讨书
2015/02/17 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
九年级语文教学反思
2016/03/03 职场文书
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers