应用R语言实现信息熵距离算法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

R语言实现46种距离算法

前言

距离算法是做数据挖掘常用的一类算法,距离算法有很多种,比如欧式距离、马氏距离、皮尔逊距离,距离算法主要应用在计算数据集之间关系。本文用R语言来philentropy包,实现多种距离的算法,很多可能是大家完全没有听过的,让我们在开拓一下知识领域吧。

目录

1. 距离算法包philentropy

2. 46种距离算法详解

3. 距离函数的使用

1.距离算法包philentropy

在做距离算法调研时,无意中发了philentropy包。它实现了46个不同距离算法和相似性度量,通过不同数据的相似度比较,为基础研究提供了科学基础。philentropy包,为聚类、分类、统计推断、拟合优度、非参数统计、信息理论和机器学习提供了核心的计算框架,支持基于单变量或者多变量的概率函数的计算。

philentropy包主要包括了2种度量的计算方法,距离度量和信息度量。本文介绍距离度量的使用,对于信息度量的使用,请参考文章R语言实现信息度量。

philentropy项目github地址:https:///HajkD/philentropy

本文的系统环境为:

•Win10 64bit

•R: 3.4.2 x86_64-w64-mingw32

安装philentropy包,非常简单,一条命令就可以了。

~ R

> install.packages("philentropy")

> library(philentropy)

查看距离算法列表

> getDistMethods()

[1] "euclidean" "manhattan" "minkowski" "chebyshev"

[5] "sorensen" "gower" "soergel" "kulczynski_d"

[9] "canberra" "lorentzian" "intersection" "non-intersection"

[13] "wavehedges" "czekanowski" "motyka" "kulczynski_s"

[17] "tanimoto" "ruzicka" "inner_product" "harmonic_mean"

[21] "cosine" "hassebrook" "jaccard" "dice"

[25] "fidelity" "bhattacharyya" "hellinger" "matusita"

[29] "squared_chord" "squared_euclidean" "pearson" "neyman"

[33] "squared_chi" "prob_symm" "divergence" "clark"

[37] "additive_symm" "kullback-leibler" "jeffreys" "k_divergence"

[41] "topsoe" "jensen-shannon" "jensen_difference" "taneja"

[45] "kumar-johnson" "avg"

46个距离算法,有一些是我们常用的比如:euclidean,manhattan,minkowski,pearson, cosine,squared_chi,其他的我也不知道,正好拓宽知识,好好学习一下。

philentropy包的函数,其实很简单,只有14个,大量的算法其实都已经被封装到distance()函数中,直接使用distance()函数就行完成各种算法的计算,让我们使用起来会非常方便。我们来看一下,函数列表:

•distance(): 计算距离

•getDistMethods(),获得距离算法列表

•dist.diversity(),概率密度函数之间的距离差异

•estimate.probability(),从计数向量估计概率向量

•lin.cor(),线性相关性判断

•H(): 香农熵, Shannon’s Entropy H(X)

•JE() : 联合熵, Joint-Entropy H(X,Y)

•CE() : 条件熵, Conditional-Entropy H(X|Y)

•MI() : 互信息, Shannon’s Mutual Information I(X,Y)

•KL() : KL散度, Kullback–Leibler Divergence

•JSD() : JS散度,Jensen-Shannon Divergence

•gJSD() : 通用JS散度,Generalized Jensen-Shannon Divergence

•binned.kernel.est(),实现了KernSmooth包提供的核密度估计函数的接口

从函数列表来看,主要分为3种类别的函数,第一类是距离测量的函数,包括distance(),

getDistMethods(), dist.diversity(), lin.cor()和estimate.probability()。第二类是相关性分析,包括lin.cor()函数。第三类是信息度量函数H(),JE(),CE(),MI(),KL(),JSD(),gJSD()。信息度量函数的使用,请参考文章R语言实现信息度量。

2. 46种算法详解

接下来,就让我们深入每个算法吧,从名字到公式,再到函数使用,最后到使用场景。

距离算法列表:

•euclidean:欧式距离,是一个通常采用的距离定义,在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。

•manhattan:曼哈顿距离,用于几何空间度量,表示两个点在标准坐标系上的绝对轴距距离总和。

•minkowski:闵可夫斯基距离,是欧氏空间中的广义距离函数,其参数p值的不同代表着对空间不同的度量。•chebyshev:切比雪夫距离,是向量空间中的一种度量,二个点之间的距离定义是其各坐标数值差绝对值的最大值。•sorensen:测量每个样本单位,对单位总数的距离测量贡献度,广告用于生态学。

•gower:高尔距离,将向量空间缩放为规范化空间,可计算逻辑值,数字,文本的距离,距离结果为0到1之间的数字。•soergel:测量每个样本单位,对最大值总数的距离测量贡献度。

•kulczynski:与soergel相反,测量每个样本单位,对最小值总数的距离测量贡献度。

•canberra:堪培拉距离,是矢量空间中的点对之间的距离的数值度量,它是L_1距离的加权版本。

•lorentzian:洛伦兹距离,绝对的差异并应用自然对数。

•intersection:交叉距离,最小轨道交叉距离,是天文学中用于评估天文物体之间潜在的近距离接近和碰撞风险的度量。

它被定义为两个物体的密切轨道的最近点之间的距离。

•non-intersection:非交叉距离

•wavehedges:波浪距离,

•czekanowski:

•motyka:莫蒂卡方程,是czekanowski的一半。

相关文档
最新文档