SparkR 1.6:使用 glm(二项式族)建模时如何预测概率

2023-12-08

我刚刚在 CentOS 上安装了 SparkR 1.6.1,并且没有使用 hadoop。我使用离散“目标”值对数据进行建模的代码如下:

# 'tr' is a R data frame with 104 numeric columns and one TARGET column
#    TARGET column is either 0 or 1
# Convert 'tr' to spark data frame

train <- createDataFrame(sqlContext, tr)

# test is an R dataframe without TARGET column
# Convert 'test' to spark Data frame
te<-createDataFrame(sqlContext,test)
# Using sparkR's glm model to model data
model <- glm(TARGET ~ . , data = train, family = "binomial")
# Make predictions
predictions <- predict(model, newData = te )

我能够如下评估成功或失败(我希望我是正确的):

modelPrediction <- select(predictions, "prediction")
head(modelPrediction)

  prediction
1          0
2          0
3          0
4          0
5          0
6          0

但是当我想评估概率时,我得到的结果如下:

modelPrediction <- select(predictions, "probability")
head(modelPrediction)

                probability
1 <environment: 0x6188e1c0>
2 <environment: 0x61894b88>
3 <environment: 0x6189a620>
4 <environment: 0x618a00b8>
5 <environment: 0x618a5b50>
6 <environment: 0x618ac550>

请帮助我获取测试事件的概率值。谢谢。


背景:当您的 R 代码从 Spark 后端请求某些计算的结果时,Spark 会执行计算并序列化结果。然后,该结果在 R 端反序列化,您将获得 R 对象。

现在,它在 Spark 后端的工作方式是——如果它计算出要返回的对象的类型是以下之一Character, String, Long, Float, Double Integer, Boolean, Date, TimeStamp或他们的Array等等,然后它序列化该对象。但是,如果它发现该类型与其中任何一个都不匹配,它只需为该对象分配一个 id,根据该 id 将其存储在内存中,然后将该 id 发送到 R 客户端。 (JVMObjectTracker in R后端处理程序负责跟踪 Spark 后端上的 jvm 对象。)然后将其反序列化为jobjR 端的类。 (你可以看看writeObject的方法德斯卡拉序列以全面了解哪些内容已预先序列化,哪些内容未序列化。)

现在,在 R 侧,如果您查看中的对象probability你的专栏predictions数据框,你会观察到他们的班级是jobj。如前所述,此类的对象充当 Spark 集群上保存的实际 Java 对象的代理。在这种特殊情况下,支持 java 类是org.apache.spark.mllib.linalg.DenseVector。这是一个向量,因为它包含每个类别的概率。并且因为这个向量不是SerDe类支持的序列化类型之一,所以spark后端只是返回jobj代理并存储这些DenseVector内存中的对象,以便允许将来对其进行操作。

有了这个背景——您应该能够通过调用这些方法来获取 R 前端的概率值DenseVector对象。目前看来,我认为这是唯一的办法。以下是适用于鸢尾花数据集的代码——

irisDf <- createDataFrame(sqlContext, iris)
irisDf$target <- irisDf$Species == 'setosa'
model <- glm(target ~ . , data = irisDf, family = "binomial")
summary(model)
predictions <- predict(model, newData = irisDf)
modelPrediction <- select(predictions, "probability")
localPredictions <- SparkR:::as.data.frame(predictions)

getValFrmDenseVector <- function(x) {
    #Given it's binary classification there are just two elems in vector
    a <- SparkR:::callJMethod(x$probability, "apply", as.integer(0))
    b <- SparkR:::callJMethod(x$probability, "apply", as.integer(1))
    c(a, b)
}

t(apply(localPredictions, 1, FUN=getValFrmDenseVector))

这样我就得到了两个类的以下概率输出——

        [,1]         [,2]
1   3.036612e-15 1.000000e+00
2   5.919287e-12 1.000000e+00
3   7.831827e-14 1.000000e+00
4   7.712003e-13 1.000000e+00
5   4.427117e-16 1.000000e+00
6   3.816329e-16 1.000000e+00
[...]

