kNN - r 中有很多联系

Posted

技术标签:

【中文标题】kNN - r 中有很多联系【英文标题】:lots of ties in kNN - r 【发布时间】:2016-09-01 13:37:04 【问题描述】:

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

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

结束编辑。

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

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

这里是 kNN r 线:

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

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

它们都不起作用。

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

还有一个重要说明:我在所有列上应用了unique() 函数,我注意到没有任何列只有一个值。它们都是多种多样的。

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

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

【问题讨论】:

does not work - 什么不起作用?您收到错误消息还是运行了很长时间? @Tgsmith61591 实际上是的。它运行了很长时间。 @jogo 我编辑了我的问题。请再检查一遍好吗? 插入符号可以处理领带...不是那样的。像这样的聚类技术是计算密集型的。运行多长时间? 【参考方案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 个示例的数据集上执行相同操作所需的两倍,因为时间是训练的函数- n x 测试-n.

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

提高速度

将您的数据分组将给您带来二次性能提升。例如,将一个 n=2000 的数据集随机拆分为 2 个 n=1000 的数据集,性能会提高 4 倍。

处理关系

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

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

    对分类变量运行对应分析,然后对对应分析返回的值(连续且正交)运行 kNN。 FactoMineR 库有一个有据可查的函数 MCA 用于多重对应分析。

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

【讨论】:

以上是关于kNN - r 中有很多联系的主要内容,如果未能解决你的问题,请参考以下文章

光标错误,从电话联系人列表中获取电话联系人

如何删除一个联系人中有多个号码的iphone联系人?

iOS-获取通讯录联系人信息

机器学习实战之kNN

KNN 算法,以及与Kmeans的简单对比

Centos和Redhat的区别与联系