【问题标题】:pyspark 2.2.0 concept behind raw predictions field of logistic regression model逻辑回归模型的原始预测领域背后的pyspark 2.2.0概念
【发布时间】:2018-06-23 17:19:54
【问题描述】:

我试图理解 Pyspark 中逻辑回归模型生成的输出的概念。

谁能解释从逻辑回归模型生成的rawPrediction 字段计算背后的概念? 谢谢。

【问题讨论】:

    标签: machine-learning pyspark logistic-regression apache-spark-ml


    【解决方案1】:

    在旧版本的 Spark javadocs(例如 1.5.x)中,曾经有如下解释:

    “原始”预测的含义可能因算法而异,但它直观地给出了每个可能标签的置信度(其中越大 = 越置信)。

    在以后的版本中没有了,但你仍然可以在 Scala 中找到它source code

    无论如何,除了任何不幸的措辞,Spark ML 中的rawPrecictions 用于逻辑回归案例,世界其他地方都称之为logits,即逻辑回归分类器的原始输出,随后使用logistic functionexp(x)/(1+exp(x))转换成概率分数。

    这是一个玩具数据的例子:

    spark.version
    # u'2.2.0'
    
    from pyspark.ml.classification import LogisticRegression
    from pyspark.ml.linalg import Vectors
    from pyspark.sql import Row
    df = sqlContext.createDataFrame([
         (0.0, Vectors.dense(0.0, 1.0)),
         (1.0, Vectors.dense(1.0, 0.0))], 
         ["label", "features"])
    df.show()
    # +-----+---------+
    # |label| features|
    # +-----+---------+
    # |  0.0|[0.0,1.0]|
    # |  1.0|[1.0,0.0]|
    # +-----+---------+
    
    lr = LogisticRegression(maxIter=5, regParam=0.01, labelCol="label")
    lr_model = lr.fit(df)
    
    test = sc.parallelize([Row(features=Vectors.dense(0.2, 0.5)),
                           Row(features=Vectors.dense(0.5, 0.2))]).toDF()
    lr_result = lr_model.transform(test)
    lr_result.show(truncate=False)
    

    结果如下:

    +---------+----------------------------------------+----------------------------------------+----------+ 
    |features |                          rawPrediction |                            probability |prediction|
    +---------+----------------------------------------+----------------------------------------+----------+ 
    |[0.2,0.5]|[0.9894187891647654,-0.9894187891647654]|[0.7289731070426124,0.27102689295738763]|      0.0 |
    |[0.5,0.2]|[-0.9894187891647683,0.9894187891647683]|[0.2710268929573871,0.728973107042613]  |      1.0 | 
    +---------+----------------------------------------+----------------------------------------+----------+
    

    现在让我们确认rawPrediction 的逻辑函数给出了probability 列:

    import numpy as np
    
    x1 = np.array([0.9894187891647654,-0.9894187891647654])
    np.exp(x1)/(1+np.exp(x1))
    # array([ 0.72897311, 0.27102689])
    
    x2 = np.array([-0.9894187891647683,0.9894187891647683])
    np.exp(x2)/(1+np.exp(x2))
    # array([ 0.27102689, 0.72897311])
    

    即确实是这样


    所以,总结一下所有三 (3) 个输出列:

    • rawPrediction 是逻辑回归分类器的原始输出(长度等于类数的数组)
    • probability 是将逻辑函数应用于rawPrediction 的结果(长度等于rawPrediction 的数组)
    • prediction 是数组 probability 取最大值的参数,它给出最可能的标签(单个数字)

    【讨论】:

      猜你喜欢
      • 2018-05-05
      • 2023-04-02
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      相关资源
      最近更新 更多