R:k最近邻分类

标签 r nearest-neighbor knn

我正在尝试使用 k-nearest 将有关公告(“呼吁”)和讨论(“讨论”)的电子邮件分成两组邻居分类。我想这可以使用

来完成
knn(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)

我已经有了文档术语矩阵mails。我不知道如何使用此文档术语矩阵构建 traintest 矩阵和 cl 因子。我找不到任何好的例子,也不明白 http://stat.ethz.ch/R-manual/R-devel/library/class/html/knn.html 上的例子。有谁可以指出我正确的方向吗?

UPD

整个 TermDocumentMatrix 位于 dl.dropboxusercontent.com/u/20641416/data

最佳答案

好吧,我无法解决你的问题,因为我没有样本数据。不过,我可以为您澄清文档中的示例,以便您可以首先了解发生了什么。

  • train 是“基准”数据,其分类已知。它将用于形成 knn 结构,这将允许您做出 future 的预测。

  • 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)))
  • test 是您尝试分类的数据集。给定现有(经过训练的)knn 结构,逐行分析测试观察结果,并生成预测。

使用相同的数据集来构建测试数据。当然,我们知道这里的真正分类,但我们假装不知道。真实分类与之前相同; 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 工作原理的更多详细信息,请参阅统计文献。对于您的问题,请考虑使用交叉验证技术来调整模型。

关于R:k最近邻分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20657233/

相关文章:

r - 将函数应用于 data.table 的每一行

algorithm - 近似最近邻时间复杂度

python - 如何优化这段代码以进行 nn 预测?

python - 使用python numpy在3d空间中找到一个点的k个最近邻居

python - 在 50 个变量 x 100k 行数据集上优化 K 最近邻算法

r - 如何将 R 数据帧作为 CSV 文件上传到 Azure Blob 存储上?

读取.xlsx 'Error in loadWorkbook(file): Cannot find file' R

r - H2O 不能从 H2OParsedData 子集列

java - 如何使用java获得weka中的最近邻居

r - 我收到错误 "Error in knn(train = prc_train, test = prc_test, cl = prc_train_labels, : no missing values are allowed"