2011-11-21 92 views
5

我试图用R中的knn(使用几个包(knnflex,class))来根据8个变量预测违约概率。该数据集大约有8行的10万行,但我的机器似乎在10K行的样本上有困难。对数据集> 50行(即iris)做任何建议?R knn大型数据集

编辑:

澄清有几个问题。

1)在classknnflex包的例子是有点不清楚,我很好奇,如果有类似的地方,你给它的变量,你要预测你要使用的随机森林包和数据的一些实施训练模式:

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

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

pred <- predict(RF, testData) 

2)我真的不明白为什么要knn赖宁g AND建立模型的测试数据。从我所知道的情况来看,该软件包创建了一个矩阵〜nrows(trainingData)^2,这似乎也是预测数据大小的上限。我使用5000行创建了一个模型(高于#我有内存分配错误),无法预测测试集> 5000行。因此,我需要两种:

一)找到一种方法,在一次训练中使用> 5000行设置

B)找到一种方法,使用该模型对全行10万。

+0

只是想知道,你最终设法推进这个 - 在训练集大小方面? – ktdrv

+0

@ktdrv:我相信我设法完成了完整的数据集。我会推荐'caret'包中的knn实现,原因有两个。首先它允许调整'k'参数。其次,它是我使用的最快的knn模型,它允许并行化(尽管我没有看到knn的巨大吸引力)。 下面是一组很好的解释和例子,以启动和运行:http://www.jstatsoft.org/v28/i05/paper – screechOwl

回答

8

knn(在)要求同时提供训练和测试数据的原因是,如果不这样做,“模式”,它将返回,简直是训练数据本身。

训练数据的模型。

作出预测,knn计算测试观察和每个训练观察之间的距离(虽然我认为有一些奇特的版本出奇的大数据集不检查每一个距离)。因此,除非你有测试观察,否则没有真正的模型可供构建。

IPRED包提供你描述出现的结构化的功能,但如果你看看他们,你会看到有基本上没有什么在“培训”功能发生。所有的工作都在“预测”功能中。而这些真正用作使用交叉验证进行误差估计的包装。

至于案件数量的限制,这将取决于你有多少物理内存。如果您收到内存分配错误,那么您可能需要在其他地方减少你的内存使用(关闭应用程序等),购买更多的RAM,购买一台新电脑,等

knn功能运行正常对于我来说,训练和测试数据集的10k行或更多,尽管我有8GB的RAM。另外,我怀疑knn将会比在knnflex更快,但我还没有做过广泛的测试。

+0

感谢您的建议。像big.matrix或ff会是有效的解决方法吗? – screechOwl

+0

@acesnap也许;我其实对这些工具没有太多经验。如果我在你的鞋子里,我会简单地将我的测试集打碎成'knn'将要处理的最大块,并且一次一个地进行预测。 (并购买更多的内存;这是相当便宜!) – joran

+0

你说得对''级'版本更好。只需要处理一下格式。再次感谢您的帮助和解释。 – screechOwl