K-Means算法和K-Means++算法的聚类

在构成圆形的30000个随机样本点上,设置7个簇,使用K-Means算法聚类

from math import pi, sin, cos
from collections import namedtuple
from random import random, choice
from copy import copy
import matplotlib.pyplot as plt
import numpy as np
import systry:import psycopsyco.full()
except ImportError:passFLOAT_MAX = 1e100class Point:__slots__ = ["x", "y", "group"]def __init__(self, x=0.0, y=0.0, group=1):self.x, self.y, self.group = x, y, groupdef generate_points(npoints, radius):points = [Point() for _ in range(npoints)]# note: this is not a uniform 2-d distributionfor p in points:r = random() * radiusang = random() * 2 * pip.x = r * cos(ang)p.y = r * sin(ang)return pointsdef nearest_cluster_center(point, cluster_centers):"""Distance and index of the closest cluster center"""def sqr_distance_2D(a, b):return (a.x - b.x) ** 2  +  (a.y - b.y) ** 2min_index = point.groupmin_dist = FLOAT_MAXfor i, cc in enumerate(cluster_centers):d = sqr_distance_2D(cc, point)if min_dist > d:min_dist = dmin_index = ireturn (min_index, min_dist)def kpp(points, cluster_centers):cluster_centers[0] = copy(choice(points))d = [0.0 for _ in range(len(points))]for i in range(1, len(cluster_centers)):sum = 0for j, p in enumerate(points):d[j] = nearest_cluster_center(p, cluster_centers[:i])[1]sum += d[j]sum *= random()for j, di in enumerate(d):sum -= diif sum > 0:continuecluster_centers[i] = copy(points[j])breakfor p in points:p.group = nearest_cluster_center(p, cluster_centers)[0]def lloyd(points, nclusters):cluster_centers = [Point() for _ in range(nclusters)]# call k++ initkpp(points, cluster_centers)lenpts10 = len(points) >> 10changed = 0while True:# group element for centroids are used as countersfor cc in cluster_centers:cc.x = 0cc.y = 0cc.group = 0for p in points:cluster_centers[p.group].group += 1cluster_centers[p.group].x += p.xcluster_centers[p.group].y += p.yfor cc in cluster_centers:cc.x /= cc.groupcc.y /= cc.group# find closest centroid of each PointPtrchanged = 0for p in points:min_i = nearest_cluster_center(p, cluster_centers)[0]if min_i != p.group:changed += 1p.group = min_i# stop when 99.9% of points are goodif changed <= lenpts10:breakfor i, cc in enumerate(cluster_centers):cc.group = ireturn cluster_centersdef kmeans(points, nclusters):cluster_centers = [copy(choice(points)) for _ in xrange(nclusters)]lenpts10 = len(points) >> 10changed = 0while True:for p in points:cluster_centers[p.group].group += 1cluster_centers[p.group].x += p.xcluster_centers[p.group].y += p.yfor cc in cluster_centers:#print cc.x,cc.y,cc.groupcc.x /= cc.groupcc.y /= cc.groupchanged = 0for p in points:min_i = nearest_cluster_center(p, cluster_centers)[0]if min_i != p.group:changed += 1p.group = min_i# stop when 99.9% of points are goodif changed <= lenpts10:breakfor i, cc in enumerate(cluster_centers):cc.group = ireturn cluster_centersdef print_eps(points, cluster_centers):c = np.random.rand(len(cluster_centers)+1,3)for i, cc in enumerate(cluster_centers):plot_x = []plot_y = []print (cc.x,cc.y,cc.group)for p in points:if p.group != i:continueplot_x.append(p.x)plot_y.append(p.y)plt.scatter(plot_x,plot_y,color=c[i],s=1)plt.scatter(cc.x,cc.y, color=c[len(c)-i-1], marker='^',s=50)plt.show()def main():npoints = 30000k = 7 # # clusterspoints = generate_points(npoints, 10)cluster_centers = lloyd(points, k)#cluster_centers = kmeans(points,k)print_eps(points, cluster_centers)main()

4.752567342690781 -4.334890736846155 0
-1.3573754262792683 6.986665631867061 1
-0.15969173199245487 2.506935816564994 2
-6.2690747305026315 0.7728991240509486 3
-2.713392739613833 -5.828585413438269 4
5.771515155816214 2.91539616422218 5
0.07082712668661448 -0.7504142150100154 6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

convert.todatetime指定日期格式_MATLAB的时间与日期

7 日期和时间MATLAB在2014b版本中将日期和时间独立成了一个数据类型&#xff0c;新的版本中对于时间数据的处理功能更为强大。比如datetime和duration等函数&#xff0c;可以支持对时间的高效计算、对比、格式化显示。对这类数组的操作方法和对普通数组的操作是基本一致的。下…

dategurd oracle_Oracle 时间和日期处理

-- Oracle时间SELECT SYSDATE FROM dual; -- 系统时间SELECT SYSTIMESTAMP FROM dual; -- 当前系统时间戳SELECT CURRENT_TIMESTAMP FROM dual; -- 与时区设置有关&#xff0c;返回的秒是系统的&#xff0c;返回的日期和时间是根据时区转换过的SELECT current_date FROM dual; …

关于有多个Fragment中的textview跑马灯问题

问题描述一个activity里面有多个Fragment,1,2,3,4其中fragment1中有2个textview,在第一次启动fragment1的时候跑马灯能正常跑马; 当跳转到其他fragment后,再回到fragment1的时候,跑马灯已经不跑马了?关于这个是textview的焦点问题吗?求大神解答,,,求大神解决.... 解决方案1应…

跨设备链路聚合_路由与交换技术(华为设备)第五讲---链路聚合

前言&#xff1a;随着网络规模不断扩大&#xff0c;用户对骨干链路的带宽和可靠性提出了越来越高的要求。在传统技术中&#xff0c;常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽&#xff0c;但这种方案需要付出高额的费用&#xff0c;而且不够灵活。采…

电影评论分类:二分类问题

根据电影评论的 文字内容将其划分为正面或负面。 使用IMDB 数据集&#xff0c;它包含来自互联网电影数据库&#xff08;IMDB&#xff09;的50 000 条严重两极分 化的评论。数据集被分为用于训练的25 000 条评论与用于测试的25 000 条评论&#xff0c;训练集和测试 集都包含50%…

TensorFlow 2.0 - tf.distribute 分布式训练

文章目录1. 单机多卡 MirroredStrategy2. 多机训练 MultiWorkerMirroredStrategy3. TPU 张量处理单元学习于&#xff1a;简单粗暴 TensorFlow 2 1. 单机多卡 MirroredStrategy # 分布式训练 import tensorflow as tf import tensorflow_datasets as tfds# 1 单机多卡 Mirrore…

python抽象基类的作用_Python:多态、鸭子模型和抽象基类

1. 多态什么是多态-- 多态&#xff0c;指的是一种事务具有多种形态&#xff1b;-- python是一种动态语言&#xff0c;默认支持多态&#xff0c;同一个方法 调用 不同的类对象 &#xff0c;执行的 结果各不相同&#xff1b;多态实现-- 继承&#xff1a;不同子类 继承 同一父类&a…

非抢占式优先级调度算法_华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核...

华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核众所周知华为鸿蒙操作系统内核是Linux内核。而Linux内核即是抢占式内核也是非抢占式内核。设置软件优先级在优先级在0-99之间是抢占式优先级。设置优先级在100-139之间是非抢占式优先级。从华为官方发布的信息--优先级高的任务…

windows下python 使用CRF++ python接口的配置

1. 下载包含python接口的版本的CRF并安装&#xff0c;安装成功后查看python文件夹包含setup.py 文件&#xff0c;内容如下&#xff1a; #!/usr/bin/env python from distutils.core import setup,Extension,os import string setup(name "mecab-python", p…

TensorFlow 2.0 - Hub 模型复用

文章目录1. tfhub2. 例子&#xff1a;神经风格转换3. retrain 例子学习于&#xff1a;简单粗暴 TensorFlow 2 1. tfhub 网址&#xff1a; https://hub.tensorflow.google.cn/ https://tfhub.dev/ 可以搜索&#xff0c;下载模型 安装包 pip install tensorflow-hub import…