Note: SparkR:::带前缀的函数不会导出到 SparkR 包命名空间中。因此请记住,您正在针对包私有实现进行编码。 (但我真的不知道如何才能实现这一点,除非 Spark 为其提供公共 API 支持。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SparkR 1.6:使用 glm(二项式族)建模时如何预测概率 的相关文章

随机推荐

  • 从 Java 调用 SSJS?

    我创建了一个 xPages 应用程序 它使用位于服务器端 javascript 库中的许多服务器端 javascript 代码函数 现在我有一些位于 java 设计元素中的 java 代码 我想用它们来调用 javascript 函数 我确
  • 尽管有 _config.yml,Jekyll 仍然破坏 _site 中的目录。

    我正在使用 Jekyll 构建一个网站 并使用 Gulp 来管理资产 由于我使用 Gulp 来管理我的资产 因此我希望 Jekyll 在转换过程中忽略 assets 并在构建网站的其余部分时单独保留 site assets 我已经配置了 c
  • 如何使用自定义输入作为过滤器来过滤对象数组

    使用多选下拉列表 其中我有一个对象数组 我想根据用户输入将其过滤掉 例如 ServiceArea NON CIO ManagingDirector qwe Lead abc Manager xyz id 1 Designation COO
  • Netbeans:在常规 Java 类文件上使用 GUI Builder

    我正在使用 Netbeans 当我创建 Java 类时 有时我想将其更改为 GUI 组件 以便我可以使用 GUI 构建器对其进行可视化编辑 将常规 Java 类转换为 GUI 组件以便 Netbeans 能够识别它并允许我使用 GUI Bu
  • IIS URL 重写与 URL 路由

    我计划对 Web 表单应用程序使用 url 路由 但是 读了一些之后posts 我不确定这是否是一个简单的方法 是不是更好地使用URL重写模块对于网络表单 但是 它仅适用于 IIS7 最初 有人认为 URL 路由与 Asp Net MVC
  • 禁用特定文件夹上的 intellij 索引

    在我的项目中 我有 deploy 文件夹 该文件夹是在本地部署应用程序时创建 更新的 是否可以禁用该文件夹的索引 每当我部署时 一切都会变慢 这真的很烦人 我必须等待几分钟 同时 intellij 进行不必要的索引 在模块视图中 我排除了该
  • 与“ws://mydomain.com:8084/?peer_id=123”的 WebSocket 连接失败:连接建立时出错:net::ERR_CONNECTION_TIMED_OUT

    var ws new WebSocket ws server server is mydomain com 8084 peer id 123 console log ws server var self this ws onopen fun
  • Firefox Webdriver 将插件安装到远程 Webdriver

    我有以下代码连接到远程 Webdriver 并安装扩展 options webdriver FirefoxOptions options set preference intl accept languages en en US optio
  • Windows 作曲家安装问题

    我正在尝试通过composer setup exe安装composerhttp getcomposer org download 我收到以下错误 连接错误 ERR CONNECTION 无法连接到 getcomposer org 请求htt
  • onbeforeunload 等待ajax结果

    是否有可能onbeforeunload 函数等待ajax结果并根据结果值移动到jsp或至少在卸载之前显示一条消息 是否可以使用 setTimeOut 或某些自定义等待函数来解决此问题 或者我必须考虑其他工作流程 Use 同步 XmlHttp
  • 如何让Java匹配JavaScript的encodeURIComponent()方法?

    我正在尝试在包含特殊字符的 URL 中传递此字符串 并且使其工作的唯一方法是使用 JavaScriptencodeURIComponent tester 生成 测试员 C3 A6 C3 B8 C3 A5 我尝试在 Java 中执行的所有操作
  • 将 byte[] 转换为 NSData 后数据损坏

    我有 Net Web 服务响应 其中包含 byte 条目以及其他字段 数据是 PDF 文件 我使用以下命令从接收到的数据中提取字典 NSJSONSerialization JSONObjectWithData 此后我使用以下代码将 byte
  • 位域的概念

    struct A int a 2 int b 3 int c 3 int main struct A p 2 6 1 printf n d n d n d n p a p b p c return 0 输出是 2 2 1 上述代码在 C 编
  • SurveyMonkey API 返回的各种“ENUM”类型的预期值是多少?

    有多个端点返回 ENUM 类型 例如 ENUM 整数language id字段来自the get survey list and the get survey details端点 字符串枚举type字段来自the get collector
  • 第二个下拉列表不会根据第一个下拉列表每次调用

    我有两个使用 ember 的下拉列表 如果更改第一个下拉值而不是每次调用第二个下拉值 我将面临问题 在这里我添加了我的完整代码 请告诉我这段代码做错了什么
  • Xamarin Forms UWP - 显示 PDF

    请帮助我并告诉我我错过了什么 我的目标是显示简单的PDF文件 以本地存储为例 在WebView控件中 我可以将文件的路径绑定到 WebView 的 Source 属性吗 或者在 UWP 中显示 PDF 的正确方法是什么 附 如果唯一的选择是
  • 如何在 __init__ 中定义属性

    我希望从成员函数定义类中的属性 下面是一些测试代码 显示了我希望它如何工作 但是我没有得到预期的行为 class Basket object def init self add all the properties for p in sel
  • Redshift - 分隔值缺少结束引号

    我正在尝试将 CSV 文件加载到 redshift 分隔符 CSV 的第一列 1 Bhuvi This is ok email protected 我用这个命令来加载 copy tbl from s3 datawarehouse sourc
  • 如何使用 Swift 将 FitBit Api 集成到 IOS 应用程序中

    首先我创建了一个帐户https www fitbit com然后我关注了一个应用程序https dev fitbit com然后安装OAuthSwift使用可可豆荚并在我的 AppDelegate 中实现了此方法 func applicat
  • SparkR 1.6:使用 glm(二项式族)建模时如何预测概率

    我刚刚在 CentOS 上安装了 SparkR 1 6 1 并且没有使用 hadoop 我使用离散 目标 值对数据进行建模的代码如下 tr is a R data frame with 104 numeric columns and one