【pyspark学习从入门到精通20】机器学习库_3

news2024/11/27 11:49:38

目录

使用 ML 预测婴儿生存几率

加载数据

创建转换器

创建估计器

创建管道

拟合模型


使用 ML 预测婴儿生存几率

在这一部分,我们将使用前一章中的数据集的一部分来介绍 PySpark ML 的概念。

在这一部分,我们将再次尝试预测婴儿的生存几率。

加载数据

首先,我们使用以下代码加载数据:

import pyspark.sql.types as typ
labels = [
 ('INFANT_ALIVE_AT_REPORT', typ.IntegerType()),
 ('BIRTH_PLACE', typ.StringType()),
 ('MOTHER_AGE_YEARS', typ.IntegerType()),
 ('FATHER_COMBINED_AGE', typ.IntegerType()),
 ('CIG_BEFORE', typ.IntegerType()),
 ('CIG_1_TRI', typ.IntegerType()),
 ('CIG_2_TRI', typ.IntegerType()),
 ('CIG_3_TRI', typ.IntegerType()),
 ('MOTHER_HEIGHT_IN', typ.IntegerType()),
 ('MOTHER_PRE_WEIGHT', typ.IntegerType()),
 ('MOTHER_DELIVERY_WEIGHT', typ.IntegerType()),
 ('MOTHER_WEIGHT_GAIN', typ.IntegerType()),
 ('DIABETES_PRE', typ.IntegerType()),
 ('DIABETES_GEST', typ.IntegerType()),
 ('HYP_TENS_PRE', typ.IntegerType()),
 ('HYP_TENS_GEST', typ.IntegerType()),
 ('PREV_BIRTH_PRETERM', typ.IntegerType())
]
schema = typ.StructType([
 typ.StructField(e[0], e[1], False) for e in labels
])
births = spark.read.csv('births_transformed.csv.gz', 
 header=True, 
 schema=schema)

我们指定 DataFrame 的 schema;我们现在严重限制的数据集仅有 17 列。

创建转换器

在我们能够使用数据集来估计模型之前,我们需要进行一些转换。由于统计模型只能操作数值数据,我们将不得不对 BIRTH_PLACE 变量进行编码。

在我们进行这些操作之前,由于我们将在本章后面使用许多不同的特征转换,让我们先导入它们:

import pyspark.ml.feature as ft

为了对 BIRTH_PLACE 列进行编码,我们将使用 OneHotEncoder 方法。然而,该方法不能接受 StringType 列;它只能处理数值类型,所以我们首先将列转换为 IntegerType:

births = births \
 .withColumn('BIRTH_PLACE_INT', births['BIRTH_PLACE'] \
 .cast(typ.IntegerType()))

完成这些后,我们现在可以创建我们的第一个转换器:

encoder = ft.OneHotEncoder(
 inputCol='BIRTH_PLACE_INT', 
 outputCol='BIRTH_PLACE_VEC')

现在,我们创建一个包含所有特征的单一列。我们将使用 VectorAssembler 方法:

featuresCreator = ft.VectorAssembler(
 inputCols=[
 col[0] 
 for col 
 in labels[2:]] + \
 [encoder.getOutputCol()], 
 outputCol='features'
)

向 VectorAssembler 对象传递的 inputCols 参数是要组合在一起形成 outputCol —— 'features' 的所有列的列表。注意,我们使用编码器对象的输出(通过调用 .getOutputCol() 方法),因此如果我们在编码器对象中更改输出列的名称,我们就不必记住更改此参数的值。

现在轮到创建我们的第一个估计器了。

创建估计器

在这个例子中,我们将(再次)使用逻辑回归模型。然而,在本章后面,我们将展示一些更复杂的 PySpark ML 模型集中的模型,所以我们加载整个部分:

import pyspark.ml.classification as cl

加载完成后,让我们使用以下代码创建模型:

