加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python-2.7 – 使用jaccard相似性聚类分类数据

发布时间:2020-12-20 11:42:50 所属栏目:Python 来源:网络整理
导读:我正在尝试为分类数据构建聚类算法. 我已经阅读了不同的算法,如k-modes,ROCK,LIMBO,但是我想建立一个我的,并比较其他人的准确性和成本. 我有(m)训练集和(n = 22)特征 途径 我的方法很简单: 步骤1:我计算形成(m * m)相似度矩阵的每个训练数据之间的jaccard
我正在尝试为分类数据构建聚类算法.

我已经阅读了不同的算法,如k-modes,ROCK,LIMBO,但是我想建立一个我的,并比较其他人的准确性和成本.

我有(m)训练集和(n = 22)特征

途径

我的方法很简单:

>步骤1:我计算形成(m * m)相似度矩阵的每个训练数据之间的jaccard相似度.
>步骤2:然后我执行一些操作以找到最佳质心,并使用简单的k-means方法找到聚类.

在执行k均值算法时将使用在步骤1中创建的相似性矩阵

矩阵创建:

total_columns=22
for i in range(0,data_set):
    for j in range(0,data_set):
        if j>=i:
            # Calculating jaccard similarity between two data rows i and j 
            for column in data_set.columns:    
                if data_orig[column][j]==data_new[column][i]:
                    common_count=common_count+1
            probability=common_count/float(total_columns)    
            fnl_matrix[i][j] =probability  
            fnl_matrix[j][i] =probability

我的fnl_matrix(6行)的部分快照如下:

问题陈述:

我面临的问题是,当我创建(m * m)矩阵时,对于更大的数据集,我的表现就是折腾.即使对于具有8000行的较小数据集,相似性矩阵的创建也需要无法忍受的时间.有什么方法可以调整我的代码或对矩阵做一些具有成本效益的事情.

解决方法

解释的Python代码很慢.真的很慢.

这就是为什么好的python工具包包含大量的Cython代码甚至是C和Fortran代码(例如numpy中的矩阵运算),并且只使用Python来驱动整个过程.

如果您尝试尽可能多地使用numpy,则可能会大大加快代码速度.或者如果您使用Cython而不是.

考虑使用基于距离的聚类算法,而不是与质心作斗争:

>分层凝聚聚类(HAC),它需要距离矩阵> DBSCAN,可以任意距离工作.它甚至不需要距离矩阵,只需要某个阈值的类似项目列表.> K-medoids / PAM当然也值得一试;但通常不是很快.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读