k中心点聚类算法伪代码_第十三篇:K-Means 聚类算法原理分析与代码实现

前言

在前面的文章中,涉及到的机器学习算法均为监督学习算法。

所谓监督学习,就是有训练过程的学习。再确切点,就是有 "分类标签集" 的学习。

现在开始,将进入到非监督学习领域。从经典的聚类问题展开讨论。所谓聚类,就是事先并不知道具体分类方案的分类 (允许知道分类个数)。

本文将介绍一个最为经典的聚类算法 - K-Means 聚类算法以及它的两种实现。

现实中的聚类分析问题 - 总统大选

假设 M 国又开始全民选举总统了,目前 Mr.OBM 的投票率为48%(投票数占所有选民人数的百分比),而 Mr.MKN 的为47%,而剩下的一部分出于【种种原因】没有投票。

做为其中某个阵营的人,自然是希望能够尽可能的争取到这些剩余的票 -因为这完全可能影响最终选举结果。

然而,你不可能争取到这些人的所有投票,因为你满足某个群体的人,也许就伤害到了另一群人的利益。

一个很不错的想法是将这些人分为 K 个群体,然后主要对其中人数最多的几个群体做工作。

-- 这,就需要使用到聚类的策略了。

聚类策略是搜集剩余选民的用户信息(各种满意/不满意的信息),将这些信息输入进聚类算法,然后对聚类结果中人数最多的簇的选民做思想工作。

可能你会发现某个簇的选民都是一个社区的,一个宗教信仰的,或者具有某些共性。这样就方便各种各样的拉票活动了。

K-Means 聚类算法

K,指的是它可以发现 K 个簇;Means,指的是簇中心采用簇所含的值的均值来计算。

下面先给出伪代码:

1 创建 k 个点作为起始质心 (随机选择):2 当任意一个点的簇分配结果发生改变的时候:3 对数据集中的每个数据点:4 对每个质心:5 计算质心与数据点之间的距离6 将数据点分配到距其最近的簇7 对每一个簇:8 求出均值并将其更新为质心

然后是一个具体实现Python程序:

1 #!/usr/bin/env python

2 #-*- coding:UTF-8 -*-

3

4 '''

5 Created on 20**-**-**6

7 @author: fangmeng8 '''

9

10 from numpy import *

11

12 #==================================

13 #输入:

14 #fileName: 数据文件名(含路径)

15 #输出:

16 #dataMat: 数据集

17 #==================================

18 defloadDataSet(fileName):19 '载入

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k-means聚类算法是一种常见的无监督学习算法,用于将数据集分成k个簇,每个簇包含最相似的数据点。下面是k-means聚类算法代码解释: 1. 初始化k个中心点k-means算法需要先指定簇的数量k,然后从数据集中随机选取k个数据点作为中心点。 2. 计算每个数据点到k个中心点的距离。对于每个数据点,计算它与k个中心点的距离,并将其归为距离最近的中心点所在的簇。 3. 更新每个簇的中心点。对于每个簇,计算它包含的所有数据点的平均值,将该平均值作为新的中心点。 4. 重复步骤2和3,直到簇的中心点不再改变或达到最大迭代次数。 下面是Python实现k-means聚类算法伪代码: ``` # X为数据集,k为簇的数量 def k_means(X, k): # 初始化k个中心点 centers = random.sample(X, k) while True: # 计算每个数据点到k个中心点的距离 clusters = [[] for _ in range(k)] for x in X: distances = [distance(x, c) for c in centers] cluster_index = distances.index(min(distances)) clusters[cluster_index].append(x) # 更新每个簇的中心点 new_centers = [] for i in range(k): if clusters[i]: new_center = [sum(x) / len(clusters[i]) for x in zip(*clusters[i])] new_centers.append(new_center) else: new_centers.append(centers[i]) # 如果簇的中心点不再改变,则结束迭代 if new_centers == centers: break else: centers = new_centers return clusters ``` 其中,distance函数为计算两个数据点之间的欧几里得距离,zip(*clusters[i])为将簇中所有数据点的对应维度分别相加。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值