【问题标题】:Pattern recognition with double vectors双向量模式识别
【发布时间】:2011-03-09 22:34:35
【问题描述】:

我有一组包含相同数量条目的向量。我已经用谷歌搜索了一段时间,但我没有发现任何有用的东西:

有没有办法检测这些数字中的模式?

向量如下所示:

{840.2, 842.1,....,} {840.3, 843.1,....,} ....

【问题讨论】:

  • 模式是什么意思?
  • 您在寻找什么样的模式?更多的是门萨难题还是总体趋势?这些数据来自哪里?
  • 我不认为有任何有用的答案,除非你解释你正在寻找什么样的模式,或者有人碰巧猜对了。前者似乎是一个更好的选择。那么:你在寻找什么样的模式?
  • 如果你想测量序列之间的相似程度,那么“相关性”对谷歌来说是个好词。如果你的意思是别的,那么请更详细地解释。
  • 如果我没有正确表达我的问题,我很抱歉。问题是我想看看条目之间的差异是否遵循模式或趋势。这些是激光光谱中的峰值,我想获取“指纹”以查看是否可以通过峰值识别激光。换句话说,如果我有某个向量,程序应该能够告诉我这是否符合模式 1 或 2,... 或任何模式。

标签: c++


【解决方案1】:

为了分析您的数据,我建议编写一个程序,将数据放入逗号分隔值格式的文件中,然后将该文件输入到电子表格中。电子表格已经具有分析数据的强大功能。

一个好的项目是使用(实施)神经网络来分析数据。在网上搜索“神经网络 C++”。

【讨论】:

  • 我已经想到了神经网络,并发现了一些非常有趣的东西。基本原理我很清楚,但我不知道从哪里开始以及如何实现它。
【解决方案2】:

根据您上面的评论,我认为您会对cross-correlation 感兴趣。

基本思想是你有两个向量(一个长度为 m 和一个长度为 n,其中 n 通常要小得多比 m) 并创建第三个向量(长度为 m - n),其值表示较小向量与部分在特定点更大。

基本算法是这样的:

for i = 0 to m - n
    output[i] = 0
    for j = 0 to n
        output[i] = output[i] + (v0[i + j] * v1[j])^2 

输出向量中最大值的索引是较小的输入向量与较大的向量最匹配。

这种简单的实现相当慢,但在上述链接的Properties 部分,我们看到我们可以使用 FFT 来更快地计算互相关。

【讨论】:

  • 这个算法的问题是,我的向量大小完全相同,所以根本不会运行。但是感谢您的想法。
【解决方案3】:

您还可以使用cosine similarity 等指标来确定两个向量的相似程度。如果所有向量都遵循相似的趋势,那么它们的余弦相似度也应该相似。

【讨论】:

  • 好吧,我刚刚实现了余弦相似度。我认为这还不够精确。我只得到 1 或非常接近 1 的结果(例如 0.999994),但感谢您的想法。
猜你喜欢
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多