2

我正在考虑根据自己的需要创建另一个购物清单应用程序。我希望它自动学习我在列表中勾选的顺序。换句话说:它应该知道我穿过商店的路线。知道该应用程序可以为我分类我的物品,从而加快我的购物速度。

可以解决此问题的最简单解决方案是什么?我在想:

  • 时间购物之旅。当我清除第一个项目并在最后停止时启动计时器。然后计算每个项目的平均时间。然后,该应用程序可以根据此计算的时间对项目进行排序。
  • 对于每个项目,存储我在该项目之前和之后勾选的其他项目的两个列表。然后以某种方式排序,但不知道如何。:)

你能不能想点别的?我基本上想要一些用于自动排序的简单机器学习。

4

2 回答 2

2

第一种方法的简单版本(基于时间)的问题在于它没有考虑到通过商店花费不同的时间:如果您花费大量时间等待熟食店,那么获得的时间之后的鸡蛋会根据您在熟食店等待的时间而有很大差异。因此,根据您检查它们的平均时间来订购东西可能并不理想。

如果您能找出产品的组别,那么进行这种排序会容易得多,即香蕉和葡萄在一个部分中,您通常将它们放在一起,牛奶和鸡蛋在不同的部分中,您可以将它们放在一起。这个模型有一些问题(你可能会从高档奶酪区或普通区的其他乳制品中获得切达干酪),但订购会容易得多(如果 A 组在 B 组之前您通常先从 A 组获取项目,然后再从 B 组获取项目;一旦您有了组定义,就根据它进行排序)。

当你输入一个新项目时,这也可能会有所帮助:如果你以前从未吃过黑莓,但你的应用搜索网络或其他东西发现黑莓更像是水果类别而不是肉类类别,它知道将它们放入水果组。

那么,如何进行分组呢?一种简单的方法是对列表中的项目进行聚类,使用项目之间的平均时间差作为距离度量(我不确定这在技术上是一个指标,但它可能并不重要)。您可以在此处使用 k-means 或任何其他聚类方法。这也可以通过某种基于网络或语料库的相似性度量来增强,以便对新商品或您在商店的前几次运行中更有用。也许你也可以使用 GPS 数据来帮助解决这个问题。

您可能会执行某种 EM 过程来在将事物分配给组和对组进行排序之间进行迭代,但我不确定这是否会很有帮助。当此过程出错时,您还可以支持手动将事物分配给组。

这是一个很酷的主意!如果你释放它,也许我会使用它。:)

于 2012-04-15T21:31:19.230 回答
1

如果您真的只想对列表进行排序并且您觉得使用平均时间不够好,您可以按照您勾选项目的顺序保留所有访问的所有项目的列表。然后您可以按以下方式对项目进行排序:

比较 2 个项目时,看看你在项目 B 之前选择项目 A 的次数。然后看看你在项目 A 之前选择项目 B 的次数,并根据这些数字对它们进行排序。即,如果您在 B n 次之前选择 A,在 A m 次之前选择 B,并且 n>m,则 A 应该在 B 之前。使用此比较器对它们进行排序。

显然,当n = m时,有一个问题。这可以使用您提到的平均时间来细分。

但老实说,简单地对它们进行聚类可能会更好。或者,也许您可​​以使用这种方法在集群中对它们进行排序;)

于 2012-04-15T21:38:00.323 回答