python-2.7 – 使用jaccard相似性聚类分类数据
我正在尝试为分类数据构建聚类算法.
我已经阅读了不同的算法,如k-modes,ROCK,LIMBO,但是我想建立一个我的,并比较其他人的准确性和成本. 我有(m)训练集和(n = 22)特征 途径 我的方法很简单: >步骤1:我计算形成(m * m)相似度矩阵的每个训练数据之间的jaccard相似度. 在执行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当然也值得一试;但通常不是很快. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |