Github user rezazadeh commented on a diff in the pull request:
https://github.com/apache/spark/pull/1778#discussion_r17523206
--- Diff:
mllib/src/main/scala/org/apache/spark/mllib/linalg/distributed/RowMatrix.scala
---
@@ -390,6 +393,79 @@ class RowMatrix(
new RowMatrix(AB, nRows, B.numCols)
}
+ /**
+ * Find all similar columns using cosine similarity.
+ *
+ * @return An n x n sparse matrix of cosine similarities between columns
of this matrix.
+ */
+ def similarColumns(): CoordinateMatrix = {
+ similarColumns(Double.PositiveInfinity)
+ }
+
+ /**
+ * Find all similar columns using the DIMSUM sampling algorithm,
described in
+ * http://arxiv.org/abs/1304.1467
+ *
+ * @param gamma The oversampling parameter. For provable results, set to
4 * log(n) / s,
+ * where s is the smallest similarity score to be estimated,
+ * and n is the number of columns
+ * @return An n x n sparse matrix of cosine similarities between columns
of this matrix.
+ */
+ def similarColumns(gamma: Double): CoordinateMatrix = {
+ similarColumnsDIMSUM(columnMagnitudes(), gamma)
+ }
+
+ /**
+ * Return 2-norm of the columns of this matrix.
+ * @return an array of column magnitudes
+ */
+ def columnMagnitudes(): Array[Double] = {
+ rows.map { x =>
+ val brzX = x.toBreeze
+ brzX.:*(brzX)
+ }.fold(BDV.zeros[Double](numCols().toInt))(_ +
_).toArray.map(math.sqrt(_))
+ }
+
+ /**
+ * Find all similar columns using the DIMSUM sampling algorithm,
described in
+ * http://arxiv.org/abs/1304.1467
+ *
+ * @param colMags A vector of column magnitudes
+ * @param gamma The oversampling parameter. For provable results, set to
4 * log(n) / s,
+ * where s is the smallest similarity score to be estimated,
+ * and n is the number of columns
+ * @return An n x n sparse matrix of cosine similarities between columns
of this matrix.
+ */
+ def similarColumnsDIMSUM(colMags: Array[Double], gamma: Double):
CoordinateMatrix = {
--- End diff --
Marked as private to mllib
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]