【pyspark学习从入门到精通23】机器学习库_6

news2025/1/20 1:42:28

目录

分割连续变量

标准化连续变量

分类


分割连续变量

我们经常处理高度非线性的连续特征,而且只用一个系数很难拟合到我们的模型中。
在这种情况下,可能很难只通过一个系数来解释这样一个特征与目标之间的关系。有时,将值划分到离散的桶中是有用的。

首先,让我们使用以下代码创建一些伪造数据:

import numpy as np
x = np.arange(0, 100)
x = x / 100.0 * np.pi * 4
y = x * np.sin(x / 1.764) + 20.1234

现在,我们可以通过以下代码创建一个 DataFrame:

schema = typ.StructType([
 typ.StructField('continuous_var', 
 typ.DoubleType(), 
 False
 )
])
data = spark.createDataFrame(
 [[float(e), ] for e in y], 
 schema=schema)

接下来,我们将使用 QuantileDiscretizer 模型将我们的连续变量分割成五个桶(numBuckets 参数):

discretizer = ft.QuantileDiscretizer(
 numBuckets=5, 
 inputCol='continuous_var', 
 outputCol='discretized')

让我们看看我们得到了什么:

data_discretized = discretizer.fit(data).transform(data)

我们的函数现在看起来如下:

现在我们可以将这个变量当作分类变量,并使用 OneHotEncoder 进行编码,以便将来使用。

标准化连续变量

标准化连续变量不仅有助于更好地理解特征之间的关系(因为解释系数变得更容易),而且还有助于计算效率,并防止陷入一些数值陷阱。以下是如何在 PySpark ML 中进行操作。

首先,我们需要创建我们的连续变量的向量表示(因为它只是一个单独的浮点数):

vectorizer = ft.VectorAssembler(
 inputCols=['continuous_var'], 
 outputCol= 'continuous_vec')

接下来,我们构建我们的标准化器和管道。通过将 withMean 和 withStd 设置为 True,该方法将去除均值,并将方差缩放到单位长度:

normalizer = ft.StandardScaler(
 inputCol=vectorizer.getOutputCol(), 
 outputCol='normalized', 
 withMean=True,
 withStd=True
)
pipeline = Pipeline(stages=[vectorizer, normalizer])
data_standardized = pipeline.fit(data).transform(data)

这是转换后的数据的样子:

如你所见,数据现在围绕 0 振荡,具有单位方差(绿线)。

分类

到目前为止,我们只使用了 PySpark ML 中的 LogisticRegression 模型。在这一部分,我们将使用 RandomForestClassifier 再次模拟婴儿的生存机会。

在我们可以做到这一点之前,我们需要将标签特征转换为 DoubleType:

import pyspark.sql.functions as func
births = births.withColumn(
 'INFANT_ALIVE_AT_REPORT', 
 func.col('INFANT_ALIVE_AT_REPORT').cast(typ.DoubleType())
)
births_train, births_test = births \
 .randomSplit([0.7, 0.3], seed=666)

现在我们已经将标签转换为双精度,我们准备构建我们的模型。我们以与之前类似的方式进行,区别是我们将重用本章早期的编码器和 featureCreator。numTrees 参数指定应该有多少决策树在我们的随机森林中,maxDepth 参数限制了树的深度:

classifier = cl.RandomForestClassifier(
 numTrees=5, 
 maxDepth=5, 
 labelCol='INFANT_ALIVE_AT_REPORT')
pipeline = Pipeline(
 stages=[
 encoder,
 featuresCreator, 
 classifier])
model = pipeline.fit(births_train)
test = model.transform(births_test)

现在让我们来看看 RandomForestClassifier 模型与 LogisticRegression 模型相比表现如何:

evaluator = ev.BinaryClassificationEvaluator(
 labelCol='INFANT_ALIVE_AT_REPORT')
print(evaluator.evaluate(test, 
 {evaluator.metricName: "areaUnderROC"}))
print(evaluator.evaluate(test, 
 {evaluator.metricName: "areaUnderPR"}))

