5

我正在尝试在 R 中使用 knn(使用了几个包(knnflexclass))来预测基于 8 个变量的默认概率。数据集大约有 8 列的 100k 行,但我的机器似乎很难处理 10k 行的样本。iris对于在 > 50 行(即)的数据集上做 knn 有什么建议吗?

编辑:

为了澄清有几个问题。

1) classandknnflex包中的例子有点不清楚,我很好奇是否有一些类似于 randomForest 包的实现,在其中你给它你想要预测的变量和你想要用来训练模型的数据:

RF <- randomForest(x, y, ntree, type,...) 

然后转身用模型预测数据使用测试数据集:

pred <- predict(RF, testData)

2)我不太明白为什么knn需要训练和测试数据来构建模型。据我所知,该包创建了一个矩阵 ~nrows(trainingData)^2似乎也是预测数据大小的上限。我使用 5000 行创建了一个模型(在此之上#我遇到了内存分配错误)并且无法预测测试集 > 5000 行。因此,我需要:

a) 找到一种在训练集中使用 > 5000 行的方法

或者

b) 找到一种在全部 100k 行上使用模型的方法。

4

1 回答 1

8

knn(在class中)要求训练和测试数据的原因是,如果没有,它将返回的“模型”只是训练数据本身。

训练数据就是模型。

为了做出预测,计算一个测试观察和每个knn训练观察之间的距离(尽管我认为有一些非常大的数据集不检查每个距离的奇特版本)。因此,在您获得测试观察结果之前,并没有真正要构建的模型。

ipred包提供的函数看起来像您描述的那样结构化,但是如果您查看它们,您会发现“训练”函数中基本上没有发生任何事情。所有工作都在“预测”功能中。这些实际上是用作包装器,用于使用交叉验证进行错误估计。

至于案例数量的限制,这将取决于您拥有多少物理内存。如果您遇到内存分配错误,那么您需要减少其他地方的 RAM 使用量(关闭应用程序等)、购买更多 RAM、购买新计算机等。

尽管我有 8gb 的 RAM,但类中的knn函数对我来说运行良好,训练和测试数据集为 10k 行或更多。另外,我怀疑在课堂上会比在knnflex中更快,但我还没有进行广泛的测试。knn

于 2011-11-21T22:33:25.333 回答