2012-04-15 26 views
2

我正在考慮爲我自己的需要創建另一個購物清單應用程序。我希望它能夠自動學習按照哪個順序從列表中刪除東西。換句話說:它應該知道我通過商店走哪條路線。知道該應用程序可以爲我分類我的物品,從而加快我的購物。如何自動排序購物清單? (天真機器學習)

什麼是最簡單的解決方案,可以解決這個問題?我在想:

  • 購物之旅的時間。當我清除第一個項目並在最後停止時啓動計時器。然後計算每個項目的平均時間。應用程序可以根據這個計算出的時間對項目進行排序。
  • 對於每個項目存儲兩個我在此項目之前和之後打勾的其他項目的列表。然後以某種方式排序,但不知道如何。 :)

你能想點別的嗎?我基本上想要一些天真的機器學習用於自動分類。

+1

老實說,它似乎並不像ML適合這個問題。我想你只是想知道店鋪的佈局(麪包過道5,牛奶過道9),然後 – 2012-04-16 03:31:35

回答

2

第一種方法的簡單版本(基於時間)的問題在於,它沒有考慮通過商店花費不同的時間量:如果您花費大量時間等待熟食店,那麼在此之後獲得雞蛋的時間將根據您在熟食店等待的時間而有很大差異。所以根據你檢查它們的平均時間來排序的東西可能並不理想。

如果你能弄清楚產品的組合,例如香蕉和葡萄在一個部分,你通常會把它們放在一起,牛奶和雞蛋與你在不同的部分靠近在一起。這個模型存在一些問題(你可能會從花式奶酪部分得到切達乾酪,或者從其他乳製品的正常部分得到切達乾酪),但是排序會更容易(A組在B組之前)您通常從A組獲得項目,然後才能從B組獲得項目;只要您有組定義,就根據該項目進行排序)。

當你輸入一個新的項目時,這也可能有幫助:如果你以前從未得到過黑莓,但是你的應用搜索網絡或者其他東西來看黑莓更像是水果類別而不是肉類,它就知道把他們放進水果小組。

那麼,你如何做分組?一種簡單的方法是對列表中的項目進行聚類,使用項目之間的平均時差作爲距離度量(我不確定這在技術上是否是度量標準,但可能並不重要)。您可以在這裏使用k-means或任何其他聚類方法。這可能會通過某種基於網絡或基於語料庫的相似性度量來增強,以便對新項目或通過商店的前幾次運行更有用。也許你也可以使用GPS數據來幫助解決這個問題。

您可能會做一些EM過程,以便在將事情分配給組和排序組之間進行迭代,但我不確定這會非常有幫助。當這個過程出錯時,您也可以支持手動將組分配給組。

這是一個很酷的主意!如果你釋放它,也許我會使用它。 :)

+0

分組的東西有道理,謝謝!儘管如此,我必須閱讀聚類。 :) – Sven 2012-04-16 10:11:15

1

如果您確實想對列表進行排序,而您覺得使用平均時間不夠好,則可以按照您勾選項目的順序列出所有訪問中的所有項目列表。然後您可以按以下方式對項目進行排序:

比較2個項目時,請查看您在項目B之前選擇項目A的次數。然後查看在項目A之前選擇項目B的次數,並根據這些數字對它們進行排序。即如果您在B前n次選擇了A,而在A m次之前選擇了B,並且n> m,則A應該在B之前。使用此比較器對它們進行排序。

很明顯,當n = m時會出現什麼問題。這可以使用你提到的平均時間來分解。

但說實話,將它們簡單聚類可能會更好。或者,也許你可以使用這種方法在羣集內對它們進行排序;)