基于K-means的动态主题模型话题分类

卡内基梅隆大学(CMU),那些经受住时间考验的机器学习论文–第二弹:动态主题模型 这次,我们要解释一种典型的机器学习算法——动态主题模型(Dynamic Topic Model)。 概率主题模型和概率图模型是每个做文本挖掘的学者的必学课题。其中最常见的主题模型是隐含狄利克雷分布(LDA)。当然,本文的动态主题模型也是主题模型的一种,不过为了方便理解,我们还是来回顾一下LDA。 来自:https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation 我们定义: α 是狄利克雷先验的参数,是每个文档可能的主题分布。 .. 阅读详情

 


from numpy import array, zeros, argmin, inf, ndim
import scipy.stats
import time
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import euclidean_distances


def dtw(x, y, warp=1):
    assert len(x)
    assert len(y)
    r, c = len(x), len(y)
    D0 = zeros((r + 1, c + 1))
    D0[0, 1:] = inf
    D0[1:, 0] = inf
    D1 = D0[1:, 1:]  # view
    for i in range(r):
        for j in range(c):
            D1[i, j] = euclidean_distances([x[i]], [y[j]])
    C = D1.copy()
    for i in range(r):
        for j in range(c):
            min_list = [D0[i, j]]
            for k in range(1, warp + 1):
                i_k = min(i + k, r - 1)
                j_k = min(j + k, c - 1)
                min_list += [D0[i_k, j], D0[i, j_k]]
            D1[i, j] += min(min_list)

    return D1[-1, -1] / sum(D1.shape)


# 加载数据
def loadDataSet(fileName):
    data = np.loadtxt(fileName, delimiter=",", skiprows=1)
    return data


def saveDataSet(fileNmae, dataSet):
    np.savetxt(fileNmae, dataSet, delimiter=',')


# 为给定数据集构建一个包含K个随机质心的集合
def randCent(dataSet, k):
    m, n, p = dataSet.shape
    centroids = np.zeros((k, n, p))
    for i in range(k):
        index = int(np.random.uniform(0, m))  #
        centroids[i, :, :] = dataSet[index, :, :]
    return centroids


# k均值聚类
def KMeans(dataSet, k):
    m = np.shape(dataSet)[0]  # 行的数目
    # 第一列存样本属于哪一簇
    # 第二列存样本的到簇的中心点的误差
    clusterAssment = np.mat(np.zeros((m, 2)))
    clusterChange = True

    # 第1步 初始化centroids
    centroids = randCent(dataSet, k)
    while clusterChange:
        clusterChange = False

        # 遍历所有的样本(行数)
        for i in range(m):
            minDist = 100000.0
            minIndex = -1

            # 遍历所有的质心
            # 第2步 找出最近的质心
            for j in range(k):
                # 计算该样本到质心的欧式距离
                distance = dtw(centroids[j, :, :], dataSet[i, :, :])
                if distance < minDist:
                    minDist = distance
                    minIndex = j
            # 第 3 步:更新每一行样本所属的簇
            if clusterAssment[i, 0] != minIndex:
                clusterChange = True
                clusterAssment[i, :] = minIndex, minDist ** 2
        # 第 4 步:更新质心
        for j in range(k):
            pointsInCluster = dataSet[np.nonzero(clusterAssment[:, 0].A == j)[0]]  # 获取簇类所有的点
            centroids[j, :, :] = np.mean(pointsInCluster, axis=0)  # 对矩阵的行求均值

    print("Congratulations,cluster complete!")
    return centroids, clusterAssment


def showCluster(dataSet, k, centroids, clusterAssment):
    m, n, p = dataSet.shape

    # 绘制所有的样本
    for i in range(m):
        markIndex = int(clusterAssment[i, 0])
        plt.plot(dataSet[i, 0, 0], dataSet[i, 0, 1])

    plt.show()


if __name__ == '__main__':
    start = time.clock()

    dataSet = loadDataSet("D:/151617-dtm-new/mds.csv")

    m, n = dataSet.shape
    dataSet_1 = np.zeros((m, n / 2, 2))
    for i in range(m):
        for j in range(n / 2):
            dataSet_1[i, j, 0] = dataSet[i, 2 * j]
            dataSet_1[i, j, 1] = dataSet[i, 2 * j + 1]
    m, n, p = dataSet_1.shape
    k = 4
    centroids, clusterAssment = KMeans(dataSet_1, k)
    saveDataSet('D:/151617-dtm-new/cluster.csv', clusterAssment)
    # #
    showCluster(dataSet_1, k, centroids, clusterAssment)

    elapsed = (time.clock() - start)
    print("Time used:", elapsed)

 

python实现用SIFT+K-MEANS+SVM图片分类 用python实现图片分类过程: 1. 按图片类别抽取训练集中所有图片的SIFT特征; 2. 将每一类图片的SIFT特征聚类为K类,构成该类的visual vocabulary(其size为K); 3. 对于训练集中的每一张图片,统计vocabulary中K个word的“词频”,得到相应的直方图; 4. 将直方图作为样本向量即可构建SVM的训练数据和测试数据; 运行的环境: win 阅读详情

相关推荐

transformers + resnet + k-means,图片分类,简单了解一下

我想把这100个图片,分为几类,3类或是4类, 或是5类, 总体大概是 2-5类。我想对一个图片文件夹,./imgs, 比如有100个图片,,我也想在本地实现这个功能。

waterHBO的博客 1479

动态主题模型(Dynamic Topic Models, DTM)

在本文中,我们介绍一个动态主题模型,该模型捕获了顺序组织的文档语料库中主题的演变。 我们通过分析由Ed Edi-son于1880年创立的Jour-nal Science的100多年的OCR文章来证明其适用性。在这种模式下,文章按年份分组,每年的艺术作品都来自于去年主题演变而来的一系列主题。 在随后的部分,我们扩展了经典状态空间模型,以指定主题演化的统计模型。然后,我们...

象在舞的技术专栏 2万+

基于GEE与K-Means聚类的青岛市城市空间结构分类:从数据到地图的完整方案

本研究基于Google Earth Engine平台,利用Landsat 8遥感数据和K-Means聚类算法,实现了青岛市空间结构的自动化分类。通过NDVI、NDBI等4类遥感指数特征提取和数据标准化,将城市划分为6类空间结构(如高密度建成区、高植被覆盖区等)。该方法具有高效性(全程代码自动化处理)、客观性(基于光谱特征)和可移植性(适用于其他城市)等优势,为城市规划、生态保护等提供科学依据。研究还展示了分类结果的空间分布特征和面积统计方法,为城市空间结构评估提供了量化手段。

lestatlu的博客 1043

LDA的拓展方法

LDA的拓展方法基本拓展动态主题模型(Dynamic Topic Models)应用场景动态主题模型(Dynamic Topic Models,DTM)的工作步骤动态主题模型实现动态主题模型(Dynamic Topic Models,DTM)与Latent Dirichlet Allocation (LDA) 的区别 基本拓展 LDA(Latent Dirichlet Allocation)是一种常用的主题模型,用于从文本数据中发现隐藏的主题结构。基本的 LDA 方法将文档表示为主题的混合,每个主题都由词汇

qq_45880982的博客 1938

详解 K-means及其改进算法

详解 K-means及其改进算法 详解 K-means及其改进算法K-means基本概念K-means ++基本概念ISODATA基本概念 详解 K-means及其改进算法 K-means 基本概念 算法步骤: Step1.给定初始质心:首先选取初始质心集合centroids 说明 A.质心数量由用户给出,记为k,k-means最终得到的簇数量也是k B.每个质心的数值由初始质心的计算算法计算...

Avery123123的博客 4781

动态主题模型DTM(Dynamic topic model)简介及python代码

DTM模型()是一种用于文本数据分析的概率模型,主要用于发现文本数据背后的主题结构和主题的演化过程。DTM模型是LDA模型的一种扩展,能够捕捉文本数据中主题的变化和演化特征。DTM模型的核心思想是将文本数据视为时间序列,将主题模型应用于整个时间序列。它假设文本数据在时间上的分布是由一系列隐含的主题分布演化而来的。DTM模型通过在时间序列上建立时间窗口,并在每个时间窗口内估计主题的分布,来描述主题的演化过程。

Cachel Wood的博客 2077

连续时间动态主题模型(Continuous Time Dynamic Topic Models, cDTM)

用于分析和管理大量电子文档的工具变得越来越重要。近年来,离散数据的分层贝叶斯模型,已成为一种广泛使用的文本探索和预测分析方法。 主题模型,例如潜在Dirichlet分配(LDA)和更一般的离散分量分析,假定可以使用少量的单词分布(称为主题)来解释观察到的集合LDA是潜在语义索引(LSI)和概率潜在语义索引(pLSI)的概率扩展。 由于其正式的生成语义,LDA已被扩展并应用于作者,电子...

象在舞的技术专栏 8075

K-MEANS改进聚类算法设计与MATLAB实现

在K-MEANS聚类中,距离度量用于计算数据点之间的相似性。不同的距离函数适合不同的数据分布和特征结构,选择合适的距离函数可以显著提升聚类效果。设两个点 $ A = (a_1, a_2, \dots, a_n) $ 和 $ B = (b_1, b_2, \dots, b_n) $,其欧氏距离为:设样本点 $ x $ 和均值向量 $ \mu $,协方差矩阵为 $ S $,则马氏距离为:其中 $ A \cdot B $ 为向量点积,$ |A| $ 为向量模长。

weixin_35751194的博客 797

K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

一、概述 在本篇文章中将对四种聚类算法(K-means,K-means++,ISODATA和Kernel K-means)进行详细介绍,并利用数据集来真实地反映这四种算法之间的区别。 首先需要明确的是上述四种算法都属于"硬聚类”算法,即数据集中每一个样本都是被100%确定得分到某一个类别中。与之相对的"软聚类”可以理解为每个样本是以一定的概率被分到某一个类别中。 ...

weixin_34248705的博客 3417

SURF+KMeans聚类+LDA文本主题模型实现图片自动分类

运用SURF+KMeans聚类+LDA文本主题模型实现图片自动分类

【SpringBoot香樟转转】debugDay01

在学黑马程序员的苍穹外卖项目,刚开始学,想用maven编译一下代码,结果报错,找不到符号。本着先理解原则,看着能找到这个变量呀。

m0_72696598的博客 1737

动态聚类算法之K-means(C-means)算法

最近在学习模式识别相关知识,也需要用到动态聚类算法知识,所以就发了K-means聚类。 C-means(K-means)聚类算法是一种很常用的聚类算法,其基本思想史通过迭代寻找C个聚类的一种划分方案,是的用这C个聚类的均值来代表相应各类样本时所得到的的总体误差最小。 参考:《模式识别(张学工第二版)》 在MATLAB中有kmeans函数,实例如下 解决方案: X=[0 0; 1 1; 2 2;...

杨杨子江的博客 5807

带你一分钟了解电感与磁珠的区别

在电路设计中会经常使用到电感和磁珠,虽然在电路中的作用有所不同,但它们都属于磁性电子元器件,本文简单介绍下电感和磁珠的区别电感和磁珠电感和磁珠的结构主要由磁性材料金属线圈和外壳组成,具体结构如下图所示:电感磁珠结构图电感其实是金属线圈缠绕在磁芯上,而磁珠是在内部折叠后外围包裹着铁氧体磁性材料。电感器(Inductor)又称扼流器、电抗器、动态电抗器是储能器件,能够把电能转化为磁能而存储起来的元件。磁珠则是能量转换(消耗)器件,将流过他的高频信号以热能的形式消耗掉。

攻城狮鹏哥 1409

基于K-means与CNN的遥感影像分类方法

各方面学者对遥感图像的分类有着诸多研究,提出了许多分类方法,按是否需要选取标记样本可将分类方法分为监督分类和非监督分类。根据表达和学习特征的方式,可将现有的遥感图像分类方法大致分为三类: 基于人工特征描述的分类方法、基于机器学习的分类方法和基于深度学习的分类方法。遥感影像分类就是利用计算机通过对遥感图像中各类地物的光谱信息和空间信息进行分析,选择特征,将图像中各个像元按照某种规则或算法划分不同的类别,然后获得遥感图像中与实际地物的对应信息,从而实现图像的分类。常见的分类方法有:监督分类、非监督分类法。

perfectzxiny的博客 3189

linux离线安装nginx

linux离线安装nginx

zhang_130914036的博客 9347

Xilinx实战-深入AXI UART Lite IP核的配置与调试

本文详细介绍了Xilinx FPGA中AXI UART Lite IP核的配置与调试方法,包括Vivado环境下的IP核设置、关键参数优化、寄存器操作及常见问题排查。通过实战案例和代码示例,帮助开发者快速掌握AXI接口的串口通信技术,提升嵌入式系统开发效率。

weixin_29189377的博客 227

基于自适应动态特征加权的K-means算法附Matlab代码

在电力负荷预测、用户用电行为分析、电网负荷聚类等场景中,K-means 算法是常用的无监督学习工具,可实现 “相似负荷模式归类”(如将用户分为工业、居民、商业用电类型,或将负荷曲线分为高峰、平段、低谷模式)。然而,传统 K-means 算法存在显著局限性:对所有输入特征赋予同等权重,无法区分不同特征对聚类结果的贡献差异(如电力负荷分析中,“历史负荷值” 的重要性远高于 “风速”),且易受噪声特征干扰,导致聚类精度低、稳定性差。

matlab_dingdang的博客 947

软件工程实验报告--用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

m0_73814332的博客 4162

K-Means 聚类算法 Python实现

K-Means聚类算法的简单实现

weixin_39678570的博客 1万+

Red Hat Enterprise Linux 9.2

安装Red Hat Enterprise Linux 9.2

zhurobert的博客 941

OpenOCD入门到精通:第20章 Target 子系统源码分析

摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。

从事嵌入式linux android驱动开发,拥有全栈能力 178

【图像分割】基于K-means算法实现遥感图像分类附Matlab代码

一 实验目的:利用matlab软件,通过K-means算法的方法处理给定的7幅遥感图像,将其分成水域、居民区和其他三类区域。二 实验方法:1 遥感图像的分类[1]遥感图像是通过反映地物光谱信息的像元亮度值及反映地物空间信息的像元空间变化来表征不同地物的。对遥感图像中各类地物的光谱信息和空间信息进行分析,选择特征(能够反映地物光谱信息和空间信息并可用于遥感图像分类处理的变量),并用一定的方式将特征空间划分为互不重叠的子空间,然后将图像中各个像元划归到各个子空间去。这就是图像分类。

m0_60703264的博客 1369

Feature ‘alsa‘ was enabled, but the pre-condition ‘config.unix && !config.qnx && libs.alsa‘ failed解决

这个问题主要是Qt多媒体插件中缺少了ALSA音频库,所以我们需要自行先编译ALSA 在执行./configure的时候,配置项中ALSA为no Qt Multimedia: ALSA ................................... no GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux .............

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 2587

K-means算法

K-means算法是一种经典的无监督聚类方法,其核心思想是通过迭代计算将数据划分为K个簇,使簇内差异最小化。算法步骤包括随机初始化质心、计算样本距离并分配簇、更新质心位置直至收敛。通过WCSS(簇内平方和)指标确定最优K值,通常选择"肘点"作为最佳簇数。Scikit-learn库提供了KMeans类实现该算法,包含n_clusters、init等关键参数。实践案例展示了如何生成模拟数据、绘制WCSS-K曲线确定K值、可视化聚类结果及预测新数据类别。该算法广泛应用于数据挖掘和模式识别领域。

2402_83802259的博客 931

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: APA参考文献格式
下一篇: scikit-learn点滴
shell
博客等级 码龄16年 25粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值