k均值算法——无监督学习以及地图点分类

k均值算法是无监督学习的第一章,看完以后认识到k近邻不算是无监督学习,而k均值算法是。主要目的是将待分类样本进行按簇的分类,簇与簇之间的差别尽量大,簇内的差别尽量小,每个簇的中心使用簇中所含值的均值计算而成。 本篇的内容是先简要介绍k均值聚类算法,然后介绍对聚类后得到的簇进行后处理,作为改进,简介二分k均值聚类算法,最后使用对地理位置进行聚类作为应用典例。 分类的原理依据簇识别,假定一些数据,现...
摘要由CSDN通过智能技术生成

k均值算法是无监督学习的第一章,看完以后认识到k近邻不算是无监督学习,而k均值算法是。主要目的是将待分类样本进行按簇的分类,簇与簇之间的差别尽量大,簇内的差别尽量小,每个簇的中心使用簇中所含值的均值计算而成。 本篇的内容是先简要介绍k均值聚类算法,然后介绍对聚类后得到的簇进行后处理,作为改进,简介二分k均值聚类算法,最后使用对地理位置进行聚类作为应用典例。
分类的原理依据簇识别,假定一些数据,现在将相似数据归到一起,簇识别会告诉我们这些簇是什么。聚类和分类的最大不同在于分类的目标事先已经确定,而聚类则是不一样,其类别并没有预先定义。聚类有时也被称为无监督分类,适用于数值型数据。

1.k均值聚类算法

k均值是发现数据k个簇的算法,簇的个数k是由用户给定的。.每一个簇通过其质心来描述。工作流程为:随机确定k个初始点作为质心。然后将数据集中的每个点分配到每一个簇中,为每一个簇找距离最近的质心,然后将簇的中心店更新为该簇所有点的平均值。
上述过程的伪代码描述如下:

创建k个点作为质心(随机选择的)
当任意一个点簇分配结果发生变化时
    对数据集中的每一个数据点
        对数据集中的每一个质心
            计算质心与数据点之间的距离
        将数据点分配到距其最近的簇
    对每一个簇计算所有点的均值并将其作为质心

测试算法,运用量化的误差指标如误差平方和来评价算法的结果。同时,计算出的簇质心可以代表整个簇的数据进行决策。
书中有程序用来支持k均值聚类算法,第一个函数是将文本文档导入到列表当中,第二个是计算两个向量之间的欧氏距离。第三个函数是构建簇质心的函数(随机分配)
对于k均值算法的计算流程为:该算法创造k个质心,价格每个点分配到距离最近的质心中,然后再重新计算质心。该过程重复数次,直到数据点的簇不会再改变为止。代码如下:

def kmeans(dataSet,k,distMeas=ditEclud,createCent=randCent)
    m=shape(dataSet)[0]
    clusterAssment=mat(zeros((m,2)))
    centroids=creatCent(dataSet,k)
    clusterChanged=True
    while clusterChanged:
        clusterChanged=Flase
        for i in range(m):
            minDist=inf;minIndex=-1
            for j in range(k):
                distJI=distMeas(centroids[j,:],dataSet[i,:])
                if distJI<minDist:
                    minDist=distJI;minIndex=j
            if clusterAssment[i,0]!=minIndex:clusterChanged=True
            clusterAssement[i,:]=minIndex,minDist**
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮助您实现这个问题。首先,让我们来了解一下k均值算法的基本思想。 k均值算法是一种常用的非监督学习算法,其目的是将一组数据划分为k个簇,使得同一簇内的数据相似度较高,不同簇之间的数据相似度较低。算法的基本思想是:随机选择k个数据作为簇的中心,然后将每个数据划分到最近的中心所在的簇中,再根据簇内的数据重新计算每个簇的中心,重复这个过程直到簇的中心不再变化或达到预设的最大迭代次数。 下面是一个使用Python实现k均值算法的示例代码: ```python import numpy as np def kmeans(X, k, max_iters=100): m, n = X.shape # 随机初始化k个簇的中心 centroids = X[np.random.choice(m, k, replace=False), :] # 初始化每个数据所属的簇的索引 idx = np.zeros(m) for i in range(max_iters): # 将每个数据分配到距离最近的簇中 for j in range(m): distances = np.sum((X[j, :] - centroids) ** 2, axis=1) idx[j] = np.argmin(distances) # 重新计算每个簇的中心 for j in range(k): centroids[j, :] = np.mean(X[idx == j, :], axis=0) return centroids, idx ``` 其中,X是一个m×n的矩阵,表示m个数据的n维特征向量;k是簇的数量;max_iters是最大迭代次数。 您可以将您的数据集X传递给这个函数,并指定k和max_iters参数,该函数将返回每个簇的中心和每个数据所属的簇的索引。 希望这可以帮助您完成您的任务!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值