Hopkins Statistic判断irir数据集聚类性能

应用霍普金斯统计量(Hopkins Statistic) 可以判断数据在空间上的随机性,从而判断数据是否可以聚类。
1.算法原理:
首先,从所有样本中随机找n个点,然后为每一个点在样本空间中找到一个离他最近的点,并计算它们之间的距离xi,从而得到距离向量x1,x2,…,xn;
然后,从样本的可能取值范围内随机生成n个点,对每一个随机生产的点,找到一个离它最近的样本点,并计算它们之间的距离,得到y1,y2,…,yn。霍普金斯统计量H可以表示为:

如果样本接近随机分布,那么的取值会比较接近,即H的值接近于0.5;如果聚类趋势明显,则随机生成的样本点距离应该远大于实际样本点的距离,即 ,H的值接近于1.
因此使用Hopkins Statistic可以帮助我们评价该样本数据是否可以聚类,下面引入一个实例进行验证:
因此使用Hopkins Statistic可以帮助我们评价该样本数据是否可以聚类,下面引入一个实例进行验证:
2.IDLE:Jupyter Notebook
3.API:


4.霍普金斯统计数据的Python实现:

5.iris聚类可视化及霍普金斯统计量输出
在构建好霍普金斯统计量后选取数据进行验证,这里使用iris鸢尾花数据,众所周知,该数据集有150条数据,4个特征,3个目标值,我们首先使用PCA进行可视化显示:

通过可视化可以看到iris数据集分为三个目标值,该数据样本可以聚类,然后我们计算一下该数据集的霍普金斯统计量:
首先划分数据集:

下面输出iris数据集的霍普金斯统计量:

结果:
0.8706630933483493
0.8348276777799107

结果介于{0.7,…,0.99},因此有很高的聚集趋势。
6.随机矩阵霍普金斯统计量输出
同样,我们随机建立一个矩阵进行验证另一种情况:

结果如下:
0.5400050841597741
0.46500929146831366
该值接近于0.5,说明没有聚类趋势。
7.结论:
如果Hopkins Statistic在0.5左右,则是随机的
如果Hopkins Statistic介于{0.7,…,0.99},则有很高的聚集趋势。

附原码:

import numpy as np
from sklearn.neighbors import NearestNeighbors
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from random import sample
from numpy.random import uniform# 霍普金斯统计数据处理DataFrame的函数
def hopkins_statistic(X):X=X.values  #将dataframe转换为矩阵sample_size = int(X.shape[0]*0.05) #0.05 (5%) based on paper by Lawson and Jures#原始数据空间的均匀随机样本X_uniform_random_sample = uniform(X.min(axis=0), X.max(axis=0) ,(sample_size , X.shape[1]))#从原始数据中随机抽取一个样本random_indices=sample(range(0, X.shape[0], 1), sample_size)X_sample = X[random_indices]#初始化无监督学习器以实现NN搜索neigh = NearestNeighbors(n_neighbors=2)nbrs=neigh.fit(X)#u_distances = 均匀随机样本的最近邻距离u_distances , u_indices = nbrs.kneighbors(X_uniform_random_sample , n_neighbors=2)u_distances = u_distances[: , 0] #到第一个最近邻居的距离#w_distances = 来自原始数据X的点样本的最近邻距离w_distances , w_indices = nbrs.kneighbors(X_sample , n_neighbors=2)#到第二个最近邻居的距离(因为第一个邻居将是点本身,距离= 0)w_distances = w_distances[: , 1]u_sum = np.sum(u_distances)w_sum = np.sum(w_distances)#计算并返回霍普金斯统计数据H = u_sum/ (u_sum + w_sum)
return H
#读取鸢尾花数据
data=pd.read_csv('E://iris.data')
#data = data.drop(labels="Unnamed: 0",axis=1)
data.columns=['sepal length' , 'sepal width' , 'petal length', 'petal width', 'Class'] #命名列
X=data[['sepal length' , 'sepal width' , 'petal length', 'petal width']] #特征属性
y=data['Class'] #目标属性
# 输出iris数据集的霍普金斯统计量
H=hopkins_statistic(X)
print(H)
#跑100次求平均值
l = []
for i in range(100):H=hopkins_statistic(X)l.append(H)print(np.mean(l))
#输出随机矩阵霍普金斯统计量
np.random.random_sample([100,4])
array = pd.DataFrame(array)
H=hopkins_statistic(array)
print(H)
l = []
for i in range(3):H=hopkins_statistic(array)l.append(H)
print(np.mean(l))

