2016-08-16 65 views
0

我設置了一個樸素貝葉斯分類器,試圖確定兩個五個字符串屬性記錄之間的相同性。我只準確地比較每對屬性(即,使用java .equals()方法)。我有一些訓練數據,包括TRUE和FALSE情況,但現在我們只關注TRUE情況。應該向「樸素貝葉斯分類器」提供「欺騙性」培訓案例

假設有一些TRUE培訓案例,所有五個屬性都不相同。這意味着每個比較器都會失敗,但是經過一些人類評估後,記錄實際上被確定爲「相同」。

這個訓練案例應該輸入樸素貝葉斯分類器嗎?一方面,考慮到NBC分別處理每個變量的事實,這些情況不應該完全破壞它。然而,當然,喂足夠的這些情況對分類器的表現並不會有好處。我知道,看到很多這樣的情況意味着需要更好的比較器,但我想知道暫時要做什麼。另一個考慮是反面是不可能的;也就是說,兩個記錄之間的所有五個屬性都不可能是相同的,並且它們仍然是「不同的」記錄。

這是一個優惠問題,還是有一個明確的公認的做法來處理這個問題?

+0

在我看來,一個學習算法應該只適用於有能力做出正確區分的情況。如果存在算法無法檢測到的TRUE情況,那麼您應該改進它。如果問題來自人爲輸入,您可以嘗試通過刪除所有特殊字符並將所有字母更改爲大寫或小寫來標準化。您還可以使用更細緻的比較,並嘗試排除常見拼寫錯誤或拼寫錯誤。 –

回答

0

通常你會希望有一個訓練數據集儘可能代表您希望對其進行分類的域的儘可能代表性(通常很困難)。不具代表性的組可能會導致分類器運行不良,特別是在收到各種數據的生產環境中。也就是說,預處理可以用來限制訓練在特定數據子集上的分類器的暴露程度,因此它很大程度上取決於分類器的目的。

我不知道你爲什麼希望排除一些元素。參數估計/學習應該考慮到兩個不同輸入可能映射到相同輸出的事實 - 這就是爲什麼您會使用機器學習而不是簡單地使用散列映射。考慮到你通常沒有「全部數據」來構建你的模型,你必須依賴這種類型的推論。

你看過NLTK;它在python中,但似乎OpenNLP可能是Java中的合適替代品?您可以使用更好的特徵提取技術,這些技術可以導致模型考慮到輸入字符串中的細微變化(請參閱here)。

最後,在我看來,你想了解從輸入字符串映射到類「相同」和「不相同的」 ---你似乎想推斷的距離度量(只是檢查)。投入精力直接找到更好的措施會更有意義(例如,您可以使用edit distances來表示字符轉換問題)。我不確定NB是否適合您的問題,因爲它正在嘗試確定給定觀察結果(或其特徵)的課程。這個類將不得不通過各種不同的字符串來辨別(我假設你要連接字符串1 & string2,並將它們提供給分類器)。目前是否有足夠的結構來推導這種廣泛適用的財產?這個分類器基本上需要能夠處理所有成對的「比較」,除非您爲每個一對多配對構建NB。這似乎不是一個簡單的方法。