logistic = cl.LogisticRegression(
 maxIter=10, 
 regParam=0.01, 
 labelCol='INFANT_ALIVE_AT_REPORT')

如果我们的目标列的名称是 'label',我们就不必指定 labelCol 参数。同样,如果我们的特征创建器的输出不叫 'features',我们将不得不通过(最方便地)在 featuresCreator 对象上调用 getOutputCol() 方法来指定 featuresCol。

创建管道

现在剩下的就是创建一个管道并拟合模型。首先,让我们从 ML 包中加载 Pipeline:

from pyspark.ml import Pipeline

创建一个 Pipeline 非常容易。这是我们管道的概念视图:

将这个结构转换为 Pipeline 是小菜一碟:

pipeline = Pipeline(stages=[
 encoder, 
 featuresCreator, 
 logistic
 ])

就是这样!我们的管道现在已经创建好了,所以我们可以(终于!)估计模型了。

拟合模型

在拟合模型之前,我们需要将数据集分割为训练集和测试集。方便的是,DataFrame API 有 .randomSplit(...) 方法:

births_train, births_test = births \
 .randomSplit([0.7, 0.3], seed=666)

第一个参数是要分别进入 births_train 和 births_test 子集的数据集比例列表。seed 参数为随机数生成器提供了一个种子。

现在终于到了运行我们的管道并估计模型的时候了:

model = pipeline.fit(births_train)
test_model = model.transform(births_test)

pipeline 对象的 .fit(...) 方法将我们的训练数据集作为输入。在幕后,births_train 数据集首先传递给编码器对象。在编码器阶段创建的 DataFrame 然后传递给 featuresCreator,后者创建了 'features' 列。最后,这个阶段的输出传递给 logistic 对象,该对象估计最终模型。

.fit(...) 方法返回 PipelineModel 对象(前面的模型对象),然后可以用于预测;我们通过调用 .transform(...) 方法并传递之前创建的测试数据集来获得这个对象。以下是 test_model 在以下命令中的样子:

test_model.take(1)

它生成了以下输出:


如你所见,我们得到了转换器和估计器的所有列。逻辑回归模型输出了几个列:rawPrediction 是特征和 β 系数的线性组合的值,probability 是每个类别计算出的概率,最后,prediction 是我们的最终类别分配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2248385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】核心部分复习

目录 交换机 v.s. 路由器OSI七层更实用的TCP/IP四层TCPUDP 交换机 v.s. 路由器 交换机-MAC地址 链接设备和设备 路由器- IP地址 链接局域网和局域网 OSI七层 物理层:传输设备。原始电信号比特流。数据链路层:代表是交换机。物理地址寻址,交…

LLamafactory 批量推理与异步 API 调用效率对比实测

背景 在阅读 LLamafactory 的文档时候,发现它支持批量推理: 推理.https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/inference.html 。 于是便想测试一下,它的批量推理速度有多快。本文实现了 下述两种的大模型推理,并对…

【自动化Selenium】Python 网页自动化测试脚本(上)

目录 1、Selenium介绍 2、Selenium环境安装 3、创建浏览器、设置、打开 4、打开网页、关闭网页、浏览器 5、浏览器最大化、最小化 6、浏览器的打开位置、尺寸 7、浏览器截图、网页刷新 8、元素定位 9、元素交互操作 10、元素定位 (1)ID定位 &…

Table 滚动条始终停靠在可视区域的底部

1. 话题引入 存在这样一个场景:当页面尺寸发生变化时,希望滚动条能够随之动态调整,始终展示在 table 的可视区域的最下方,而不是整个 table 本身的最底部。 这种行为可以提升用户的使用体验,尤其是在处理大数据表格时…

【漏洞复现】CVE-2020-13925

漏洞信息 NVD - CVE-2020-13925 Similar to CVE-2020-1956, Kylin has one more restful API which concatenates the API inputs into OS commands and then executes them on the server; while the reported API misses necessary input validation, which causes the hac…

