numpy - 亚马逊 EC2 与 PiCloud

标签 numpy hadoop amazon-ec2 machine-learning mahout

<分区>

我们是学生,试图处理大约 1.4 亿条记录的数据大小,并尝试运行很少的机器学习算法。我们是整个云解决方案和 mahout 实现的新手。目前我们已经在 postgresql 数据库中设置了它们,但是当前的实现没有扩展,并且在多次性能调整后读/写操作似乎非常慢。因此我们计划寻求基于云的服务。

我们已经探索了一些可能的替代方案。

  1. 基于亚马逊云的服务(Mahout 实现)
  2. Picloud with scikits learn(我们计划使用 NumPy 的 HDF5 格式)
  3. 请推荐任何其他替代方案(如果有)。

下面是问题

  1. 哪个会给我们带来更好的结果(周转时间)并且成本效益高?请务必向我们提及存在的任何其他替代方案。
  2. 如果我们设置亚马逊服务,我们应该如何设置数据格式?如果我们使用 dynamodb 成本会飙升吗?

谢谢

最佳答案

这取决于您要解决的机器学习问题的性质。我建议您首先将您的数据集子采样到适合内存的东西(例如,假设稀疏表示,每个样本有几百个非零特征的 100k 个样本)。

然后在 scikit-learn 中尝试一些可扩展到大量样本的机器学习算法:

  • SGDClassifier 或 MultinomialNB,如果您想进行监督分类(如果您在数据集中有要预测的分类标签)
  • SGDRegressor 如果你想做监督回归(如果你有连续的目标变量来预测)
  • MiniBatchKMeans 聚类进行无监督聚类(但默认情况下没有客观的方法来量化所得聚类的质量)。
  • ...

执行网格搜索以找到模型超参数的最佳值(例如正则化器 alpha 和 SGDClassifier 的传递次数 n_iter)并使用评估性能交叉验证。

完成后,使用 2 倍大的数据集(仍适合内存)重试,看看它是否能显着提高您的预测准确性。如果不是这种情况,那么不要浪费时间尝试在集群上并行化它以在完整数据集上运行它,因为它不会产生任何更好的结果。

如果它做了你能做的,将数据分成几部分,然后在每个节点上切片数据,使用 picloud 独立学习每个节点上的 SGDClassifier 或 SGDRegressor 模型并收集权重(coef_intercept_),然后计算平均权重以构建最终的线性模型,并在数据集的某些保留切片上对其进行评估。

了解更多错误分析。查看如何绘制学习曲线:

关于numpy - 亚马逊 EC2 与 PiCloud,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9653060/

相关文章:

hadoop - pig : count of each product in distinctive Locations

java - 如何在亚马逊 EC2 中启用 mod_proxy?

amazon-web-services - Amazon RDS 和 VPC 端点连接

python - 如何使 Numba 访问数组的速度与 Numpy 一样快?

python - 操作 numpy 数组

python - 查找一个 numpy 数组中的值落在另一个 numpy 数组中的值之间的位置

python - 按值从 numpy 数组中删除元素

eclipse - 将PDF文件转换为HDFS(JAVA)上的文本

c# - 是否有与 Apache Hadoop 等效的 .NET?

amazon-web-services - 通过 Cloudformation-Update 堆栈修改 EC2 上的文件