微服务 注册中心的作用_102,谈谈微服务注册中心zookeeperamp;Eureka

首先&#xff0c;大家要明确一点微服务注册中心是一个重要的组件&#xff0c;解决的是服务的注册和发现的问题&#xff0c;而zookeeper&#xff0c;Eureka都只是其中一款落地实现的产品&#xff0c;再比如Nacos也是如此&#xff0c;所以关键是掌握注册中心的工作原理&#xff0…

python2转python3代码_2to3 – 自动Python 2到3代码翻译 – 开发工具(Python教程)(参考资料)...

使用2to3 2to3通常与Python解释器一起安装为脚本。它也位于Python根目录的Tools/scripts目录下 2to3的基本参数是要转换的文件或目录列表。这些目录以递归方式遍历Python源. 这是一个示例Python 2.x源文件&#xff0c; def greet(name): print "Hello, {0}!".format(…

文本表示

1 one-hot representation 该单词对应所在元素为1&#xff0c;向量中其他元素均为0&#xff0c;向量的维度就等于词库中的单词数目  所有向量都是互相正交的&#xff0c;我们无法有效的表示两个向量间的相似度  向量维度过大。 from sklearn.feature_extraction.text…

天池 在线编程 课程表(拓扑排序 + 回溯)

文章目录1. 题目2. 解题1. 题目 总共有n个课程&#xff0c;从0到n-1。 有些课程可能有先决条件&#xff0c;例如&#xff0c;你想修课程0&#xff0c;你必须先修一门课程1&#xff0c;这两门课之间的关系表示为:[0,1] 给定课程的总数和先决条件对的列表&#xff0c;返回你可以…

fence机制 linux_Linux ha fence设备测试

另外&#xff0c;在配置RHCS5.3时&#xff0c;Fence设备只ping通还不行&#xff0c;还必须经过测试&#xff0c;我在网上找了一篇IPMI的文章&#xff0c;现粘贴如下&#xff1a;What is IPMI?Intelligent Platform Management Interface[edit]AdvantagesLow cost.Available on…

Apache2.4 与 PHP 5.5 64位版的安装配置

我的环境&#xff1a;windows7 旗舰版 64位 首先下载相关文件&#xff1a; php 5.5.0 windows 64版 http://windows.php.net/download/#php-5.5 &#xff08;选择 64位的下载&#xff09; apache2.4 压缩版下载 http://www.apachelounge.com/download/VC11/ 下载版本一定要对应…

java 父子级json组装不用递归_2020面试阿里Java研发岗题库总结,想虐面试官不能错过的面试宝典...

前言:虽然天猫&#xff0c;蚂蚁金&#xff0c;菜鸟都归属阿里旗下&#xff0c;但每个面试官问的问题都不一样&#xff0c;相同点主要在流程方面。面试开始会让自我介绍&#xff0c;主要业务架构和技术架构两部分。业务架构一般不会深究&#xff0c;但要面试官听明白&#xff0c…

LeetCode 1748. 唯一元素的和

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。 数组中唯一元素是那些只出现 恰好一次 的元素。 请你返回 nums 中唯一元素的 和 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,2] 输出&#xff1a;4 解释&#xff1a;唯一元素为 [1,3] &#xff0c;和为 4…

朵唯机器人怎么连网_平遥古城推出机器人导游 可伴游还可骑行

近日&#xff0c;一组集景点讲解、语音互动等多种功能于一身的机器人亮相平遥古城&#xff0c;引发游客关注。2月27日&#xff0c;北京青年报记者从景区旅游公司处了解到&#xff0c;这批机器人导游已经上岗5天&#xff0c;主要是为了填补下午5点人工导游下班后&#xff0c;古城…

【DFS】HDU 1364 POJ 1071 Illusive Chase

数据水了。。。 不知道正解是什么 将TOM放在一个0上经过输入的 1 2 R 这样走 还能在图上则这个点可行&#xff08;走的过程中不能走出图&#xff09; 求有几个0 可行 直接dfs 完全没有别的思路 题目要求必须 走 A - B 步 所以在走A步不能遇到 1 #include <cstdio> #inc…