kNN中有很多关系 -

时间:2016-05-06 12:57:58

标签: r machine-learning classification r-caret knn

修改 我试图通过r中的kNN(插入符号包)分类器对数据集建模,但它运行了很长时间。最终我停止了它。有时我停止它,它说“使用警告()来查看所有警告信息”。当我这样做时,它表示数据集中每列的“很多关系”。我在这里找到了一些解决这个问题的方法,但是在我的情况下没有一个能够解决。他们说“将一些伪随机噪声数据放入数据集,它将起作用”。我试过了,但没有用:

https://stats.stackexchange.com/questions/25926/dealing-with-lots-of-ties-in-knn-model

结束编辑。

这就是为什么我要将我的火车数据集链接给你们,所以也许你们其中一个人可以理解为什么kNN在建模时卡住了:

http://www.htmldersleri.org/train.csv(众所周知路透社-21578数据集)

这是kNN r行:

knn<-train(as.factor(class)~.,data=as.matrix(train),method="kNN")

knn<-train(as.factor(class)~.,data=train,method="kNN")

他们都没有工作。

顺便说一下,使用kNN代替svmLinear也不起作用。

并且重要提示:我在所有列上应用了unique()函数,并且我注意到没有任何列只有一个值。它们都各不相同。

最后,这是项目报告中的数据集信息部分,可能很有用:

  

在Reuters-21578数据集中,我们使用了前十名; 7269个样本   训练集和测试集中的2686个样本。的分布   课程是不平衡的。最大班级有2899个文件,占用   39,88%的训练集。最小班级有113个文件占用   1,55%的训练集。表I显示了十个最常见的类别   以及每个培训和测试集示例的数量。

Dataset

1 个答案:

答案 0 :(得分:1)

为什么kNN和SVM在此数据集上的速度很慢

k - 最近邻居(kNN)和支持向量机(SVM,你在后面的问题中提到)随着样本量的增加( n )增加。从广义上讲,您可以将此视为Big O notation中的二次O(n ^ 2)增长率,尽管事实比这更为细微。

在kNN的情况下,原因很容易理解:它需要构造train- n x test- n 距离矩阵。这意味着1,415个示例的数据集上的kNN或SVM可能需要两次,只要对1,000个示例的数据集执行相同操作,因为时间是train- 的函数n x test- n

因此,这些算法在内存中处理的数据集大小有一个上限,这远低于逻辑回归或梯度提升机器的限制。

提高速度

将您的数据拆分成组将为您提供二次性能改进。例如,将n = 2000数据集随机分成2 n = 1000个数据集,可以使性能提高4倍。

处理关系

更重要的是,看起来您正试图在分类输入数据上训练您的模型。 kNN旨在处理数字输入数据。分类变量必须为recoded as dummy variables。您没有收到错误消息,因为分类变量存储为数字代码,但这并不意味着数字在数学上对于kNN的距离计算有意义。

您获得了很多联系,因为您的数据集包含许多编码为整数的分类变量,可能的值相对较少。您可以通过以下几种方式处理此问题:

  1. 对分类变量运行对应分析,然后对对应分析返回的值(连续和正交)运行kNN。 FactoMineR库有一个记录良好的函数MCA,用于多重对应分析。

  2. 将每个因子转换为虚拟变量(如上面链接中所述),然后使用更适合稀疏数据的距离度量 - cosine similarity。遗憾的是,您无法使用caret的余弦相似度运行kNN,但可以手动实施,如this SO thread中所述。