python手写聚类算法:Kmeans&DBscan算法

python手写聚类算法:Kmeans&DBscan

算法思路以及步骤介绍

首先,我们分别介绍一下Kmeans算法以及DBSCAN算法。

Kmeans算法步骤:首先先随机的选择K个点(这里的K是超参数),这K个点作为中心点,对于剩下的所有的点,计算剩下的点和这三个点的距离,距离中最小的,认为属于这个类。在更新完一遍之后,计算类中的均值向量作为新的中心,再次重复上面的步骤,直到类的中心不变。主要的思路就是:每一类一定有一个中心,这个类中的对象一定离自己所属的类的中心最近,在和所有的中心的距离中。

DBSCAN的思路是通过定义了核心对象和密度直达来进行聚类(优点像感染式的聚类),其中核心对象指的是,此对象的较近的距离内有足够多的样本的点,这个距离和点的个数都是我们来决定的。这个域里面的对象都叫做密度直达的点,对于这些点,如果也是一个核心对象的话,就把它们的领域也加入到这个类里面,以此类推,直到所有的核心对象都已经考虑过了,停止算法。主要的思路就是,如果我们是一类,我们一定离的比较足够近,而如果你和其他的一个足够近,那么说明可能大家都是一类。

手写代码

Kmeans

# 输入没有标签的点
# 返回分类的情况(类别及对应的样本)
# 实现输入新的点,可以完成对于点类别的预测
class Kmeans:
    def __init__(self):
        pass

    def distance(self, Xi):
        import numpy as np
        dist = []
        for k in self.centroid:  # 对模型里面所有的样本进行遍历
            dist.append(np.linalg.norm(k - Xi, ord=self.p))
        dist0 = list(enumerate(dist))
        near = sorted(dist0, key=lambda x: x[1])[0][0]
        return near

    def predict(self, Xi):
        import numpy as np
        num = Xi.shape[0]
        dist = []
        for i 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值