簡體   English   中英

使用 e1071 (SVM) 進行文本分類

[英]Text classification using e1071 (SVM)

我有一個包含兩列的數據框。 一列包含文本。 該列的每一行包含三個不同類別(技能、資格、經驗)的某種類型的數據,另一列是它們各自的類別標簽。

數據幀的快照:

數據框的快照

如何從包 e1071 應用 svm。 如何將文本數據列轉換為分數。 我想將文本列轉換為文檔術語矩陣。 他們還有別的辦法嗎? 如何制作dt矩陣?

您可以使用RTextTools包來創建文檔術語矩陣。 使用 create_matrix 函數:

# Create the document term matrix. If column name is v1
dtMatrix <- create_matrix(data["v1"])

然后你可以使用這個訓練你的 SVM 模型:

# Configure the training data
container <- create_container(dtMatrix, data$label, trainSize=1:102, virgin=FALSE)
 
# train a SVM Model
model <- train_model(container, "SVM", kernel="linear", cost=1)

有關信息, RTextTools用戶內部使用e1071包來訓練模型。

有關更多詳細信息,請參閱 RTextTools 和 e1071 文檔。

您可以在 R 中使用tm包。您必須在形成文檔術語矩陣之前對文本進行預處理,其中包括 - 去除停用詞、標點符號、數字、標准化(美國 = 美國)、詞干等。向 dtm 添加權重 - ( tfidf) 增加重要術語的重要性。

完成這些步驟后,您可以使用 e1071 中的 svm() 來訓練分類器

 fit <- svm(x, y, kernel = "linear") 

在這里,

  x = dtm 

  y = a vector of the corresponding labels 

使用模型預測測試數據的類別(確保您的測試數據也經過預處理)

我也考慮過使用RTextTools 它有一個相對容易的實現。 但是,如果您的數據存在類不平衡,那將毫無用處。 它不允許您控制容器中的分層拆分。

container <- create_container(dtMatrix, data$label, trainSize=1:102, virgin=FALSE)

您不知道您的類標簽的比例將如何在“trainSize=1:102”參數中結束。 它也沒有得到維護。 所以,我會避免使用它。

暫無
暫無

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

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