簡體   English   中英

使用R和SVM進行文本分類。 矩陣功能

[英]Text classification with R and SVM. Matrix features

我在玩文本分類和SVM。

我的理解是,通常為訓練矩陣選擇特征的方法實質上是使用“單詞袋”,其中我們最終得到一個矩陣,該矩陣具有與文檔中不同單詞一樣多的列,並且該值列是每個文檔中每個單詞出現的次數(當然,每個文檔用一行表示)。

為了一切正常,我可以訓練算法,依此類推,但有時會出現類似的錯誤

封裝時出錯:測試數據與模型不匹配!

通過深入研究,我找到了這個問題的答案predict.svm中的錯誤:測試數據與模型不匹配 ,這實際上表示如果模型具有特征A,B和C,則要分類的新數據應包含列A,B和C。 當然, 對於文本來說,這有點棘手,我要分類的新文檔中可能包含分類器從未在訓練集中看到的單詞。

更具體地說,我使用的是RTextTools庫,而內部使用SparseM和tm庫,用於訓練svm的對象的類型為“ matrix.csr”。

不管圖書館的具體細節如何,我的問題是,在文檔分類中是否有任何技術可以確保培訓文檔和新文檔具有不同的詞這一事實不會阻止對新數據進行分類?

更新通過@lejlot提出的解決方案是簡單地使用create_matrix功能時利用該originalMatrix可選參數的RTextTools實現非常簡單。 本質上,originalMatrix應該是一個人使用create_matrix函數訓練數據時創建的SAME矩陣。 因此,在訓練好數據並建立模型之后,還請保留原始文檔矩陣,在使用新示例時,請確保在為預測集創建新矩陣時使用此類對象。

不管圖書館的具體細節如何,我的問題是,在文檔分類中是否有任何技術可以確保培訓文檔和新文檔具有不同的詞這一事實不會阻止對新數據進行分類?

是的,這是非常瑣碎的。 在應用任何訓練或分類之前,您需要創建一個預處理對象,該對象應該將文本映射到矢量表示形式。 特別是-它存儲用於培訓的整個詞匯表 稍后,您可以在測試文檔上重用同一預處理對象,並且只需忽略之前存儲的詞匯中的單詞(OOV單詞,因為它們在文獻中經常被引用)。

顯然,還有許多其他的“啟發式”方法,您可以嘗試將它們映射到現有單詞而不是丟棄它們(盡管從理論上講還不夠合理)。 而是-您應該創建中間表示,這將是您的新“預處理”對象,該對象可以處理OOV單詞(通過一些levenstein距離映射等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM