如何使用 Scala 对 Spark 中的输出使用相关性

How to Use Correlation Against the Output in Spark using Scala

我正在阅读 O'Reilly 的书 Hands-On Machine Learning with Scikit-Learn,在端到端的机器学习示例中,我们使用住房数据集,我遇到了这个部分我们使用一些统计数据,如 toe Corelation 来确定输入特征对输出的依赖程度,在 Python 和 Pandas 库中,它就像这样做一样简单:

corr_matrix = housing.corr() 

然后执行以下操作:

corr_matrix["median_house_value].sort_values(ascending=False)

然后给出 median_house_value 与所有其他输入特征相关的良好文本输出。我现在尝试在 Scala 中使用 Spark 复制它,我有以下内容:

import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.stat.Correlation
import org.apache.spark.ml.linalg.Matrix
 
val assembler = new VectorAssembler()
  .setInputCols(Array("longitude", "latitude", "housing_median_age", "total_rooms", "population", "households", "median_income", "median_house_value"))
  .setOutputCol("features")
 
val assembled = assembler.transform(dfRaw)

val coeff_df = Correlation.corr(assembled, "features")

val Row(coeff_matrix: Matrix) = coeff_df.head
println(s"Pearson correlation matrix:\n " + coeff_matrix.toString(10, 100000))

可以看出,我可以打印矩阵,但是我如何在 Scala 中复制那一行 Python 代码,以便我可以按升序看到类似的结果?

没有直接的方法来做到这一点,所以我想出了这个几乎可以满足我的要求:

coeff_matrix.rowIter.toSeq.last.toDense.toArray.sorted.reverse foreach println

给我:

1.0
0.6880752079585478
0.13415311380656308
0.10562341249320993
0.06584265057005646
-0.024649678888894886
-0.04596661511797852
-0.14416027687465932

结果不像 Python 版本那样直观。但至少我能够把它拉得足够近。