4

我對基於食譜各種屬性的統計分析編程分類食譜感興趣。換句話說,我想在沒有任何用戶輸入的情況下將配方分類爲Breakfast,Lunch,DinnerDessert用於食譜編程分類的算法

我有可用的屬性是:

  1. 配方標題(如雞肉沙拉
  2. 配方描述(任意的文本描述的配方)
  3. 所述的烹飪方法(步驟參與準備這個配方)
  4. 準備和烹飪時間
  5. 配方中的每種成分及其數量

好消息是我有一個已經分類的大約10,000個食譜的樣本集,我可以使用這些數據來我的算法。我的想法是尋找模式,例如,如果字糖漿出現統計上更頻繁地早餐食譜,或超過1杯糖的調用的任何配方很可能90%以上爲甜點。我想,如果我分析幾個維度的食譜,然後適當調整權重,我可以得到一些非常準確的東西。

在解決這個問題時,有什麼好的算法可以調查?像k-NN這樣的東西會有幫助,還是有更適合這個任務的更好的?

+0

你願意付出多少編程工作?最簡單的(最少編程)解決方案是將所有這些字段連接成一個大文本並運行任何文本分類工具。第二種方法需要更多的參與,需要您從數據中創建自己的特徵,並運行一個或多個分類算法:SVM,Boosting,KNN,神經網絡,決策樹等。 – ElKamina 2012-02-13 18:23:32

+0

@ElKamina - 我正在尋找涉及構建我自己的算法的後一種方法。主要是我想擺脫這個問題是指向最適合這種類型的問題的算法,我沒有尋找任何示例代碼或任何東西(問題顯然太多了!) – 2012-02-13 18:26:36

+2

一旦你有了這些功能,你可以很容易地用[Weka](http://www.cs.waikato.ac.nz/ml/weka/)試驗許多不同的分類算法,並選擇最適合你需求的分類算法。 – 2012-02-13 18:46:06

回答

1

嘗試各種衆所周知的機器學習算法。我會建議首先使用貝葉斯分類器,因爲它很容易實現,並且經常運行得很好。如果這不起作用,那麼嘗試一些更復雜的東西,例如神經網絡或SVM。

主要問題將決定作爲輸入到您的方法的一組功能。爲此,您應該查看哪些信息是唯一的。例如,如果你有一個名爲「雞肉沙拉」的食譜,那麼「雞肉」部分就不會引起太多興趣,因爲它也存在於食材中,並且從那裏收集起來更簡單。因此,您應該嘗試找到一組提供新信息的關鍵字(即沙拉部分)。嘗試爲此找到一組好的關鍵字。這可能會以某種方式實現自動化,但如果您手動完成,則更有可能會更好,因爲它只需要執行一次。

說明同樣如此。找到正確的功能集始終是這項任務中最難的部分。

一旦你有了你的一套功能,只需要訓練你的算法,看看它有多好。如果你沒有太多的機器學習經驗,可以看看正確測試ML算法的不同方法(例如,Leave N out testing等)。

2

如果我要這樣做,我會盡量按照LiKao的建議去做。我會首先關注配料。我會建立一個在食譜配料部分出現的詞語的詞典,並以監督的方式清理清單,以消除數量和單位等非成分詞彙。

然後我會訴諸於貝葉斯定理:您的數據庫允許您計算在早餐和晚餐中吃雞蛋的概率......;你將預先計算這些先驗概率。然後給出一個包含雞蛋和果醬的未知接收者,你可以計算出膳食作爲早餐的概率。

您可以與其他條款和/或服用量後充實到賬戶(數量每人蛋)...

+0

好的建議 - 幸運的是,我的數據庫已經以這種方式歸一化,所以我有一套成分字典,並且數量/單位分開存儲。 – 2012-02-14 00:25:10

+0

如果您使用像這樣的貝葉斯定理,那麼究竟是什麼區別使用一個樸素的貝葉斯學習者,一個自我實現的一個還是一個可用的mainy?除了你忽略了描述中的膳食類型的先驗概率,這似乎只是做一個樸素的貝葉斯學習者所做的。對天真貝葉的簡潔描述仍然讚不絕口。 – LiKao 2012-02-14 09:33:12

+0

@李高:沒有區別。 – 2012-02-14 11:30:04

1

我想,NN可能是這個矯枉過正。我會嘗試使用單一的感知器「網絡」爲每種類型的膳食(早餐,晚餐)進行分類,並讓它遍歷輸入並調整權重向量。在數據集中找到的每一個有意義的單詞都可以成爲網絡的輸入。我期望這足以滿足您的需求。我成功地使用這種方法來對文本進行分類。