基于Springboot的心灵治愈交流平台系统的设计与实现

基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统,后端框架使用Springboot和mybatis,前端框架使用Vuehrml,数据库使用mysql,使用B/S架构实现前台用户系统和后台管理员系统,和不同级别…

快速理解微服务中Gateway的概念

一.基本概念 定义: 在微服务架构中,Spring Cloud Gateway 是一个用于API网关的框架,它是一个基于 Spring Framework 的高效、可扩展的路由器和反向代理,它能够将外部请求转发到适当的微服务,并提供一些与请求处理相关…

Java【多线程】(1)进程与线程

目录 1.前言 2.正文 2.1什么是进程 2.2PCB(进程控制块) 2.2.1进程id 2.2.2内存指针 2.2.3文件描述符表 2.2.4进程状态 2.2.4.1就绪状态 2.2.4.2阻塞状态 2.2.5进程优先级 2.2.6进程上下文 2.2.7进程的记账信息 2.3CPU操作进程的方法 2.4什…

计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座

HDC2024华为重磅发布全自研操作系统内核—鸿蒙内核,鸿蒙内核替换Linux内核成为HarmonyOS NEXT稳定流畅新基座。鸿蒙内核具备更弹性、更流畅、更安全三大特征,性能超越Linux内核10.7%。 鸿蒙内核更弹性:元OS架构,性能安全双收益 万…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

构造函数的相关

文章目录 一、构造函数 今天我们要来讲解类的默认成员函数之一的构造函数。 一、构造函数 构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象(我们常使用的局部对象是栈帧创建时&…

云服务器部署WebSocket项目

WebSocket是一种在单个TCP连接上进行全双工通信的协议,其设计的目的是在Web浏览器和Web服务器之间进行实时通信(实时Web) WebSocket协议的优点包括: 1. 更高效的网络利用率:与HTTP相比,WebSocket的握手只…

计算机网络八股整理(一)

计算机网络八股文整理 一:网络模型 1:网络osi模型和tcp/ip模型分别介绍一下 osi模型是国际标准的网络模型,它由七层组成,从上到下分别是:应用层,表示层,会话层,传输层,…

【Qt】控件7

1.QTextEdit的简单使用 使用简单的QTextEdit,获取到的内容显示到标签上 使用textChanged信号 在槽函数中需要获取QTextEdit的内容,对应操作是: QString curorui->textEdit->toPlainText();然后显示到标签上,对应操作是: …

【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总

文章目录 1.datagridview绘制出现鼠标悬浮数据变空白2.datagridview在每列前动态添加序号2.1 加载数据集完成后绘制序号2.2 RowPostPaint事件绘制 3.datagridview改变行样式4.datagridview后台修改指定列数据5.datagridview固定某个列宽6.datagridview某个列的显示隐藏7.datagr…

AI智能体崛起:从“工具”到“助手”的进化之路

目录 AI智能体的崛起 AI智能体的定义与决策模型 AI智能体的特点与优势 AI智能体的应用与类型 面临的挑战 未来展望 近年来,人工智能领域的焦点正从传统的聊天机器人(Chat Bot)快速转向更具潜力的AI智能体(AI Agent&#xff…

【计网】自定义协议与序列化(一) —— Socket封装于服务器端改写

🌎 应用层自定义协议与序列化 文章目录: Tcp协议Socket编程 应用层简介 序列化和反序列化       重新理解read/write/recv/send及tcp的全双工       Socket封装       服务器端改写 🚀应用层简介 我们程序员写的一个个解决…

鸿蒙动画开发07——粒子动画

1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子,这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下…

C语言学习 12(指针学习1)

一.内存和地址 1.内存 在讲内存和地址之前,我们想有个⽣活中的案例: 假设有⼀栋宿舍楼,把你放在楼⾥,楼上有100个房间,但是房间没有编号,你的⼀个朋友来找你玩,如果想找到你,就得挨…