将模型分数应用于 Spark DataFrame - Python

Posted

技术标签:

【中文标题】将模型分数应用于 Spark DataFrame - Python【英文标题】:Apply Model Scores to Spark DataFrame - Python 【发布时间】:2016-03-01 18:57:28 【问题描述】:

我正在尝试使用 PySpark 将分数应用于 Spark DataFrame。假设我在 Spark 之外构建了一个简单的回归模型,并且希望将模型中创建的系数值映射到 DataFrame 中的各个列,以创建一个新列,该列是每个不同源列的总和乘以个体系数。我知道 Spark mllib 中有许多用于建模的实用程序,但我想了解如何实现这种“蛮力”方法。我也知道 DataFrames/RDD 是不可变的,因此必须创建一个新的 DataFrame。

这里有一些伪代码供参考:

#load example data
df = sqlContext.createDataFrame(data)
df.show(5)
dfmappd.select("age", "parch", "pclass").show(5)
+----+-----+------+
| age|parch|pclass|
+----+-----+------+
|22.0|    0|     3|
|38.0|    0|     1|
|26.0|    0|     3|
|35.0|    0|     1|
|35.0|    0|     3|
+----+-----+------+
only showing top 5 rows

在 Spark 外部创建的模型是基于二元响应的逻辑回归模型。所以本质上我想将 logit 函数映射到这三列以产生第四列。以下是模型中的系数:

拦截:3.435222

年龄:-0.039841

parch:0.176439

pclass:-1.239452

这里是logit函数的说明,供参考: https://en.wikipedia.org/wiki/Logistic_regression

为了比较,这里是我如何在 R 中使用 tidyr 和 dplyr 做同样的事情

library(dplyr)
library(tidyr)

#Example data
Age <- c(22, 38, 26, 35, 35)
Parch <- c(0,0,0,0,0)
Pclass <- c(3, 1, 3, 1, 3)

#Wrapped in a dataframe
mydf <- data.frame(Age, Parch, Pclass)

#Using dplyr to create a new dataframe with mutated column
scoredf = mydf %>% 
  mutate(score = round(1/(1 + exp(-(3.435 + -0.040 * Age + 0.176 * Parch + -1.239 * Pclass))),2))
scoredf

【问题讨论】:

你问的不清楚!您想将系数乘以每个观察特征吗? @eliasah,感谢您的反馈,我已经更新了问题,并举例说明了如何在 R 中完成此操作以供参考,希望这能提供更清晰的信息。 【参考方案1】:

如果我正确解释了您的问题,您希望根据离线计算的系数计算每个样本的类别条件概率,并“手动”进行。

这样的工作是否有效:

def myLogisticFunc(age, parch, pclass):
  intercept = 3.435222
  betaAge = -0.039841
  betaParch = 0.176439
  betaPclass = -1.239452
  z = intercept + betaAge * age + betaParch * parch + betaPclass * pclass
  return 1.0 / (1.0 + math.exp(-z))

myLogisticFuncUDF = udf(myLogisticFunc)
df.withColumn("score", myLogisticFuncUDF(col("age"), col("parch"), col("pclass"))).show()

【讨论】:

就是这样!感谢您的帮助。

以上是关于将模型分数应用于 Spark DataFrame - Python的主要内容,如果未能解决你的问题,请参考以下文章

Spark scala Dataframe:如何将自定义类型应用于现有数据框?

如何将 spark DataFrame 转换为 RDD mllib LabeledPoints?

Spark 将自定义模式应用于 DataFrame

学生课程分数的Spark SQL分析

Spark RDD转换成DataFrame的两种方式

08 学生课程分数的Spark SQL分析