我们得到以下结果:

嗯,正如你看到的,结果比逻辑回归模型好大约 3 个百分点。让我们测试一下单棵树的模型表现如何:

classifier = cl.DecisionTreeClassifier(
 maxDepth=5, 
 labelCol='INFANT_ALIVE_AT_REPORT')
pipeline = Pipeline(stages=[
 encoder,
 featuresCreator, 
 classifier])
model = pipeline.fit(births_train)
test = model.transform(births_test)
evaluator = ev.BinaryClassificationEvaluator(
 labelCol='INFANT_ALIVE_AT_REPORT')
print(evaluator.evaluate(test, 
 {evaluator.metricName: "areaUnderROC"}))
print(evaluator.evaluate(test, 
 {evaluator.metricName: "areaUnderPR"}))

前面的代码给出了以下结果:

一点也不差!实际上,在精确度-召回率关系方面,它的表现比随机森林模型更好,而且在 ROC 下面积方面只是稍微差一些。我们可能刚刚发现了一个赢家!
 

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

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

相关文章

STM32 自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。 RAM vs ROM vs FLASH 2013-09-05记录,ROM和RAM指的都是半导体存储器,ROM是Read Only …

距离与AoA辅助的三维测距算法(适用于四个基站的情况的单点定位),MATLAB代码

本MATLAB 代码实现了一个基于LOS/NLOS混合环境的单点定位系统,主要用于估计目标物体的单点位 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分 绘图与输出 代码运行结果 定位结果如下: 命令行的坐标和误差输出: 部分代码…

2024年华中杯数学建模B题使用行车轨迹估计交通信号灯周期问题解题全过程文档及程序

2024年华中杯数学建模 B题 使用行车轨迹估计交通信号灯周期问题 原题再现 某电子地图服务商希望获取城市路网中所有交通信号灯的红绿周期,以便为司机提供更好的导航服务。由于许多信号灯未接入网络,无法直接从交通管理部门获取所有信号灯的数据&#x…

Cesium-地球材质-坡度

1. 创建viewer 创建viewer并添加地形 const viewer new Cesium.Viewer("cesiumContainer", {terrainProvider: await Cesium.CesiumTerrainProvider.fromIonAssetId(3956, {requestVertexNormals: true}) }); 2. 创建canvas色条 添加getColorRamp方法&#xff0…

OpenAI 12连更第一弹:o1完全体,200刀一个月的ChatGPT Pro

来源 | 机器之心 一天前,OpenAI 官方 X 账户的一条推文将 AI 社区的期待值拉满了。这家世界头部 AI 公司宣布将在未来的 12 天进行 12 场直播,发布一些「大大小小的新东西」。 这是 OpenAI 准备的圣诞礼物。 至于这些「大大小小的新东西」究竟是什么&am…

使用C#基于ADO.NET编写MySQL的程序

MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本:MySQL 服务器系统和 MySQL 嵌入…

运动模糊效果

1、运动模糊效果 运动模糊效果,是一种用于 模拟真实世界中快速移动物体产生的模糊现象 的图像处理技术,当一个物体以较高速度移动时,由于人眼或摄像机的曝光时间过长,该物体会在图像中留下模糊的运动轨迹。这种效果游戏、动画、电…

三款电容麦的对比

纸面参数 第一款麦克风 灵敏度: -36 dB 2 dB(0 dB1V/Pa at 1 kHz) 灵敏度较低,需要更高的增益来拾取同样的音量。频率响应: 40 Hz - 18 kHz 响应范围较窄,尤其在高频区域。等效噪音级: ≤18 dB(A计权) 噪…

nacos bootstrap.yml 和 spring.config.import 加载配置的流程区别

相关依赖 springboot:2.7.15 nacos:2.2.3 bootstrap.yml加载方式 加载流程如下图所示 从图中可以看出,: 1.bootstrap.yml 的加载是在 BootstrapApplicationListener.onApplicationEvent 接收到 ApplicationEnvironmentPreparedEventEvent 事件后另起一个 Sprin…

