数据分析进阶 - 霍普金斯统计量预估聚类趋势

news/2024/7/5 3:09:25
霍普金斯统计量原理

在给数据集做聚类之前,我们需要事先评估数据集的聚类趋势,要求数据是非均匀分布,均匀分布的数据集没有聚类的意义。

霍普金斯统计量是一种空间统计量,用于检验空间分布的变量的空间随机性,从而判断数据是否可以聚类。

计算步骤:

  • 均匀地从D的空间中抽取n个点p1,p2,…pn,对每个点pi(1≤i≤n),找出pi在D中的最近邻,并令xi为pi与它在D中的最近邻之间的距离,即
    在这里插入图片描述

  • 均匀地从D的空间中抽取n个点q1,q2,…qn,对每个点qi(1≤i≤n),找出qi在D-{qi}中的最近邻,并令yi为qi与它在D-{qi}中的最近邻之间的距离,即
    在这里插入图片描述

  • 计算霍普金斯统计量H
    在这里插入图片描述

如果样本接近随机分布,H的值接近于0.5;如果聚类趋势明显,则随机生成的样本点距离应该远大于实际样本点的距离,即H的值接近于1
在这里插入图片描述
具体可见:https://www.datanovia.com/en/lessons/assessing-clustering-tendency/#statistical-methods

Python实现
from sklearn.neighbors import NearestNeighbors
from random import sample
import numpy as np
import pandas as pd
from numpy.random imort uniform

def hopkins_statistic(x):
	d = x.shape[1]
	n = len(x)
	m = int(0.1*n)
	nbrs = NearestNeighbors(n_neighbors=1).fit(x.values)
	rand_x = sample(range(0,n),m)
	ujd = []
	wjd = []
	for j in range(0,m):
		u_dist, _ = nbrs.kneighbors(uniform(np.min(x,axis=0), np.max(x, axis=0), d).reshape(1,-1), 2 , return_distince=True)
		ujd.append(u_dist[0][1])
		w_dist, _ = nbrs.kneighbors(x.iloc[rand_x[j]].values.reshape(1, -1), 2, return_distince=True)
		wjd.append(w_dist[0][1])
	h = sum(ujd)/(sum(ujd)+sum(wjd))
	if isnan(h):
		print(ujd, wjd)
		h = 0
	return h

http://www.niftyadmin.cn/n/4411294.html

相关文章

数据分析进阶 - 相关分析(皮尔逊相关系数)

相关分析 相关分析是研究两个或两个以上处于同等地位的随机变量间的相关关系的统计分析方法。通过对不同特征或数据间的关系进行分析,发现其中关键影响及驱动因素。在实际的工作应用中,常常用于特征的发现与选择。针对不同数据类型的变量,需…

数据分析进阶 - 相关分析(卡方检验)

前言 上一篇博客是相关分析中的皮尔逊相关系数,具体可见链接:https://blog.csdn.net/Totoro1745/article/details/114748542?spm1001.2014.3001.5502 卡方检验 皮尔逊相关系数用于两个连续性变量,当变量为两个无序分类变量时就需要用卡方…

数据分析进阶 - 基于聚类的用户标签构建

前言 在用户画像标签体系建设的过程中,大部分标签都是以规则映射的方式构建,当规则难以梳理时,可以考虑用聚类模型进行划分,再用决策树的方式输出规则,这里仅简单分享,欢迎交流~ 示例 确定目的 对用户消…

数据分析进阶-基于tslearn的单变量时间序列聚类

前言 最近受一篇2015年文章《时间序列用户生命周期的聚类方法》的启发,阅读了很多时间序列聚类相关的方法,用消费行为的时间序列尝试去对用户行为进行分群,虽然现阶段的效果不如预期,就当总结希望后续能有所交流~ 基于日消费总额的时间序列聚类 为了更好地保留用户消费行…

数据分析进阶-基于tsfresh的多变量时间序列聚类

前言 上一篇博客主要尝试了基于tslearn的单变量时间序列聚类,多变量时间序列的方法经过一番搜索也没有找到合适的方式,因此考虑借助强大的时间序列特征提取工具tsfresh与KMeans尝试多变量时间序列的聚类实验 基于日消费总额+日消费次数的时间序列聚类 一、tsfresh tsfres…

数据分析进阶-cx_Oracle的简单使用

本示例使用pandascx_Oracle完成数据的读取和插入,一开始是想尝试pd.to_sql方法,但是需要借助sqlalchemy,因此本示例单纯使用cx_Oracle import pandas as pd import cx_Oracle as cxconn cx.connect(user_name/passwordhostname:port/servic…

数据分析进阶-Excel绘制分段折线图

前言 今天1024程序员节,虽然好像和我没有特别强的关系,写篇博客蹭个勋章吧~ Excel绘制分段折线图 1、如何凸显折线图中的重点片段 (1)首先将需要重点表示的数值提取出来放置新的一行数据中,如图所示,此…

Windows-设置Python定时任务

定时弹窗提醒 环境: win8Python3.8 代码: import tkinter.messagebox tkinter.messagebox.showwarning(警告,该喝水了)设置定时任务: 1、打开任务计划程序-创建任务 2、填写任务信息 3、报错指南 可查看任务计划程序库中的上次运行结果…