集群中的精度和召回(Spark,Scala中的应用)

时间:2017-08-04 20:06:16

标签: scala apache-spark apache-spark-sql

尝试解决Spark中的聚类算法测量模型评估统计(精度和召回)的问题。 Original inspiration from cross validated用于基于成对重叠的群集评估深层次的响应。

创建此样本测试数据,我能够得到预测的总预测值。

你将如何计算真正的积极因素?特别是,火花数据帧的转换得到了结果。非常感谢任何灵感。

+-----+----------+
|label| cluster  |
+-----+----------+
|    x|         1|
|    x|         1|
|    x|         1|
|    x|         1|
|    x|         1|
|    x|         2|
|    x|         3|
|    x|         3|
|    o|         1|
|    o|         2|
|    o|         2|
|    o|         2|
|    o|         2|
|    d|         2|
|    d|         3|
|    d|         3|
|    d|         3|
+-----+----------+
// the nCk function to be used as a UDF
def choose(n: Int, k: Int): Int ={ 
  if (k==0) 1 else (n * choose(n-1, k-1)) / k 
}

val udf_choose = udf(choose _)

// the combined sum of true positive and false positive
val tp_fp = (df.groupBy("cluster")
               .count()
               .filter($"count" > 1)
               .withColumn("combinations", udf_choose($"count", lit(2)))
               .agg(sum("combinations"))
               .first().getLong(0))

// How to calculate True Positive?

输出

tp_fp: Long = 40

1 个答案:

答案 0 :(得分:1)

用于分类的度量标准对于聚类算法毫无意义。在应用标准聚类技术时,没有“真实”的答案,结果会受到以下因素的严重影响:

  • 初始化过程。
  • 训练数据集的确切内容(在某些情况下,添加或删除单个对象会显着影响最终结果)。

同时,聚类算法不在其成本函数中使用标签。

最后分配的标签没有任何特殊含义。您可以在不影响总体成本的情况下置换标签。

如果聚类基于欧几里德距离,则质量测量的合理选择是聚类间,聚类内方差。