python实现最大最小聚类(学习记录补发)

本文详细讲解了如何用Python实现最大最小聚类算法,涉及距离计算、聚类过程和示例代码应用。
摘要由CSDN通过智能技术生成

最大最小聚类函数代码实现

在这里插入代码片
import math
import random
def Euclidean_distance(list1,list2):
    distance=0.0
    for i in range(0,len(list1)):
        distance=distance+(list1[i]-list2[i])**2;
    return math.sqrt(distance)
def Maximum_and_minimum_clustering_algorithm(data,t):
    classfiy=[data[0]]
    del (data[0])
    #选取第二类聚类中心
    maxdistance=Euclidean_distance(classfiy[0],data[0])
    index=0
    for i in range(len(data)):
        distance=Euclidean_distance(data[i],classfiy[0])
        if maxdistance<distance:
            maxdistance = distance
            index=i
    classfiy.append(data[index])#将最远距离的作为第二个类别
    del (data[index])
    spay=t*maxdistance
    get_new_class(data, classfiy, spay)  # 得到所有的聚类中心
    #开始进行归并
    result = [[] for i in range(len(classfiy))]#用于存放结果
    for i in range(len(classfiy)):
        result[i].append(classfiy[i])
    for i in range(len(data)):
        index=0
        mindistance=Euclidean_distance(data[i],classfiy[0])
        for j in range(len(classfiy)):
            distance=Euclidean_distance(data[i],classfiy[j])
            if distance<mindistance:
                index=j
                mindistance=distance
        result[j].append(data[i])
    for i in range(len(result)):
        print("第"+str(i+1)+"类算法")
        print(result[i])
def get_new_class(data,classfiy,spay):
    if data:
        mindistancelist=[]#用于存放每个点距离聚类中心的最小值
        for i in range(len(data)):
            distancelist=[]
            for j in range(len(classfiy)):
                distance=Euclidean_distance(data[i],classfiy[j])
                distancelist.append(distance)
            distancelist.sort()
            mindistancelist.append(distancelist[0])
        maxdistance=mindistancelist[0]
        index=0
        for i in range(len(mindistancelist)):
            if maxdistance<mindistancelist[i]:
                maxdistance=mindistancelist[i]
                index=i
        if maxdistance>spay:
            classfiy.append(data[index])
            del (data[index])
            get_new_class(data,classfiy,spay)
if __name__ == '__main__':
    data = [[random.randint(1, 50) for j in range(0, 2)] for i in range(0, 100)]
    Maximum_and_minimum_clustering_algorithm(data,0.2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值