Spark MLlib求解Precision, Recall, F1 使用Java
Maven依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>2.2.0</version>
</dependency>
使用的核心类
org.apache.spark.mllib.evaluation.BinaryClassificationMetrics
理论准备
在机器学习中的二分类问题,仅仅使用accuracy不足够准确和足以度量模型,尤其是当数据集正负样本不均衡时。
例子:
银行对用户分类为二类即信用好和差,来进行发放信用卡。
那么即使不做数据挖掘,而是直接判定所有用户的信用都是好的,那么accuracy也是够高的。
但是很显然,银行对信用差的用户更加在意,需要对这少数群体更慎重划分。
Precicion, Recall, F1
首先引入混淆矩阵和True Positive(TP), False Positive(FP), False Negative(FN), True Negative(TN)。
Positive样本(对应1/0中的1)对应的是 数量少的那方,也就是上面例子中的信用差的群体。
label=1 | label=0 | |
---|---|---|
prediction=1 | TP | FP |
prediction=0 | FN | TN |
对上面的混淆矩阵解释一下:
对于TP, FP, FN, TN都是两个字母:
- 第1个字母:是预测做的的对不对,显然当预测和label一致时是T,否认是F。
- 第2个字母:是predict的值,预测什么值这里就是什么。
计算Precision
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP + FP} Precision=TP+FPTP
即对于表格内容的第一行而言,TP占比。
计算Recall