python3求皮尔逊相关系数,python 斯皮尔曼相关系数_3

  python3求皮尔逊相关系数,python 斯皮尔曼相关系数

  在对数据应用任何聚类算法之前,一个重要的问题是,即使数据不包含任何聚类,聚类方法也会返回到聚类。换句话说,如果对数据集盲目应用聚类算法,也会把数据分成簇,因为这是它应该做的。

  因此,有时需要评估数据集是否包含有意义的聚类(即非随机结构)。

  该过程被定义为聚类趋势的评估聚类可行性的分析

  通常,与非随机结构相比,它是均匀分布的。霍普金斯统计的计算原理是检查数据是否符合均匀分布。

  霍普金斯统计量介绍

  霍普金斯统计用于通过测量给定数据集由统一数据分布生成的概率来评估数据集的聚类趋势。换句话说,它测试数据的空间随机性。

  如何解释霍普金斯统计量H?

  如果数据点在空间上均匀分布,h约为0.5;

  如果数据集中存在聚类,h将接近1;

  当h高于0.75时,说明在90%的置信水平下,数据集中存在聚类趋势。

  我们可以重复霍普金斯统计检验,使用0.5作为阈值来拒绝数据集中的聚类趋势。

  也就是说,如果H 0.5,数据集中不太可能存在具有统计显著性的聚类。

  换句话说,如果霍普金斯统计量接近1,那么我们可以得出结论,这个数据集显然是可聚类的数据。

  以下是霍普金斯统计数据的Python实现:

  从numpy导入panda作为PD。随机进口制服,正常从scipy。空间感。距离导入cdist # n维Hopkins统计量计算,输入:数据帧类型的二维数据,输出:float Hopkins统计量#数据集中默认的采样比是0.3 def Hopkins _ statistics(data:PD . data frame,Sampling _ ratio:float=0.3)-float:#如果采样比超过0.1到0.5,用end值替换Sampling _ ratio=min(max(Sampling _ ratio,0.1), 0.5) #样本数n _ samples=int(data . shape[0]* sampling _ ratio)#样本数据sample _ data=data . Sample(n _ samples)#原始数据采样后的剩余数据data . drop(index=Sample _ data . index)#,inplace=true) #从原始数据中提取的样本与最近邻data_dist=cdist(data,Sample _ data)的距离之和。 最小值(轴=0)。sum () #人工生成的样本点,从平均分布中采样(人工生成的样本)AGS _数据=PD . data frame({ col:uniform(data[col])。min(),data [col].max(),N_samples)\ for col in data}) #人工样本与最近邻的距离之和AGS _距离=cdist(数据,AGS _数据)。最小值(轴=0)。sum()# Calculate Hopkins statistics h h _ value=AGS _距离/(数据_距离标记_距离)返回

  下面是一个例子,说明霍普金斯统计如何判断聚类趋势:

  从numpy导入panda作为PD。随机进口制服,正常从scipy。空间感。距离导入cdist # Hopkins统计量计算,输入:数据帧类型的二维数据,输出:float Hopkins统计量#数据集中默认的采样比是0.3 def Hopkins _ statistics(data:PD . data frame,Sampling _ ratio:float=0.3)-float:#如果采样比超过0.1到0.5,用end值替换Sampling _ ratio=min(max(Sampling _ ratio,0.1), 0.5) #样本数n _ samples=int(data . shape[0]* sampling _ ratio)#样本数据sample _ data=data . Sample(n _ samples)#原始数据采样后的剩余数据data . drop(index=Sample _ data . index)#,inplace=true) #从原始数据中提取的样本与最近邻data_dist=cdist(data,Sample _ data)的距离之和。 最小值(轴=0)。sum () #人工生成的样本点,从平均分布中采样(人工生成的样本)AGS _数据=PD . data frame({ col:uniform(data[col])。min(),data [col].max(),N_samples)\ for col in data}) #人工样本与最近邻的距离之和ags_dist=cdist(data,Ags_data)。最小值(轴=0)。sum()# Calculate Hopkins statistics h h _ value=AGS _ dist/(data _ distags _ dist)return h _ value #生成数据集data=pd。DataFrame(uniform(0,10,(50000,10))print(Hopkins _ statistics(data))#生成一个数据集data=PD . data frame(normal(size=(50000,10)))print(Hopkins _ statistics(data))#生成一个数据集data=pd.dataframe (normal (loc=6,size=(25000,10))。append(PD . data frame(normal(size=(25000,10))、ignore _ index=true)print(Hopkins _ statistics(data))代码运行结果:

  #符合均匀分布的数据集0.500266809427586 #符合正态分布的数据集0.76466666625 832939 #由两种不同的正态分布组成的数据集。46666.7666767667

  最后,为什么霍普金斯统计量被使用和提及得不多呢?

  一方面,Python是数据科学的流行语言,没有现成的实现,不便于使用

  另一方面,基于这个霍普金斯统计的定义,计算代价比较大,计算速度不快,相比起直接聚类然后再判断是否有好的聚类效果,这种方式在时间上可能没有明显的节省

  但即使很少用到,至少也要有可用的代码实现,还有重要的是,霍普金斯统计量对于聚类趋势的判断比起其他方法更为科学和准确

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: