MLIib全貌
ML Algorithms (ML 算法): 常用的学习算法,如分类,回归,聚类和协同过滤
Featurization (特征): 特征提取,变换,降维和选择
Pipelines (管道): 用于构建,评估和调整 ML Pipelines 的工具
Persistence (持久性): 保存和加载算法,模型和 Pipelines
Utilities (实用): 线性代数,统计学,数据处理等
主要内容
- 相关性
- 假设验证
- 累计计数器
相关性
计算两个物体的相关性是统计里常见的操作。在spark.ml中我们会提供灵活的函数来计算多个物体的相关性。现在我们提供的相关系数只有Spearman和Pearson。
(关于两者可参见http://blog.sina.com.cn/s/blog_69e75efd0102wmd2.html,简单说两者后者对异常值波动比较多设置无法计算,而前者可以,更加广泛)
Correlation使用特定的方法计算输入Vectors的相关矩阵。这个输出是一个DataFrame包括了这个相关矩阵的所有列向量。
import org.apache.spark.ml.linalg.{Matrix, Vectors}
import org.apache.spark.ml.stat.Correlation
import org.apache.spark.sql.Row
val data = Seq(
Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),
Vectors.dense(4.0, 5.0, 0.0, 3.0),
Vectors.dense(6.0, 7.0, 0.0, 8.0),
Vectors.sparse(4, Seq((0, 9.0), (3, 1.0)))
)
val df = data.map(Tuple1.apply).toDF("features")
val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
println(s"Pearson correlation matrix:\n $coeff1")
val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
println(s"Spearman correlation matrix:\n $coeff2")
假设验证
假设验证是一个十分有用的工具应用去决定结果是否具有统计学意义,不管这个结果是否是偶然发生的。spark.ml目前支持Pearson’s Chi-squared ( χ2) 的独立验证。(皮尔逊卡方值:研究两个定类变量间是否独立即是否存在某种关联性的最常用的方法)
ChiSquareTest会针对每一个标签对特征值进行一次皮尔逊独立测试。会把(特征值,标签)对转化为一个列联矩阵(算以最大似然法为参数规则可能性矩阵)来计算Chi-squared。所有的标签和特征值都必须是明确的。
import org.apache.spark.ml.linalg.{Vector, Vectors}
import org.apache.spark.ml.stat.ChiSquareTest
val data = Seq(
(0.0, Vectors.dense(0.5, 10.0)),
(0.0, Vectors.dense(1.5, 20.0)),
(1.0, Vectors.dense(1.5, 30.0)),
(0.0, Vectors.dense(3.5, 30.0)),
(0.0, Vectors.dense(3.5, 40.0)),
(1.0, Vectors.dense(3.5, 40.0))
)
val df = data.toDF("label", "features")
val chi = ChiSquareTest.test(df, "features", "label").head
println(s"pValues = ${chi.getAs[Vector](0)}")
println(s"degreesOfFreedom ${chi.getSeq[Int](1).mkString("[", ",", "]")}")
println(s"statistics ${chi.getAs[Vector](2)}")
累计器
77/5000
我们通过Summarizer为Dataframe提供矢量列摘要统计。我们可以获得一些有用的指标,列的最大值,最小值,平均值,非0个数还有总计。
网友评论