2
當我使用tm
包文本挖掘,我經常會遵循非常相似,這樣的工作流程:removeSparseTerms培訓和測試集
library(tm)
data(crude)
crude = tm_map(crude, tolower)
crude = tm_map(crude, removePunctuation)
crude = tm_map(crude, removeWords, stopwords("english"))
crude = tm_map(crude, stemDocument)
dtm = DocumentTermMatrix(crude)
sparse = as.data.frame(as.matrix(removeSparseTerms(dtm, 0.8)))
spl = runif(length(crude)) < 0.7
train = subset(sparse, spl)
test = subset(sparse, !spl)
基本上,我預處理語料庫,構建文檔長期矩陣,去除稀疏項,然後分解成訓練和測試集。
雖然這對tm
軟件包非常簡單,但我不喜歡它的一點是,它隱式使用訓練和測試集來確定包含哪些術語(也稱爲removeSparseTerms
,在我分裂爲培訓和測試集)。儘管隨機訓練/測試集合分裂可能不會太差,因爲我們預計訓練和測試集合之間的詞頻頻率相似,但它可能會嚴重影響非隨機分裂的分裂(例如,當使用順序觀察時) 。
我想知道是否有人有一個相對簡單的方法(使用tm
)提前移動訓練/測試拆分,僅根據訓練集中的詞頻刪除疏散詞,然後刪除測試集中的詞它的列與訓練集的列匹配。