层次狄利克雷过程HDP(Hierarchical Dirichlet Processes)

HDP本质是一个聚类算法,自动决定聚类的个数。

HDP-HMM也是一个聚类算法,自动决定HMM的隐状态的个数,以每个隐状态作为一个聚类。

LDA是主题模型,可以被用作聚类算法。

HDP也是个主题模型。

The HDP  is an unsupervised non-parametric hierarchical Bayesian topic model and was
originally proposed for word-document analysis. It clusters the frequently co-occurring words
within the same documents into the same topics. Furthermore, different from the other clustering
topic models, such as LDA , HDP is able to automatically determine the number of clusters。

[1] M. Y. Yang, W. Liao, Y. Cao, and B. Rosenhahn, “Video event recognition and anomaly detection by combining gaussian process and hierarchical Dirichlet process models,” Photogramm. Eng. Remote Sensing, vol. 84, no. 4, pp. 203–214, 2018.


以下转自:https://blog.csdn.net/weixin_43166819/article/details/103595700


参考:【博客】、【博客】、【博客

适合做数据的聚类,每个进餐厅的人选择一张桌子就坐,每个桌子有第一个人点一道菜以后所有这张桌子上的人共同享用,数据也是类似,对每个数据进入系统,选择一个新话题或者加入一个旧话题得概率表示。
参考论文:【分层 Dirichlet 过程及其应用综述】
DP解决一组数据的聚类,HDP分层DP解决多组数据得聚类问题。


以下转自:https://blog.csdn.net/caoeryingzi/article/details/5967093

该博客的博主据说是《分层Dirichlet过程及其应用综述》的作者。

既然我坚持了那么久,看懂了,把我博士工作耽误的其实也不少,也不算耽误,主要是基础差,这个算法又麻烦,所以一直看到现在也没出成果。我想如果当时有人能够指导我,告诉我这个很难,需要专业的理论背景等知识,我可能不会继续下去。而如果有人一起学习讨论,可能现在也会好多了。但是,这些都是假设,不是吗?

但是,既然做了,实现了,就还是要继续关注下去。

首先,HDP模型,不是万能的,但是至少目前在我看来是非常灵活的一个模型。从HDP延伸出来的模型,最著名的就是随着HDP引入作者介绍的HDP-HMM模型。这说明了,HDP不仅仅可以作为一个模型算法,而且还可以作为别的模型的先验分布而存在,这是HDP最有魅力的地方,我觉得。

我们知道,由于HDP模型可以生成聚类数目,因此,用到HMM上,HMM的聚类数目就可以不用人为输入了。

HDP模型的开始是用在文本处理中的,但是现在在图像视频处理中,应用尤其广泛。

在模型中,有几个特点,当然包括缺点。首先计算量太大,即使是变分解也需要很大的计算量。但是,HDP模型很美,再者能够生成聚类数目和完成数据建模,比较方便用于推断和预测等工作。

个人总结:HDP是聚类算法,自动决定聚类的个数。HMM是一个序列贝叶斯模型,需要指定状态的个数。HDP-HMM把二者结合,使HMM自动决定状态个数。
 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于层次狄利克过程HDP)是一种比较复杂的模型,其实现也比较困难,需要结合一些高级的数学和概率知识。下面是一个简单的示例代码,实现了一个二项分布的HDP模型: ```python import numpy as np from scipy.stats import beta, binom class HDP: def __init__(self, alpha, gamma, a, b): self.alpha = alpha self.gamma = gamma self.a = a self.b = b self.table_assignments = [] self.table_counts = [] self.customers = [] def fit(self, data, iterations): def sample_table(alpha, table_counts): prob = np.append(table_counts, alpha) prob /= np.sum(prob) return np.random.choice(range(len(prob)), p=prob) def sample_beta(a, b, table_counts): return beta.rvs(a + table_counts[0], b + np.sum(table_counts[1:])) def sample_assignments(data, table_assignments, table_counts, customers, alpha, gamma, a, b): for i, x in enumerate(data): k = len(customers) table = sample_table(alpha, table_counts) if table == k: beta = sample_beta(a, b, table_counts) new_table_counts = [binom.rvs(x, beta), x - binom.rvs(x, beta)] table_counts.append(new_table_counts) customers.append([i]) else: table_counts[table][0] += binom.rvs(x, customers[table][0]) # 更新表格计数 table_counts[table][1] += x - binom.rvs(x, customers[table][0]) customers[table].append(i) table_assignments[i] = table empty_tables = [i for i in range(len(table_counts)) if table_counts[i][0] == 0] for table in empty_tables: table_counts.pop(table) customers.pop(table) for i in range(len(table_assignments)): if table_assignments[i] > table: table_assignments[i] -= 1 return table_assignments, table_counts, customers self.table_assignments = np.zeros(len(data), dtype=int) self.table_counts = [[binom.rvs(data[0], beta.rvs(self.a, self.b)), data[0] - binom.rvs(data[0], beta.rvs(self.a, self.b))]] self.customers = [[0]] for i in range(1, len(data)): self.table_assignments[i] = len(self.customers) self.table_counts[-1][0] += binom.rvs(data[i], beta.rvs(self.a, self.b)) self.table_counts[-1][1] += data[i] - binom.rvs(data[i], beta.rvs(self.a, self.b)) self.customers[-1].append(i) for iter in range(iterations): self.table_assignments, self.table_counts, self.customers = sample_assignments(data, self.table_assignments, self.table_counts, self.customers, self.alpha, self.gamma, self.a, self.b) ``` 这个示例代码只实现了HDP的一部分,不过可以作为一个入门的参考。HDP是非常强大的模型,可以用于很多实际问题,比如文本分类、聚类分析等等。如果需要更深入的了解HDP,建议阅读相关的论文和书籍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值