Mar*_*rko 10 apache-spark apache-spark-ml apache-spark-mllib
Spark现在有两个机器学习库 - Spark MLlib和Spark ML.它们在实现的内容上有些重叠,但正如我所理解的那样(作为整个Spark生态系统的新手)Spark ML是可行的方式,MLlib仍然主要用于向后兼容.
我的问题非常具体,与PCA有关.在MLlib实现中,似乎存在列数的限制
spark.mllib支持PCA,用于存储以行为导向格式和任何向量的高小矩阵.
另外,如果你看一下Java代码示例,也会有这个
列数应该很小,例如小于1000.
另一方面,如果你看一下ML文档,没有提到的限制.
所以,我的问题是 - Spark ML中是否也存在这种限制?如果是这样,为什么限制,即使列数很大,是否有任何解决方法可以使用此实现?
PCA 包括找到一组可以用来表示数据的去相关随机变量,并根据它们保留的方差量按降序排序。
可以通过将数据点投影到特定的正交子空间来找到这些变量。如果您的(以均值为中心的)数据矩阵是X ,则该子空间由X^TX的特征向量组成。
当X很大时,例如维度为n x d时,您可以通过计算矩阵每一行本身的外积,然后将所有结果相加来计算X^TX 。如果d很小,无论n有多大,这当然适合简单的映射归约过程。这是因为每行本身的外积是一个d x d矩阵,每个工作人员都必须在主内存中对其进行操作。这就是为什么您在处理许多列时可能会遇到麻烦。
如果列数很大(而行数不是那么多),你确实可以计算 PCA。只需计算(以平均值为中心)转置数据矩阵的 SVD,并将其乘以所得特征向量和特征值对角矩阵的逆矩阵。这就是正交子空间。
底线:如果spark.ml实现每次都遵循第一种方法,那么限制应该是相同的。如果他们检查输入数据集的维度来决定是否应该采用第二种方法,那么如果行数很少,那么在处理大量列时就不会有问题。
不管怎样,限制是由你的工作人员拥有多少内存决定的,所以也许他们让用户自己达到上限,而不是提出一个可能不适用于某些人的限制。这可能就是他们决定不在新文档中提及限制的原因。
更新:源代码显示,无论输入的维度如何,他们每次都会采用第一种方法。实际限制是 65535,达到 10,000 时他们会发出警告。
归档时间: |
|
查看次数: |
3246 次 |
最近记录: |