【问题标题】:Unknown pattern detection in a list of numbers数字列表中的未知模式检测
【发布时间】:2020-09-25 11:29:12
【问题描述】:

我有一个遵循某种任意规则的数字序列,让我们想象以下 5 个示例:

A = [1,2,3,4]
B = [8,7,6,5,4,3,2]
C = [2,4,6,8,10,12]
D = [15,18,21,24]
E = [2,8,18,32,50]

序列 A 遵循 xn = xn-1+1 的规则,其中 n0=1,序列B遵循xn = x的规则n-1-2 其中 n0=8,以此类推。示例 E 遵循更复杂的公式 ni=2(i+1)2

如何使用 python 预测每个序列的下一个元素?

【问题讨论】:

  • 我的意思是我也可以去 2、4、6,它会去 8
  • 就像训练人工智能来识别字符串中的模式

标签: python artificial-intelligence


【解决方案1】:

如果您有特定的功能,您可以使用scipy.optimize.curve_fit 拟合曲线,或者如果您确信“等等”总是符合某个多项式,您可以使用numpy.polyfit -你的例子都是线性的,所以这只是一个 1 次多项式。

这里是一个使用 numpy.polyfit 的例子:

import numpy as np

model = np.polyfit([0,1], [1,2],deg=1)

这将接受您的值 [1,2] 并将它们映射到位置值 [0,1],然后再计算最适合其序列的 1 度多项式。

然后,您需要一个函数来使用模型来预测序列中的第 n 个值(或者,使用 poly1d)但这里有一个简单的多项式计算器函数,它接受系数作为第一个参数,x 的值您要为其返回多项式的结果:

def poly(coeffs, x):
    accumulator=0
    n = len(coeffs)-1
    for e,i in enumerate(coeffs):
        accumulator = accumulator + (i*(x ** (n-e)))
    return accumulator

因此,我们已经在索引为 0,1 的序列上对其进行了训练 - 索引为 2 的第 3 点的答案通过以下方式找到:

poly(model,2)

返回预期值 3。

这是一个使用序列[3,6,9,12]的示例:

model = np.polyfit([0,1,2,3], [3,6,9,12],deg=1)
poly(model,4)

给出答案 15。(好的,15.000000000000002,但它已经足够接近了 - 如果你确信你总是会得到整数答案,那么你可以四舍五入到最接近的整数 - 或者选择某种程度的精度'很舒服)

这都是线性的,对于二次模型,您可以将 deg=1 设置为 deg=2 等等。

这不会为您找到更多有趣的模式,这些模式没有多项式来描述它们。 On-Line Encyclopedia of Integer Sequences 有一个 巨大 的此类序列列表,但示例可能包括 The Fibonacci SequenceThe Prime Number SequenceTriangular Numbers 对于这些更有趣的示例,您需要想出一个更细致入微的方法。

【讨论】:

    猜你喜欢
    • 2014-04-03
    • 2012-08-07
    • 2014-03-30
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2011-04-16
    • 2018-04-03
    相关资源
    最近更新 更多