数据结构题库12

第六章 图 一、单项选择题 1.下面关于图的存储结构的叙述中正确的是 (1) 。 (1):A.用邻接矩阵存储图占用空间大小只与图中顶点有关,与边数无关 B.用邻接矩阵存储图占用空间大小只与图中边数有关,而与顶点数…

【adb】iqoo系统精简垃圾内置应用

免责声明 这个得谨慎点,虽然我验证过两部手机和不同版本的系统,但是总会有特殊的存在、 本教程来自于互联网搜集整理, 按照本教程造成的用户设备硬件或数据损失,本人概不承担任何责任,如您不同意此协议,请不…

sharedPreference包的使用总结

文章目录 1 概念介绍2 实现方法3 示例代码我们在上一章回中介绍了"如何自定义评分条"相关的内容,本章回中将介绍如何实现本地存储.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 Flutter是一套跨平台的UI框架,它不像原生SDK一样提供本地存储功能,因此,我们在…

嵌入式蓝桥杯学习4 lcd移植

cubemx配置 复制前面配置过的文件 打开cubemx,将PB8,PB9配置为GPIO-Output。 点击GENERATE CODE. 文件移植 1.打开比赛提供的文件包,点击Inc文件夹 2.点击Inc文件夹。复制fonts.h和lcd.h,粘贴到我们自己的工程文件夹的bsp中&#xff08…

基于Matlab扩展卡尔曼滤波的GPS与DME组合无人机导航系统设计与实现

随着无人机(UAV)在农业监测、环境保护、物流运输、灾害救援等各个领域的广泛应用,精准且可靠的导航系统已成为提升无人机性能和任务执行能力的关键因素。传统的导航方法依赖于单一传感器,往往难以在复杂和动态的环境中提供足够的定…

仿真键盘输入遇到Edge环境不识别 回车符如何处理

这个问题我也是最近才遇到,可能现在大家都喜欢用新架构,基于网页来写应用管理软件。 当遇到Edge环境下,文本框不识别回车符如何处理,根据笔者经验可通过配置Edge 基于键盘管理设置来解决这个事情。如图 即在Edge浏览器环境下&…

黑马redis

Redis的多IO线程只是用来处理网络请求的,对于读写操作命令Redis仍然使用单线程来处理 Redisson分布式锁实现15问 文章目录 主线程和IO线程是如何协作的Unix网络编程中的五种IO模型Linux世界一切皆文件生产上限制keys *、flushdb、flushall等危险命令keys * 遍历查询100W数据花…

JDK 并发编程工具类详解:CountDownLatch、Semaphore、Exchanger、CyclicBarrier 和 Phaser

在 Java 并发编程中,JDK 提供了一些强大的工具类来帮助开发者处理线程间的同步和通信问题。这些工具类主要包括 CountDownLatch、Semaphore、Exchanger、CyclicBarrier 和 Phaser,它们都位于 java.util.concurrent 包下,统称为 JUC&#xff0…

实现RAGFlow-0.14.1的输入框多行输入和消息框的多行显示

一、Chat页面输入框的修改 1. macOS配置 我使用MacBook Pro,chip 是 Apple M3 Pro,Memory是18GB,macOS是 Sonoma 14.6.1。 2. 修改chat输入框代码 目前RAGFlow前端的chat功能,输入的内容是单行的,不能主动使用Shift…

电子商务人工智能指南 4/6 - 内容理解

介绍 81% 的零售业高管表示, AI 至少在其组织中发挥了中等至完全的作用。然而,78% 的受访零售业高管表示,很难跟上不断发展的 AI 格局。 近年来,电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…

基于STM32F103RCT6的PS2手柄控制舵机转向小车

一、PS2 (1)当接收器上的绿灯常亮时,证明手柄和接收器配对成功,可以正常进行数据通讯。如果手柄和接收器断开了,按手柄上的START键即可恢复配对; (2)当手柄上的MODE指示灯没有点亮的…