我在考虑为自己的需求开发另一个购物清单应用。我希望它能自动学习我勾选清单上的物品的顺序。换句话说:它应该知道我在商店中走的路线。了解这一点后,应用就可以为我排序物品,从而加快我的购物速度。
对于这个问题,最简单的可能有效的解决方案是什么?我在考虑以下几点:
- 计时购物行程。当我清除第一个物品时开始计时,在最后一个物品时停止。然后计算每个物品的平均时间。应用可以根据这个计算出的时间来排序物品。
- 对于每个物品,存储两个列表,分别记录我在此物品之前和之后勾选的其他物品。然后以某种方式进行排序,不过我不知道具体怎么做。:)
你能想到其他方法吗?我基本上想要一些用于自动排序的初级机器学习方法。
回答:
第一个方法(基于时间)的简单版本的问题在于,它没有考虑在商店中花费不同时间的情况:如果你在熟食柜台等待了很长时间,那么之后取鸡蛋的时间会根据你在熟食柜台等待的时间长短而有很大变化。因此,根据你勾选物品的平均时间来排序可能不是理想的选择。
如果能为产品分组,这将更容易进行排序,即香蕉和葡萄在一个区域,你通常会一起拿这些东西,牛奶和鸡蛋在另一个你通常一起拿的区域。这个模型有一些问题(你可能从高档奶酪区或普通奶制品区拿到切达奶酪),但排序会更容易(如果你通常先拿组A的物品再拿组B的物品,那么组A就在组B之前;一旦你有了组的定义,就可以基于此进行排序)。
这在你输入新物品时也可能有帮助:如果你以前从未买过黑莓,但你的应用通过搜索网络或其他方式发现黑莓更像是水果类而不是肉类,它就会知道将它们归入水果组。
那么,如何进行分组呢?一种简单的方法是对列表中的物品进行聚类,使用物品之间的平均时间差作为距离度量(我不确定这在技术上是否是一个度量,但这可能并不重要)。你可以在这里使用k-means或其他任何聚类方法。这可以通过某种基于网络或语料库的相似度度量来增强,以使其对新物品或你在商店的前几次购物更有用。也许你还可以使用GPS数据来帮助实现这一点。
你可能可以进行某种EM过程,在分配物品到组和排序组之间进行迭代,但我不知道这是否会很有帮助。你还可以支持在该过程出错时手动将物品分配到组中。
这是一个很酷的想法!如果你发布了它,也许我会使用它。:)