常用聚类方法kmeans

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
k个簇中心,平均法重新计算各个簇中心,簇心几乎不移动。
在这里插入图片描述
输入:簇的数;数据集;
输出:k个簇
方法:从数据集中找出k个对象当作原始的簇心;

在这里插入图片描述
在这里插入图片描述

import numpy as np 
a=np.array([(3,4),(3,6),(7,3),(4,7),(3,8),(8,5),(4,5),(4,1),(7,4),(5,5)])
lines=""
for i in a:
    for j in a:
        dis=np.sqrt(np.sum((j-i)**2))
        lines += str(dis)+","
    lines+='\n'
file=open("result.csv",mode="w",encoding="utf-8")
file.write(lines)
file.close()

1,计算距离;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题1:

解答:本例结果一样

问题2:

解答:针对于,其它数据集,不同的簇中心结果可能不一样。

"""
随机取k个中心点
计算所有点到中心点到距离
将所有点放入中心点所在到簇
    更新中心点
        如果中心点不变,结束迭代
迭代
"""
import numpy as np 

#获取数据集
def loadDataSet(filename):
    return np.loadtxt(filename,delimiter=',',dtype=np.float)

#取k个中心点
def initCenters(dataset,k):
    """
    返回的k个中心点
    dataset:数据集
    k:中心点的个数
    return:
    """
    centersIndex=np.random.choice(len(dataset),k,replace=False)
    return dataset[centersIndex]

#计算距离
def distance(x,y):
    return np.sqrt(np.sum(x-y)**2)#kmeans的核心算法
def kmeans(dataset,k):
    """
    dataset:数据集
    k:中心点的个数
    return:k个簇
    """
    #初始化中心点
    # centers=initCenters(dataset,k)
    centers=np.array([[4,5],[5,5]],dtype=np.float)
    n,m=dataset.shape
    #用于存储每个样本属于哪个簇
    clusters=np.full(n,np.nan)
    #迭代
    flag=True
    while flag:
        flag=False
        #计算所有点到簇中心的距离
        for i in range(n):
            minDist,clustersIndex=99999999,0
            for j in range(len(centers)):
                dist=distance(dataset[i],center[j])
                if dist<minDist:
                    #为样本分簇
                    minDist=dist
                    clustersIndex=j
            if clusters[i]!=clustersIndex:
                clusters[i]=clustersIndex
                flag=True
        print(centers)
        print(clusters)
        #更新簇中心
        for i in range(k):
            subdataset=dataset[np.where(clusters==i)]   #得到下标
            centers[i]=np.mean(subdataset,axis=0)
    return clusters 


if __name__=='__main__':
    dataset=loadDataSet('data.txt')
    print(kmeans(dataset,2))

在这里插入图片描述在这里插入图片描述

聚类作用:

观察样本分布,数据预处理;

k-means算法

在这里插入图片描述
通常对于任何数据集k-means都不能达到全局最优,只能达到局部最优。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AppleYRY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值