文章相似度与聚类(一种简单高效的算法)

简介: 算法思想:将文章映射到一个n维向量v[],将向量的值二值化为0或1 。用向量a和向量b表示两篇文章,a和b同时为1的位数记为 S1(对为1的位求交集),a和b至少一个为1的位数记为S2(对为1的位求并集).相似度即为S1/S2. 重点在于如何将文章用一个向量表示。

算法思想:将文章映射到一个n维向量v[],将向量的值二值化为0。用向量a和向量b表示两篇文章,ab同时为1的位数记为 S1(对为1的位求交集),ab至少一个为1的位数记为S2(对为1的位求并集).相似度即为S1/S2. 重点在于如何将文章用一个向量表示。

 

主要计算流程如下:

  
                            

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

为了便于存储,将448维的0-1向量用32个汉字表示。

Step1 构造汉明码的编码集

编码的字符集为2^14=16384个汉字,每个汉字代表0-16383中的1个数。

初始化编码集的算法如下:

 

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

 

Step2 将文章表示成向量

ik将文章分词然后对每个词求hash值,在用hash值对448取模,即可将每个词映射到448位数组中的一个元素,将映射到的那一个元素置为1

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

其中第170行是调用ik进行分词。

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

随机采样5000篇文章,1000个字平均会散列到448位中的200位左右。也就是说1000字左右的文章对应的448位向量会有大概200位非0

 

Step3 将向量转化为汉明码以便存储

 

4480-1数组映射到32个汉字表示的汉明码的算法如下

其中 codes[number]表示上一步得到的汉字字符集中第number个汉字。

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

Spark streaming会实时计算汉明码,并将汉明码保存到数据库,供后面查询的时候计算相似和聚类使用。

 

Step4 将汉明码解码为向量

 

计算相似先要将汉明码解码为向量。

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

其中第106行表示根据汉字字符获取到这个汉字代表的数值。

 

Step5 计算相似度

 

有了解码后的向量,就可以计算相似度了:

 

首先求两个向量非0位的交集,记为intersection.

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

 

然后求两个向量非0位的并集,记为union.

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

 

最后求得相似度:

文章相似度与聚类(一种简单高效的算法) - panjianping1991 - peter pan的博客

备注:本文写于2016年,发表在网易博客,因网易博客停止运营,将文章转移到云栖社区。

目录
相关文章
|
1月前
|
数据采集 机器学习/深度学习 算法
【优秀设计案例】基于K-Means聚类算法的球员数据聚类分析设计与实现
本文通过K-Means聚类算法对NBA球员数据进行聚类分析,旨在揭示球员间的相似性和差异性,为球队管理、战术决策和球员评估提供数据支持,并通过特征工程和结果可视化深入理解球员表现和潜力。
【优秀设计案例】基于K-Means聚类算法的球员数据聚类分析设计与实现
|
1月前
|
数据采集 算法 数据可视化
基于Python的k-means聚类分析算法的实现与应用,可以用在电商评论、招聘信息等各个领域的文本聚类及指标聚类,效果很好
本文介绍了基于Python实现的k-means聚类分析算法,并通过微博考研话题的数据清洗、聚类数量评估、聚类分析实现与结果可视化等步骤,展示了该算法在文本聚类领域的应用效果。
|
1月前
|
数据采集 资源调度 算法
【数据挖掘】十大算法之K-Means K均值聚类算法
K-Means聚类算法的基本介绍,包括算法步骤、损失函数、优缺点分析以及如何优化和改进算法的方法,还提到了几种改进的K-Means算法,如K-Means++和ISODATA算法。
78 4
|
1月前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】聚类算法中的距离度量有哪些及公式表示?
聚类算法中常用的距离度量方法及其数学表达式,包括欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等多种距离和相似度计算方式。
98 1
|
23天前
|
人工智能 算法 数据可视化
DBSCAN密度聚类算法(理论+图解+python代码)
DBSCAN密度聚类算法(理论+图解+python代码)
|
1月前
|
数据采集 算法 数据可视化
基于K-Means聚类算法对球员数据的聚类分析,可以自主寻找最优聚类数进行聚类
本文介绍了一个基于K-Means聚类算法的NBA球员数据分析项目,该项目通过采集和分析球员的得分、篮板、助攻等统计数据,使用轮廓系数法和拐点法确定最优聚类数,将球员分为不同群组,并提供了一个可视化界面以便直观比较不同群组的球员表现。
基于K-Means聚类算法对球员数据的聚类分析,可以自主寻找最优聚类数进行聚类
|
2月前
|
机器学习/深度学习 算法 数据挖掘
基于改进K-means的网络数据聚类算法matlab仿真
**摘要:** K-means聚类算法分析,利用MATLAB2022a进行实现。算法基于最小化误差平方和,优点在于简单快速,适合大数据集,但易受初始值影响。文中探讨了该依赖性并通过实验展示了随机初始值对结果的敏感性。针对传统算法的局限,提出改进版解决孤点影响和K值选择问题。代码中遍历不同K值,计算距离代价,寻找最优聚类数。最终应用改进后的K-means进行聚类分析。
|
1月前
|
算法 数据可视化 搜索推荐
基于python的k-means聚类分析算法,对文本、数据等进行聚类,有轮廓系数和手肘法检验
本文详细介绍了基于Python实现的k-means聚类分析算法,包括数据准备、预处理、标准化、聚类数目确定、聚类分析、降维可视化以及结果输出的完整流程,并应用该算法对文本数据进行聚类分析,展示了轮廓系数法和手肘法检验确定最佳聚类数目的方法。
|
1月前
|
数据采集 自然语言处理 数据可视化
基于Python的社交媒体评论数据挖掘,使用LDA主题分析、文本聚类算法、情感分析实现
本文介绍了基于Python的社交媒体评论数据挖掘方法,使用LDA主题分析、文本聚类算法和情感分析技术,对数据进行深入分析和可视化,以揭示文本数据中的潜在主题、模式和情感倾向。
|
2月前
|
机器学习/深度学习 数据采集 算法
Python实现DBSCAN膨胀聚类模型(DBSCAN算法)项目实战
Python实现DBSCAN膨胀聚类模型(DBSCAN算法)项目实战