Algorithm MATLAB:HMM+;kmeans+;装货单

Algorithm MATLAB:HMM+;kmeans+;装货单,algorithm,matlab,k-means,hidden-markov-models,Algorithm,Matlab,K Means,Hidden Markov Models,我正在为学校项目做一个NILM算法 我有一个数据库,其中包含各种电流信号的采样(1024个采样/周期)瞬态。 我要用从Stockwell变换中提取的特征向量来训练HMM,但我需要帮助 1) 1024个时间样本的Stockwell变换是一个矩阵1024*1024。然后,我创建一个矩阵10*1024,选择前10个谐波(f0,2*f0,…,10*f0) 现在我需要为HMM创建一个特征向量。我想使用kmeans算法创建一个1024个符号的向量,但是我的元素是复数,所以kmeans不能正常工作。 我可以做

我正在为学校项目做一个NILM算法

我有一个数据库,其中包含各种电流信号的采样(1024个采样/周期)瞬态。 我要用从Stockwell变换中提取的特征向量来训练HMM,但我需要帮助

1) 1024个时间样本的Stockwell变换是一个矩阵1024*1024。然后,我创建一个矩阵10*1024,选择前10个谐波(f0,2*f0,…,10*f0)

现在我需要为HMM创建一个特征向量。我想使用kmeans算法创建一个1024个符号的向量,但是我的元素是复数,所以kmeans不能正常工作。 我可以做两个特征向量:一个是绝对部分,一个是想象部分,但是我如何用两个向量训练Hmm来观察呢

2) 如果我错了,请纠正我:在hmm中,观察矩阵的每一行都是一个序列,因此在我的例子中,我的obs。矩阵是一个n*1024的矩阵,其中n是我在数据库中得到的相同类型的瞬态数,不是吗


谢谢。

K-means for matlab仅适用于实际值,也许您希望使用abs(值),因为abs提供变换的幅度,而角度(值)提供相位信息。因此,你可以训练使用k-均值的幅度+相位信息聚类的HMM(也许考虑一个高斯混合模型?),这正是我所了解的,Matlab HMM只允许序列,而不是分布。你可以尝试巧妙地将观察结果组合成一个序列。啊,是的,这是一个众所周知的版本,适用于多种类型的输入。你的问题的核心在于你想建立什么样的模型,大小,相位或两者,以及以什么形式,分布或一系列离散值。假设您以受控方式收集电流信号,从而产生特定的幅值和相位/方向,您必须问问自己,这种行为是静态的,还是可以通过均值和方差(更有可能)测量的分布。这使您可以针对该特定设置对观察结果进行聚类/建模。获得每个可能设置的幅度和相位分布,然后您可以开始训练模型。假设您的问题类似于“刚检测到这个幅度和相位模式,最有可能导致这个的设置是什么?”您可以(监督)通过首先确定每个状态(设置)的幅度和相位分布来训练HMM。一旦你有了这个,你可以运行一系列的观察来自动训练转移矩阵。逻辑是HMM看到幅度和相位的变化,解释为设置的变化。如果让HMM看到足够的观察值(序列),它将训练转移矩阵以及在该状态下看到每个特定序列的概率(即观察概率矩阵)。一旦你有了一个训练有素的HMM,你就可以用一个简单的维特比或者你喜欢的任何一种方法追踪到各个州。你的观测应该是以平均值和协方差的形式表达的幅度和相位信息的联合分布,这取决于你选择的聚类算法。