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;可以支持对时间的高效计算、对比、格式化显示。对这类数组的操作方法和对普通数组的操作是基本一致的。下…

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

前言&#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…

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

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

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…

文本表示

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;返回你可以…

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;古城…

评论数据获取、词频统计、词云图

# coding: utf-8 # In[2]: import urllib.request import re import requests import time import random import json # 设置请求头 headers (User-Agent, Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537…

pytorch 语义分割loss_vedaseg:基于pytorch的开源语义分割工具库,更多模型支持,更易拓展...

加入极市专业CV交流群&#xff0c;与6000来自腾讯&#xff0c;华为&#xff0c;百度&#xff0c;北大&#xff0c;清华&#xff0c;中科院等名企名校视觉开发者互动交流&#xff01;更有机会与李开复老师等大牛群内互动&#xff01;同时提供每月大咖直播分享、真实项目需求对接…

LeetCode 1749. 任意子数组和的绝对值的最大值(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。 一个子数组 [numsl, numsl1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 ... numsr-1 numsr) 。 请你找出 nums 中 和的绝对值 最大的任意子数组&#xff08;可能为空&#xff09;&#xff0c;并返…

同一个项目相互调接口_408计算机网络D3-第二章:网络体系结构与参考模型(上)分层结构-协议-接口-服务...

网络体系结构是从功能上描述计算机网络结构。计算机网络体系结构简称网络体系结构是分层结构&#xff1b;是计算机网络的各层及其协议的集合。每层遵循某个/些网络协议以完成本层功能。分层结构-协议-接口-服务首先就是为什么要分层发送文件前要完成的工作发起通信的计算机必须…

专家 安全_船级社专家组到公司开展安全生产标准化考核

12月17日&#xff0c;船级社专家组一行到公司开展安全生产标准化考核工作&#xff0c;公司党委书记、执行董事曲贝贝&#xff0c;执行总经理(主持生产经营工作)陈飞&#xff0c;执行总经理、安全总监李中华&#xff0c;党委副书记、纪委书记、工会主席刘小丽&#xff0c;总经济…

LeetCode 1750. 删除字符串两端相同字符后的最短长度(双指针)

文章目录1. 题目2. 解题322 / 1676&#xff0c; 19.2%1166 / 8426&#xff0c;13.8%https://leetcode-cn.com/contest/biweekly-contest-45/ranking/ 前两题&#xff1a; LeetCode 1748. 唯一元素的和 LeetCode 1749. 任意子数组和的绝对值的最大值&#xff08;前缀和&#xf…

LeetCode 1752. 检查数组是否经排序和轮转得到

文章目录1. 题目2. 解题1. 题目 给你一个数组 nums 。 nums 的源数组中&#xff0c;所有元素与 nums 相同&#xff0c;但按非递减顺序排列。 如果 nums 能够由源数组轮转若干位置&#xff08;包括 0 个位置&#xff09;得到&#xff0c;则返回 true &#xff1b;否则&#xf…

ts自动编译声明文件_拥抱 TS:细数选择 TS 的 N 种理由

作者 | 马靖day day up, bye bye bug最近在做一个新项目&#xff0c;技术大佬告知前端要用 TS 。前端小白的我内心疑惑“弱类型语言它不香嘛&#xff0c;为什么选择 TS &#xff1f;” 为了紧随大佬的流星大步&#xff0c;拥抱变化。带着这个疑惑我积(被)极(破)主(营)动(业)点开…