IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> pyspark.ml 获取ROC曲线 -> 正文阅读

[大数据]pyspark.ml 获取ROC曲线

一. 只计算AUC值

直接计算auc值比较简单,,直接用pyspark.ml.evaluation即可:

evaluator = BinaryClassificationEvaluator(rawPredictionCol="probability", labelCol="label")
areaUnderPR = evaluator.evaluate(dataSetWithProba, {evaluator.metricName: "PR"}) # 0.6474016172819991  

二. 获取ROC曲线

1. 如果只需要获取train的ROC曲线点,直接用summnary即可

trainingSummary = LrModel.summary
print('ROC曲线绘图点:')
trainingSummary.roc.show()
print("AUC:"trainingSummary.areaUnderROC) 0.646777751909773 

2. 如果需要该模型对其他数据集预测结果的ROC曲线

方法一: 利用sklearn

注意:需要转换数据格式

# 数据格式转换
def get_prob_target(dataSetWithProba):
        return dataSetWithProba.select('label','probability').rdd.map(lambda row: (float(row['probability'][1]), float(row['label']))).collect()
def get_roc_curve(dataSetWithProba):
        dataSetWithProba=get_prob_target(dataSetWithProba)
        y_label=[i[1] for i in dataSetWithProba]
        y_pred=[i[0] for i in dataSetWithProba]
        return y_label,y_pred
        
from sklearn import metrics
fpr, tpr, thersholds = roc_curve(y_label, y_pred) # len=10262
auc=metrics.auc(fpr,tpr) # 0.6474016172819987
print('ROC曲线绘图点:')
print("AUC: ",auc)

方法二:利用pyspark.mllib.evaluation

Scala中BinaryClassificationMetrics函数提供了提取ROC曲线的方式,但pyspark中没有提供,因此需要先从Scala模块中借用

from pyspark.mllib.evaluation import BinaryClassificationMetrics

# Scala version implements .roc() and .pr()
# Python: https://spark.apache.org/docs/latest/api/python/_modules/pyspark/mllib/common.html
# Scala: https://spark.apache.org/docs/latest/api/java/org/apache/spark/mllib/evaluation/BinaryClassificationMetrics.html
class CurveMetrics(BinaryClassificationMetrics):
    def __init__(self, *args):
        super(CurveMetrics, self).__init__(*args)

    def _to_list(self, rdd):
        points = []
        # Note this collect could be inefficient for large datasets
        # considering there may be one probability per datapoint (at most)
        # The Scala version takes a numBins parameter,
        # but it doesn't seem possible to pass this from Python to Java
        for row in rdd.collect():
            # Results are returned as type scala.Tuple2,
            # which doesn't appear to have a py4j mapping
            points += [(float(row._1()), float(row._2()))]
        return points

    def get_curve(self, method):
        rdd = getattr(self._java_model, method)().toJavaRDD()
        return self._to_list(rdd)

preds = sdf.select(label,'prediction').rdd.map(lambda row: (float(row['prediction']), float(row[label]))) 

# Returns as a list (false positive rate, true positive rate)
points = CurveMetrics(preds).get_curve('roc')
fpr = [x[0] for x in points] # len=33964,相当于原始预测值去重后数量+2
tpr = [x[1] for x in points]
auc_roc = BinaryClassificationMetrics(preds).areaUnderROC # 0.6474016172819987 

plt.figure()
plt.title(title)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.plot(fpr, tpr)

result['figure'] = {'title': 'ROC曲线',
                    'AUROC': auc_roc,
                    'x': [1-f for f in fpr],
                    'y': tpr,
                    'xlabel': '特异度',
                    'ylabel': '灵敏度'}

比较:
采用相同数据测试后,两种方法得到的auc值一样,但pyspark.mllib.evaluation比sklearn.metrics得到的曲线点多。

参考:
pySpark提取ROC曲线

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:15:00  更:2022-04-06 23:17:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:45:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码