如何自动对购物清单进行排序?(朴素的机器学习)



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

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

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

你能想点别的吗?我基本上想要一些天真的机器学习来自动排序。

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

如果你能找出产品的组,那么做这个排序会容易得多,即香蕉和葡萄在一个部分,你通常会把它们放在一起,牛奶和鸡蛋在你靠近的不同部分。这个模型存在一些问题(你可能会从花哨的奶酪部分或与其他乳制品一起从普通部分得到切达干酪),但排序会容易得多(如果你通常在从 B 组获得物品之前从 A 组获得物品,则 A 组在 B 组之前;只需基于此排序, 获得组定义后)。

当您输入新项目时,这也可能会有所帮助:如果您以前从未获得过黑莓,但您的应用程序搜索网络或其他内容以查看黑莓更像水果类别而不是肉类类别,它知道将它们放在水果组中。

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

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

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

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

比较 2 个项目时,请查看您在项目 B 之前选择项目 A 的次数。然后查看您在项目 A 之前选择项目 B 的次数,并根据这些数字对它们进行排序。也就是说,如果你在 B n 次之前选择 A,在 A m 次和 n>m 之前选择 B,则 A 应该在 B 之前。

显然,当 n = m 时存在该怎么办的问题。这可以使用您提到的平均时间进行细分。

但说实话,最好简单地将它们聚类。或者,您可以使用此方法在集群中对它们进行排序;)

最新更新