【问题标题】:R knn large datasetR knn 大数据集
【发布时间】:2012-01-03 08:45:08
【问题描述】:

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

编辑:

为了澄清有几个问题。

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

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

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

pred <- predict(RF, testData)

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

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

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

【问题讨论】:

  • 只是想知道,就训练集大小而言,您最终将其推进了多远?
  • @ktdrv:我相信我设法完成了完整的数据集。我会推荐在 'caret' 包中实现 knn 有两个原因。首先,它允许调整“k”参数。其次,它是我用过的最快的 knn 模型,它允许并行化(尽管我没有看到 knn 的东西有很大的提升)。这里有一套很好的解释和例子来启动和运行:jstatsoft.org/v28/i05/paper

标签: r knn


【解决方案1】:

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

训练数据模型。

为了进行预测,knn 计算测试观察和每个训练观察之间的距离(尽管我认为对于不检查所有距离的超大数据集有一些花哨的版本) .因此,在您获得测试观察结果之前,并没有真正要构建的模型。

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

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

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

【讨论】:

  • 感谢您的建议。像 big.matrix 或 ff 这样的东西会是有效的解决方法吗?
  • @acesnap 也许;我实际上对这些工具没有太多经验。如果我站在你的立场上,我会简单地将我的测试集分成knn 将处理的最大块,并一次做出一个预测。 (并购买更多 RAM;它非常便宜!)
  • 您说的“类”版本更好。只需要稍微处理一下格式。再次感谢您的帮助和解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 2020-04-08
  • 1970-01-01
  • 2019-06-24
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多