我需要一个描述一组零和一个序列的函数?

我有多个序列可变数量的集合。 每个序列由64个数字组成,如0或1所示:

设置A.

序列1:0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0 ,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 ,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0

序列2:0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0 ,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 ,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0

序列3:0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0 ,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 ,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0

设置B.

序列1:0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0, 1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1,1,1,1,1,1,1,1

序列2:0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0, 1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,0,1,1,1,1,1,1,0

我想find一个描述集合中所有可能序列的math函数,甚至可以预测更多,而不包含其他集合中的序列。

我需要这个,因为我正尝试基于已经被触摸的网格中的单元格(1触摸/ 0无触摸)来识别移动应用中的不同手势。 这些集合表示每个手势,并且这些序列是每个手势的变化的有限样本。

理想情况下,描述集合中序列的函数将允许我testing用户触摸它以确定哪个集合/手势是其中的一部分。

我寻找一个解决scheme,无论是使用Excel或Mathematica,但是一般都非常无知和math,我正在寻找专家的方向。 关于这个问题的基本文件的build议也是受欢迎的。

看起来好像你正在试图处理一维中基本上是2D数据的东西。 例如,让s1代表问题中的集合A中的第一个序列。 然后命令

 ArrayPlot[Partition[s1, 8]] 

产生这张图片:

在这里输入图像说明

同一组中的其他序列产生相似的图。 来自第二组的一个序列响应于相同的操作产生图像:

在这里输入图像说明

我不知道你想定义什么样的math函数来描述这些图片,但是如果你的目标是识别用户的手势,我不确定你需要什么。

你可以做更简单的事情,比如为你的每个手势计算“平均”图片。 一种方法是计算每张图片中每个64像素的平均值。 也许在你的集合A中有6个序列描述手势A.逐个元素地总和序列。 现在,您将有一个值为0到6的序列。将每个元素除以6.现在,每个元素表示一种新的手势,一个您尝试识别的手势将触摸该像素。

对代表你的一组手势的所有序列重复上述操作。

要识别用户手势,只需计算表示手势的序列与代表“平均”手势的每个序列之间的差异即可。 最小(绝对)的差异将引导你到用户的手势。

我不认为这样做完全是万无一失的,这可能会导致一些用户的手势模棱两可或不可辨认,你可能想尝试一些更复杂的东西。 但我认为这种方法很简单,可能足以让你开始。

在Mathematica中,以下expression式将枚举长度为64的{0,1}的所有可能组合。

 Tuples[{1, 0}, {64}] 

但有2 ^ 62或18446744073709551616他们,所以我不知道这是什么对你来说。

也许你只是想要包含在每个集合中的唯一序列,在这种情况下,所有你需要的是应用于该集合的Mathematica Union []函数。 如果在Mathematica中有一组列表,请说mySets,那么可以使用映射运算符将Union运算符应用于列表中的每个集合。

 Union/@mySets 

如果你想做一些types的预测,多一点的信息可能是有用的。

感谢您的澄清。

机器学习

你想解决的任务属于不同名称的学科,但也许最常见的是机器学习或模式识别,如果你知道哪些例子代表了相同的手势,你的情况就是所谓的监督式学习。

问题:在你的情况下,你知道每个例子代表什么手势吗?

你有一系列的例子,你知道一个标签(它的姿态的forms),你想从中训练一个模型,并使用该模型来标记一个看不见的例子到一个有限的类集。 在你的情况下,一些手势之一。 这通常被称为分类。

学习资源

关于这个话题的研究有非常广泛的背景,但是这个主题是Christopher Bishop的机器学习 。 斯坦福大学有一系列的机器学习video讲座可以在网上find。

准确性

您可能想要考虑如何确定系统的准确性,以预测不可见的示例的手势types。 通常,使用一些示例来训练模型,然后使用模型未见的示例来testing其性能。 用来做这件事的两种最常见的方法是10倍交叉validation或重复50/50拒绝。 衡量准确性使您能够比较一种方法与另一种方法,看哪个更好。

你有没有想过要在你的任务中达到什么程度的准确度,有70%的准确度,85%,99%还是更好的?

机器学习方法通​​常对您所拥有的特定types的数据以及您需要训练系统的示例数量非常敏感,示例越多,性能越好。

你可以尝试上面提出的方法,并将其与各种成熟的方法进行比较,其中包括随机森林,支持向量机和neural network。 所有这些以及更多可供下载的各种免费工具箱。

工具箱

Mathematica是一个非常好的系统,是非常灵活的,也是我最喜欢的环境,但是对于机器学习来说,它并不具有很大的支持。

我怀疑你会通过使用专为机器学习而devise的自定义工具箱来更快地取得很大的进步。 WEKA和R两种最stream行的免费工具箱都支持超过50种不同的方法来解决您的任务,同时还有测量解决scheme准确性的方法。

只需稍稍重新格式化数据,您就可以将您的手势转换为称为ARFF的简单文件格式,将其加载到WEKA或R中,并尝试使用几十种不同的algorithm,以查看每种algorithm在数据上的performance。 WEKA中的浏览器工具绝对是最容易使用的,只需点击几下鼠标并input一些参数即可开始使用。

一旦您了解了已build立的方法对您的数据执行得有多好,您就有了一个很好的起点,可以比较一个定制的方法和不符合标准的方法。

手写数字识别

你的问题类似于一个很好的研究机器学习问题,被称为手写数字识别。 在手写数字的公开数据集上运行良好的方法可能对您的手势起作用。