用于食谱程序化分类的算法

时间:2012-02-13 18:02:13

标签: algorithm data-mining classification categorization document-classification

我有兴趣根据配方各种属性的统计分析以编程方式对食谱进行分类。换句话说,我想在没有任何用户输入的情况下将食谱分类为BreakfastLunchDinnerDessert

我可以使用的属性是:

  1. 食谱标题(例如鸡肉沙拉
  2. 食谱描述(描述食谱的任意文字)
  3. 烹饪方法(准备此食谱所涉及的步骤)
  4. 准备和烹饪时间
  5. 食谱中的每种成分及其含量
  6. 好消息是我有大约10,000个已经分类的食谱样本,我可以使用这些数据教授我的算法。我的想法是寻找模式,例如 syrup 这个词是否在早餐食谱中更频繁地出现,或任何需要超过 1杯糖的食谱有90%可能是甜点。我想如果我分析几个维度的配方,然后根据需要调整权重,我可以得到一些相当准确的东西。

    在解决此问题时,要研究哪些好的算法?像k-NN这样的东西会有用吗,还是有更适合这项任务的人呢?

3 个答案:

答案 0 :(得分:2)

如果我这样做,我会尝试按照李考的建议去做。我首先关注的是成分。我会建立一个关于食谱成分部分出现的单词的词典,并以监督的方式清理列表,以删除非成分术语,如数量和单位。

然后我会诉诸贝叶斯定理:你的数据库允许你计算在早餐和晚餐中吃鸡蛋的概率......;您将预先计算这些先验概率。然后给出一个包含鸡蛋和橘子酱的未知收件人,你可以计算出这顿饭的概率,即早餐,后验。

您稍后可以充实其他条款和/或考虑数量(每人鸡蛋数量)......

答案 1 :(得分:1)

尝试各种众所周知的机器学习算法。我建议首先使用贝叶斯分类器,因为它易于实现并且通常可以很好地工作。如果这不起作用,那么尝试更复杂的东西,例如神经网络或SVM。

主要问题是决定一组功能作为方法的输入。为此,您应该查看哪些信息是唯一的。例如,如果你有一个标题为“鸡肉沙拉”的食谱,“鸡肉”部分不会引起太大兴趣,因为它也存在于成分中,并且从那里收集起来更简单。因此,您应该尝试找到一组提供新信息的关键字(即Salad部分)。尝试为此找到一组好的关键字。这可能会以某种方式自动化,但如果你手工完成,你会更好,因为它只需要做一次。

描述也是如此。找到正确的功能集始终是执行此类任务最难的部分。

一旦掌握了一组功能,只需训练你的算法,看看它的效果如何。如果您没有太多的机器学习经验,请查看正确测试ML算法的不同方法(例如,让N out测试等)。

答案 2 :(得分:1)

我认为NN对此可能有些过分。我会尝试使用单个感知器“网络”为每种类型的餐(早餐,晚餐)进行分类,并让它通过输入并调整重量向量。在数据集中找到的每个有意义的单词都可以作为网络的输入。我希望这足以满足您的需求。我成功地使用此方法对文本进行分类。