Kmean聚类算法原理python实现
Kmean聚类算法原理python实现
Kmean聚类算法是基于距离对对象进行分类的算法,该算法实现步骤如下:
1、确定初始数据簇质心,质心的数量与需要分的类的数量一致;
2、将数据集中的每一个对象与不同质心计算距离,并将其分类到最近的质心簇中;
3、更新数据簇质心,迭代计算,直到数据簇质心不再变化或者分类精度达到要求时,停止算法。
代码如下:
(1)创建数据集代码:
import matplotlib.pyplot as plt
import numpy as np
import randomdef make_data():data_list = []data_list1 = []data_list2 = []data_list3 = []for _ in range(30):data1 = []data2 = []data3 = []for _ in range(4):data1.append(random.randint(0, 10))data2.append(random.randint(15, 30))data3.append(random.randint(55, 70))data_list1.append(data1)data_list2.append(data2)data_list3.append(data3)data_list.append(data1)data_list.append(data2)data_list.append(data3)return data_list, data_list1, data_list2, data_list3if __name__ == '__main__':data, _, _, _ = make_data()# print(data)data_x = []data_y = []for i in data:print(i)data_x.append(np.sqrt(i[0] ** 2 + i[1] ** 2 + i[2] ** 2))data_y.append(i[3])plt.scatter(data_x, data_y)plt.show()
(2)Kmean算法实现分类
# kmean算法原理演示
import numpy as np
import matplotlib.pyplot as plt
import creat_data
import syssys.setrecursionlimit(1000000)def kmean_test(cornel_list, data_list):""":param data_list: [[],[],[],[],...,[]]:param cornel_list: [[],[],[],...,[]],内部元素数量与需要分类的个数有关:return: 新内核[[],[],[],...,[]]和分类的数据[[[],[],...,],[[],[],...,],...,]"""table_list = []for _ in cornel_list:table_list.append([])# 将列表转换为numpy数组data_list_array = np.array(data_list)cornel_list_array = np.array(cornel_list)for data_item in data_list_array:distance_list = []for cornel_item in cornel_list_array:distance = np.sqrt(np.sum((data_item - cornel_item) ** 2))distance_list.append(distance)min_value_index = distance_list.index(min(distance_list))table_list[min_value_index].append(data_item.tolist())table_list_array = np.array(table_list)# 计算新核new_cornel_list = []for table in table_list_array:sum_cornel = np.zeros((1, len(data_list_array[0])))for item in table:sum_cornel += itemnew_cornel_list.append((sum_cornel / len(table)).tolist())KM.cornel_list_a = new_cornel_listKM.table_list_b = table_listreturn table_list, new_cornel_listclass KM:cornel_list_a = Nonetable_list_b = Nonedef __init__(self, a, b):self.count = 0self.loop(a, b)def loop(self, cornel_list, data_list):table, new_cornel = kmean_test(cornel_list, data_list)if new_cornel == cornel_list:# print("迭代%d次寻找到最佳分组如下:" % self.count)# for table0 in table:# for item in table0:# print(item)# print("#################")return table, new_cornelelse:self.count += 1self.loop(new_cornel, data_list)if __name__ == '__main__':km = KMdata, list1, list2, list3 = creat_data.make_data()list1_x = []list1_y = []list2_x = []list2_y = []list3_x = []list3_y = []for i in list1:list1_x.append(np.sqrt(i[0] ** 2 + i[1] ** 2 + i[2] ** 2))list1_y.append(i[3])for j in list2:list2_x.append(np.sqrt(j[0] ** 2 + j[1] ** 2 + j[2] ** 2))list2_y.append(j[3])for k in list3:list3_x.append(np.sqrt(k[0] ** 2 + k[1] ** 2 + k[2] ** 2))list3_y.append(k[3])cornel_list1 = [[1, 3, 4, 5], [5, 6, 2, 3], [5, 3, 8, 4]]km(cornel_list1, data)cornel1 = km.cornel_list_atable1 = km.table_list_bcornel_list0 = [[40, 10, 36, 5], [33, 55, 74, 21], [9, 13, 18, 4]]km(cornel_list0, data)cornel2 = km.cornel_list_atable2 = km.table_list_binit_cornel1_x = []init_cornel1_y = []init_cornel2_x = []init_cornel2_y = []cornel1_x = []cornel1_y = []cornel2_x = []cornel2_y = []for h in cornel_list1:init_cornel1_x.append(np.sqrt(h[0] ** 2 + h[1] ** 2 + h[2] ** 2))init_cornel1_y.append(h[3])for h1 in cornel_list0:init_cornel2_x.append(np.sqrt(h1[0] ** 2 + h1[1] ** 2 + h1[2] ** 2))init_cornel2_y.append(h1[3])for i in cornel1:cornel1_x.append(np.sqrt(i[0][0] ** 2 + i[0][1] ** 2 + i[0][2] ** 2))cornel1_y.append(i[0][3])for j in cornel2:cornel2_x.append(np.sqrt(j[0][0] ** 2 + j[0][1] ** 2 + j[0][2] ** 2))cornel2_y.append(j[0][3])plt.scatter(list1_x, list1_y, color='black')plt.scatter(list2_x, list2_y, color='red')plt.scatter(list3_x, list3_y, color='green')plt.scatter(cornel1_x, cornel1_y, color='blue')plt.scatter(cornel2_x, cornel2_y, color='yellow')plt.scatter(init_cornel1_x, init_cornel1_y, color='purple')plt.scatter(init_cornel2_x, init_cornel2_y, color='darkorange')plt.show()
运行结果如下:
图中用不同颜色标记不同数据点,黑色、红色和绿色分别是不同簇的数据,橙色和紫色为初始设置的质心(初始设置了两个不同的质心,分别对同一组数据进行分类,以说明初始质心的选择对分类结果的影响。)黄色和蓝色分别为初始质心确定的最终分类质心的结果,由于初始两个质心最终确定的分类质心相同,导致蓝色质心被覆盖。当对其中一个最终质心不描绘时,就可以看到另一个蓝色质心了,如下:
Kmean聚类算法原理python实现相关推荐
- python kmeans聚类 对二维坐标点聚类_Kmeans均值聚类算法原理以及Python如何实现
第一步.随机生成质心 由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给定两个质心,我们这个算法的目的就是将这一堆点根据它们自身的坐标特征分为两类,因此选取了两个质 ...
- 【机器学习】—— K-means聚类算法原理详解 以及 二维、三维数据的K-means聚类Python实现
文章目录 一.K-Means聚类算法原理过程 1.1 K-means聚类的一些细节 1.1.1 样本x(i)x^{(i)}x(i)与中心点μkμ_kμk距离的衡量 1.1.2 K-means聚类算法 ...
- 基本k-mean聚类的文本聚类算法原理和例子
基于质心的划分方法是研究最多的算法,包括k-mean聚类算法及其各种变体,这些变体依据初始簇的选择,对象的划分.相识度的计算方法.簇中心的计算方法不同而不同.基于质心的划分方法将簇中所有对象的平均值看 ...
- 谱聚类算法原理(二)python实现
谱聚类算法是目前最流行的聚类算法之一,其性能及适用场景优于传统的聚类算法如k-均值算法,本文对谱聚类算法进行了详细总结,内容主要参考论文<A Tutorial on Spectral Clust ...
- 干货 | 非常全面的谱聚类算法原理总结
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 谱聚类算法是目前最流行的聚类算法之一,其性能及适用场景优于传统的聚 ...
- 层次聚类算法原理总结
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 层次聚类(hierarchical clustering)基于簇间 ...
- K-Mean聚类算法
文章目录 0.前置基础 0.1聚类简介 [3] [5] 0.2 聚类与分类的区别[4] 1.K-Means算法思想 2.K-Means算法原理及步骤 2.1k-means聚类原理[3] [机器学习]全 ...
- 小白入门谱聚类算法原理与实现
小白入门谱聚类算法原理与实现 小白入门谱聚类算法原理与实现 1. 谱聚类是什么? 2.谱聚类步骤 2.1 谱聚类构图 2.2 谱聚类切图 2.2.1RatioCut 2.2.2Ncut 3谱聚类实现 ...
- DPC密度峰值聚类算法原理详解二
DPC密度峰值聚类算法原理详解二 1.计算数据点两两之间的距离 1.使用 Numpy 模块查找两点之间的欧几里得距离: 2.使用 distance.euclidean() 函数查找两点之间的欧式距离: ...
最新文章
- 2019宁波本科计算机招聘工资,@宁波人,76282!2019年度平均工资是这么多,你拖后腿了吗?...
- (POJ-3279)Fliptile (dfs经典---也可以枚举)
- Python3 之 JSON
- MFC单文档框架编程(一): 分隔窗口的实现
- Redis集群:哨兵(Sentinel)
- python中的字符串是什么,一文秒懂Python中的字符串
- Android微信界面的设计
- Ubuntu11.04 3945ABG无线网卡驱动安装
- sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?
- 知识图谱论文阅读(十六)【WWW2019】Knowledge Graph Convolutional Networks for Recommender
- 资深技术专家崮德在阿里管理研发团队的实践和思考
- Promethus搭建 K8S 集群节点资源监控系统
- 将Visual Studio更新到最新版本
- .netcore2.1 使用postgresql数据库,不能实现表的CRUD问题
- 【译】Jep 文档(2)——基本用法(Basic Usage)
- matlab画森林图,R语言meta分析(4)网状Meta 分析
- JSP项目实战视频教程
- 极通EWEBS医疗系统信息化集成解决方案
- 班主任工作总结中职计算机网络,中职班主任工作总结(精选5篇)
- 智能语音对话处理过程
热门文章
- eclipse 打不开,一闪而过
- Google Chrome Frame一个神奇的东东
- 2023年浙大MBA提面网上申请全流程解析:暗藏误删风险环节。
- 设计模式读书笔记(读后感)
- Dreamweaver 8 锚点链接 下载链接和空链接
- 多轴步进电机的加速度,速度原理分析和如何实现
- ExpandableListView(可折叠列表)的基本使用
- “非工作总结”之快门—我的镜头见过你
- spring boot 与 iview 前后端分离架构之开发环境基于docker的部署的实现(三十六)
- 什么是数据库方言?为什么要配置数据库方言?