Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 将模型分数应用于Spark DataFrame-Python_Apache Spark_Machine Learning_Pyspark - Fatal编程技术网

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

Apache spark 将模型分数应用于Spark DataFrame-Python,apache-spark,machine-learning,pyspark,Apache Spark,Machine Learning,Pyspark,我正在尝试使用PySpark将分数应用到Spark数据帧。假设我在Spark之外构建了一个简单的回归模型,并希望将模型中创建的系数值映射到DataFrame中的各个列,以创建一个新列,即每个不同源列的总和乘以各个系数。我知道Spark mllib中有许多用于建模的实用程序,但我想了解如何实现这种“暴力”方法。我还知道数据帧/RDD是不可变的,因此必须创建一个新的数据帧 以下是一些供参考的伪代码: #load example data df = sqlContext.createDataFrame

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

以下是一些供参考的伪代码:

#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

焦距:0.176439

p类:-1.239452

以下是logit函数的说明,以供参考:

为了进行比较,下面是我如何使用tidyr和dplyr在R中做同样的事情

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
库(dplyr)
图书馆(tidyr)
#示例数据

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

像这样的工作:


你问的不清楚!你想用你的系数乘以每个观察特征吗?@eliasah,谢谢你的反馈,我用一个例子更新了这个问题,说明如何在R中实现这一点,以供参考,希望这能提供更多的清晰度。就这样!谢谢你的帮助。
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()