Hopkins Statistic判断irir数据集聚类性能相关推荐

  1. python 聚类_使用python+sklearn实现聚类性能评估中随机分配对聚类度量值的影响

    注意:单击此处https://urlify.cn/3iAzUr下载完整的示例代码,或通过Binder在浏览器中运行此示例 下图说明了聚类数量和样本数量对各种聚类性能评估度量指标的影响.未调整的度量指标 ...

  2. 对于大批量赋值功能,使用if判断是否能提高性能

    场景: 如果对某变量进行赋值,是否需要判断一下,如果相等就不用赋值,这样会不会提高性能. 代码如下: 1 string a = "1234567890"; 2 string b = ...

  3. 聚类总结(二)聚类性能评估、肘部法则、轮廓系数

    文章目录 一.聚类K的选择规则 1.1 肘部法则–Elbow Method 1.2 轮廓系数–Silhouette Coefficient 二.聚类性能评估 2.1 外部评估(external eva ...

  4. Kmeans聚类:啤酒数据集聚类

    今日分享:啤酒数据集聚类 一:流程 1.利用pandas库读取数据集文件,加载数据,选取目标数据用于训练 2.使用kmeans模型进行聚类训练 3.使用matpotlib库以可视化的方式来展示聚类效果 ...

  5. kmeans对自己的图像数据集聚类(及肘部法求最佳K值)

    pytorch实现kmeans(自己的图像数据集) 上篇笔记已经介绍了,如何加载自己的图像数据集.(加载数据集: https://blog.csdn.net/hnu_zzt/article/detai ...

  6. python鸢尾花数据集聚类_R语言鸢尾花iris数据集的层次聚类分析

    介绍 本文在数据集上展示了如何使用dendextend R软件包来增强Hierarchical Cluster Analysis(更好的可视化和灵敏度分析). 背景 鸢尾花数据集 我们可以看到,Set ...

  7. 聚类性能度量指标及距离计算

    Python实现KMeans算法 1.外部指标 将聚类结果与某个"参考模型进行比较" 每次抽出两个样本,讨论所属聚类结果和参考模型,确定四个值: a:聚类结果同属于一类,参考模型同 ...

  8. Intel CPU型号解读以及如何粗略判断Intel CPU的性能(i3、i5、i7以及CPU的代数)

    1. 简要解读Intel CPU的型号 1.1 Intel对于CPU的命名规则 Intel生产的CPU分为高中低端,最低端的G系列,然后是低端i3系列,中端i5系列,高端i7系列和至尊i9系列. 注意 ...

  9. 【sklearn练习】KMeans ---- Seeds(小麦种子)数据集聚类评估

    文章目录 一.数据集探索 二.数据预处理 三.构建模型获取结果 四.聚类结果可视化 五.聚类模型评估 ① 轮廓系数 ② 卡林斯基 - 哈拉巴斯指数 ③ FMI评价法 一.数据集探索 Seeds 数据集 ...

  10. 最新最全-中文生物医学命名实体识别最新研究论文、资源、数据集、性能整理分享

    本资源旨在跟踪中文生物医学自然语言处理的进展,收集整理相关的论文列表和展示现存方法性能. 内容整理自网络,源地址:https://github.com/lingluodlut/Chinese-BioN ...

最新文章

  1. mysql-sql优化--笔记
  2. [转]如何切换多个GitHub账号
  3. html如何将多个复选框组织成一组_[Selenium]18.如何处理一组元素
  4. Java LocalDate类| getChronology()方法与示例
  5. linux挂接u盘视频,LINUX挂接U盘
  6. 计算机系给未来的自己写信,写信给未来的自己
  7. 今天带你详细了解各组件原理
  8. 优化Linux的内核参数来提高服务器并发处理能力
  9. SQL Server性能调优:资源管理之内存管理篇(上)
  10. 机器学习实践笔记(一)KNN
  11. 一个学习PCI Express的 不错去处
  12. 用c#实现简单的登录和注册功能
  13. Android 改变View的中心点
  14. html+css制作月亮
  15. 网页导出pdf不完整_网页文本无法复制?学会这3个套路,一分钟帮你突破限制...
  16. http服务器常见状态码
  17. linux之ps命令--进程快照
  18. Angular Material 图标素材网址与使用
  19. 视差图转为深度图_纽劢研习社 | 深度图的非深度讲解
  20. 基于51单片机SJA1000 CAN通讯实现(C语言程序)

热门文章

  1. Convex optimization 1 --- convex set
  2. android标题栏 状态栏,android设置无标题栏 、 状态栏
  3. 知乎8.5k赞的回答:自学编程需要注意什么?
  4. Mysql优化-02
  5. P1116 车厢重组
  6. html验证座机号码_手机号码 座机号码验证
  7. dell计算机的硬盘如何分区,戴尔电脑分盘怎么分区
  8. <C++>文件操作基础详解,快来写出你的第一个文件吧
  9. 自然语言处理(NLP):08 PyTorch深度学习之LSTM微博评论情感分析
  10. notification 发送通知后顶栏的小图标不对,为纯白色而不是设置的smallIcon 的原因