不得不吐槽一下,Scala真的是一门奇葩的语言,太强大了,只要你好好思考,写出来的代码绝对很漂亮,瞬间感觉java太low了。
package Utils
import com.google.common.math.{DoubleMath, IntMath}
/**
* Created by fhqplzj on 16-8-24 at 下午2:12.
*/
object Evaluation {
/**
* 检查标签
*
* @param labelsTrue
* @param labelsPred
*/
private def labelChecker(labelsTrue: Array[Int], labelsPred: Array[Int]): Unit = {
require(labelsTrue.length == labelsPred.length && labelsTrue.length >= 2, "The length must be equal!" +
"The size of labels must be greater than 1!")
}
/**
* 纯度:Purity
*
* @param labelsTrue
* @param labelsPred
* @return
*/
def purity(labelsTrue: Array[Int], labelsPred: Array[Int]) = {
labelChecker(labelsTrue, labelsPred)
val eachCount: Map[(Int, Int), Int] = labelsTrue.zip(labelsPred).groupBy(x => x).mapValues(_.length)
eachCount.groupBy(_._1._1).mapValues(_.values.max).values.sum.toDouble / labelsTrue.length