几种聚类算法在IRIS数据集上的应用(python)

分解聚类、C均值聚类及其改进、ISODATA应用在IRIS数据集的表现


这个其实是之前的一次课程作业,要求是对鸢尾花数据集IRIS做聚类分析,课上讲了几种算法:系统,分解,c均值及其改进,ISODATA,这里分享一下自己的思路与代码。不过感觉提到聚类首先想到的是k均值、meanshift这些算法,可能课堂上讲的都是些最经典最基础的吧。原理方面不会讲太多,文中会给出核心代码。完整代码及数据集获取方式见文末。

IRIS数据集

引自百度百科。
Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。IRIS也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。

IRIS以鸢尾花的特征作为数据来源,常用在分类操作中。该数据集由3种不同类型的鸢尾花的各50个样本数据构成。其中的一个种类与另外两个种类是线性可分离的,后两个种类是非线性可分离的。
在这里插入图片描述
IRIS数据读取及简单处理:

# 读数据,构建列表[[],[],[]]
def loadIRISdata(filename):
    data=[]
    with open(filename,'r') as f:
        reader=csv.reader(f)
        result=list(reader)
        for i in range(1,151):
            data.append(list(map(float,result[i][1:5])))
    return data

但是要说一下哦,这个数据集还是太小了,150个样本勉强在统计学习方法中用一用,复杂算法的优势在更大的数据集上才能体现出优势。

分解聚类

核心思想: 这个比较简单,就是说先把所有的样本归为一类,然后根据相似性逐渐分解为多类。通过目标函数评价当前分类的质量。
在这里插入图片描述
在这里插入图片描述

核心代码:

# 分解聚类
def decomposition_clustering(data, assignments):
    Er_max = float('-inf')  # 每次最大的目标函数值
    while True:
        # 第一次,先分成两大类
        place = 0
        tag = 0
        # 每次循环 计算把 xi 归入 1 类时的 E
        for i in range(150):
            if assignments[i] == 0:  # xi 属于 0 类
                assignments[i] = 1   # 把 xi 先归到 1 类
                average_1 = avg(data, 0, assignments)
                if length(1, assignments) == 0: # 如果 1 类还是空的
                    average_2 = np.array([0, 0, 0, 0])
                else:
                    average_2 = avg(data, 1, assignments) # 计算完当前两类的均值,接下来算目标函数值
                Er = E(150, length(0, assignments), length(1, assignments), average_1, average_2)
                if Er > Er_max: # 记录当前最大的E和对应位置
                    place = i
                    Er_max = Er
                    tag 
  • 15
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值