不同长度的阵列之间的平均值

时间:2017-08-02 09:13:17

标签: arrays algorithm math machine-learning average

我正在尝试开发一种非常简单的机器学习示例来识别数组之间的相似性。 出于这个原因,我试图计算两个不同长度的数组之间的平均值。

例如,如果我有:

array_1 = [0, 4, 5];
array_2 = [4, 2, 7];

平均值是:

average_array = [2, 3, 6];

但是,如果我遇到以下情况,如何计算平均值:

array_1 = [0, 4, 5, 10, 7];
array_2 = [4, 2, 7];

如您所见,阵列的长度不同。 有没有我可以应用的算法来解决这个问题? 有没有人有想法或建议?

当然我可以将第二个数组的缺失值视为0,并将平均值评估为,例如:

average_array = [2, 3, 6, 5, 3.5];

或将值视为“ null ”并具有:

average_array = [2, 3, 6, 10, 7];

但这两种方法是否合适? 或者有更聪明的东西?

感谢您的帮助!!

2 个答案:

答案 0 :(得分:2)

要回答您的问题,我们确实需要有关您要实现的目标的更多信息。

  

我试图开发一种非常简单的机器学习示例   识别数组之间的相似性。出于这个原因,我试图这样做   计算2个不同长度的阵列之间的平均值。

根据您的用例,相似性可能完全不同。

例如:

  • 如果数组对声音信息进行编码,则可能需要测量相似度为"这个声音片段是否会出现在这个声音信息中。或"主要频率(对应于和弦)相同"
  • 如果数组对图像信息进行编码(正确进行DFT编辑和Z字形编码),您可能不关心低频(数组的末尾)并仅测量数组的前几个值之间的差异
  • 如果数组编码某种元素组成(例如,这篇文章包含关键字"矩阵" 40次,关键字" SVM" 27次),值的差异可能非常大重要的。

一般建议:

  1. 想想你正在衡量的是什么
  2. 决定什么是重要的
  3. 但总的来说,请看一下平滑算法。例如Kneyser-Ney或Good-Turing平滑。他们明确地处理比较长度可能不同的概率向量(换句话说,有明确的零条目)

    https://en.wikipedia.org/wiki/Good%E2%80%93Turing_frequency_estimation

答案 1 :(得分:0)

如果在获取数组的平均值后,您打算采用数组的差异 mod 和平均数组,那么如果要测量数组,则可能是正确的方向不同程度的差异。

但是对于不同长度的数组,我建议你也考虑额外元素的索引。

对于

array_1 = [0, 4, 5, 10, 7];
array_2 = [4, 2, 7];

平均值应为average_array = [2, 3, 6, 6.5, 5.5];

6.5 = (10 + 3(index) + 0(element) ) / 2

5.5 = (7 + 4(index) + 0(element))/2
考虑索引的

原因是这种方法的长度因子也是隐藏的。不过这只是我的2美分。可能有更好的算法。

您还应该查看this帖子