[英]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.