6.2K-Means

本文介绍了K-Means聚类算法,包括其原理(通过计算与同一组和不同组的平均距离),评价指标Silhouette,以及初始质心选择对结果的影响。算法的优点包括快速收敛和规则不相交簇,但对k值确定、局部最优和噪声敏感。此外,文中还提及了顺序前导聚类方法,它适合处理流数据且无需预先指定k值,只需设置阈值。
摘要由CSDN通过智能技术生成
  • Evaluation

    • 假设所有数据都呈球状分布,则使用这个公式效果较好
    • 解释
      • 有些直观上不合理的数据聚集方式,J值反而可能更小
  • Silhouette

    • 好处:是一种让我们可以直观上看到或解释聚类效果的函数
    • 解释
      • 对于每个样本点,他要算出一个值来,为了算这个值而定义了a、b两个数
      • a:我与和我同组的人的平均距离
      • b:我与不和我一个组的人的平均距离(如果有c组,再算一下和c组的平均距离,并取其中最小的)
    • 如何使用

      • 每一个点都是一条横着的蓝色的线
  • K-Means

    • 解释
      • 使用高斯函数,放在不同的位置,采样几百个点,即可生成图中这种数据分布
      • 生成了五个红色的点,试图用每个点代表一个簇(目标是成为这个簇的中心点)
      • 根据几个红色的点连线的垂直平分线把空间分成几个区域,每个区域中只包含一个红点
      • 每一个区域中的所有蓝点到本区域中的红点的距离都是最小的
      • 重新计算中心点:绿色的点是当前区域范围内的中心点将红点更新为绿点的位置
      • 迭代更新红点位置,直到更新点位置不再变化
      • 最后返回5个中心点
  • Comments on K-Means

    • 解释
      • 优点
        • regular disjoint clusters:规则不相交簇
        • converges relatively fast:收敛速度相对较快(一般5、6步之内就可以收敛)
      • 算法复杂度:O(t·k·n)
        • t:迭代次数
        • k:中心点的个数
        • n:数据点的个数
      • 缺点
        • k值如何确定
        • 可能收敛到局部最优点
        • 对噪点敏感(因为用了均值,中位数会好一些)
        • 不适用于奇形怪状的数据分布,一般还是适用于球形分布
  • The Influence of Initial Centroids(初始质心的影响)

    • 解释
      • 初始点选的不好,导致没有得到真正意义上的最优解
    • 解决
      • 尝试不同的初始值,得到不同的聚类结果,从中挑选满意的结果
  • Sequential Leader Clustering(顺序前导聚类)

    • 解释
      • 每个点进房间后都自立门户
      • 新来的点要和原来的簇的中心点算一下距离,若他们两个的距离特别近,小于我设定的阈值,则两个点合成一类,并重新计算本簇的中心点
      • 如果新来的点和谁都不接近,则再次自立门户
    • 好处
      • 与K-Means不同的是,它会一个一个的处理数据(处理流数据),不需要迭代
    • 基本原理
      • 不需要确定k值,需要设置一个阈值Threshold
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮流进行各大布局,经过多年的大浪淘沙,各种移动操作系统的不断面世,而目前市场占有率最高的就是微信小程序,本次开发一套基于微信小程序的生签到系统,有管理员,教师,学生三个角色。管理员功能有个人中心,学生管理,教师管理,签到管理,学生签到管理,班课信息管理,加入班课管理,请假信息管理,审批信息管理,销假信息管理,系统管理。教师和学生都可以在微信端注册和登录,教师可以管理签到信息,管理班课信息,审批请假信息,查看学生签到,查看加入班级,查看审批信息和销假信息。学生可以查看教师发布的学生签到信息,可以自己选择加入班课信息,添加请假信息,查看审批信息,进行销假操作。基于微信小程序的生签到系统服务端用Java开发的网站后台,接收并且处理微信小程序端传入的json数据,数据库用到了MySQL数据库作为数据的存储。这样就让用户用着方便快捷,都通过同一个后台进行业务处理,而后台又可以根据并发量做好部署,用硬件和软件进行协作,满足于数据的交互式处理,让用户的数据存储更安全,得到数据更方便。
在yolov5_v6.2版本中,可以使用k-means算法来自动计算聚类中心点,以便更好地初始化锚框。 具体步骤如下: 1. 打开yolov5/data/下的coco.names文件,将其中的类别名称复制到一个txt文件中,每行一个类别名称。 2. 打开yolov5/utils/下的datasets.py文件,将KMeans类添加到文件中,代码如下: ``` from sklearn.cluster import KMeans class KMeans: def __init__(self, n_clusters=9, max_iter=300, random_state=0): self.n_clusters = n_clusters self.max_iter = max_iter self.random_state = random_state def fit(self, X): kmeans = KMeans( n_clusters=self.n_clusters, max_iter=self.max_iter, random_state=self.random_state ).fit(X) self.cluster_centers_ = kmeans.cluster_centers_ def predict(self, X): return KMeans.predict(kmeans, X) ``` 3. 打开yolov5/utils/下的general.py文件,将load_dataset函数修改为如下代码: ``` from utils.datasets import KMeans def load_dataset(data, args, augment=False): paths, labels = [], [] for path, label in zip(data['train'], data['train_labels']): if os.path.isfile(path): paths.append(path) labels.append(label) # Load labels with open(args.classes) as f: classes = [line.strip() for line in f.readlines()] # Compute anchor boxes if args.anchor_t: if os.path.isfile(args.anchor_t): # Load anchor boxes from file with open(args.anchor_t) as f: anchors = np.array([x.split(',') for x in f.read().strip().split('\n')], dtype=np.float32) else: # Compute anchor boxes using k-means clustering n = len(paths) # number of samples m = args.anchor_t # number of anchors dataset = [] for i in tqdm(range(n)): img_path = paths[i] img = cv2.imread(img_path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # convert to RGB h, w = img.shape[:2] for j, (xmin, ymin, xmax, ymax, cls_id) in enumerate(labels[i]): # Normalize box coordinates to range [0, 1] xmin, xmax = xmin / w, xmax / w ymin, ymax = ymin / h, ymax / h # Compute box width and height box_w, box_h = xmax - xmin, ymax - ymin # Append box width and height to dataset dataset.append([box_w, box_h]) kmeans = KMeans(n_clusters=m).fit(dataset) anchors = kmeans.cluster_centers_ # Save anchor boxes to file with open(args.anchor_t, 'w') as f: for anchor in anchors: f.write(','.join(str(x) for x in anchor) + '\n') else: anchors = [] # Create dataset if len(paths) > 0: dataset = Dataset( paths=paths, labels=labels, classes=classes, anchors=anchors, img_size=args.img_size, augment=augment ) else: dataset = None return dataset ``` 4. 执行以下命令来生成锚框: ``` python train.py --data coco.yaml --cfg ./models/yolov5s.yaml --weights '' --verbose --kmeans ``` 其中,--kmeans参数表示使用k-means算法来计算锚框。 5. 训练模型前,需要确认yolov5/data/下已经生成了anchors.txt文件,如果没有生成,可以执行以下命令: ``` python train.py --data coco.yaml --cfg ./models/yolov5s.yaml --weights '' --verbose --kmeans --notest ``` 其中,--notest参数表示不进行测试,只生成anchors.txt文件。 以上就是在yolov5_v6.2版本中使用k-means算法计算锚框的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值