我正在尝试使用k最近邻分类在两个组中的公告("call for"
)和讨论("discussions"
)上拆分一些电子邮件。我想这可以使用
knn(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)
我已经有了文档术语矩阵mails
。我不知道如何使用此文档术语矩阵构建train
,test
矩阵和cl
因子。我找不到任何好的例子,也不理解http://stat.ethz.ch/R-manual/R-devel/library/class/html/knn.html上的例子。有没有人可以指出我正确的方向?
UPD
整个TermDocumentMatrix位于dl.dropboxusercontent.com/u/20641416/data
答案 0 :(得分:2)
好吧,我无法解决您的问题,因为我没有样本数据。但是,我可以为您阐明文档中的示例,以便您可以了解正在发生的事情。
train 是“基准”数据,其分类已为人所知。它将用于形成knn结构,这将允许您进行未来的预测。
cl 是训练数据集的正确答案。
这里使用内置数据集iris来模拟“已知数据”。采集火车数据集,使每个物种的数量相等(s - Setosa,c - Versicolor,v - Virginica)。
train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3])
cl <- factor(c(rep("s",25), rep("c",25), rep("v",25)))
相同的数据集用于构建测试数据。当然,我们知道这里的真正分类,但我们假装没有。真正的分类与以前相同;它不能被knn使用:因为knn这个信息不可用。我们存储这些数据是为了估计我们的预测。
test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3])
cl.test <- cl
最后,我们准备继续。这是测试数据集的预测向量。如果prob = TRUE,我们还会看到算法对每种情况的“自信”:
pr.test <- knn(train, test, cl, k = 3, prob=TRUE)
[1] s s s s s s s s s s s s s s s s s s s s s s s s s c c v c c c c c v c c c c c c c c c c
[45] c c c c c c v c c v v v v v c v v v v c v v v v v v v v v v v
attr(,"prob")
[1] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[9] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[17] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[25] 1.0000000 1.0000000 1.0000000 0.6666667 1.0000000 1.0000000 1.0000000 1.0000000
[33] 1.0000000 0.6666667 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[41] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[49] 1.0000000 1.0000000 1.0000000 0.6666667 0.7500000 1.0000000 1.0000000 1.0000000
[57] 1.0000000 1.0000000 0.5000000 1.0000000 1.0000000 1.0000000 1.0000000 0.6666667
[65] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 0.6666667
[73] 1.0000000 1.0000000 0.6666667
Levels: c s v
我们现在可以估计我们的模型是多么正确。
sum(pr.test==cl.test)/length(cl.test)
75分中有70分,或93%正确。
有关knn如何工作的更多详细信息,请参阅统计文献。对于您的问题,请考虑交叉验证技术来调整模型。