Pyspark特征工程--QuantileDiscretizer

本文介绍了Apache Spark的QuantileDiscretizer工具,用于将连续特征转换为分箱分类特征。该工具支持设置分桶数量、处理NaN值的方式(如错误、跳过或保留)以及近似算法的精度。示例展示了如何创建数据、进行分箱操作以及处理包含NaN值的数据。通过调整参数,可以观察到分箱结果的变化。
摘要由CSDN通过智能技术生成

QuantileDiscretizer

class pyspark.ml.feature.QuantileDiscretizer(numBuckets=2*, inputCol=None, outputCol=None, relativeError=0.001, handleInvalid=‘error’)

QuantileDiscretizer 采用具有连续特征的列,并输出具有分箱分类特征的列。可以使用 numBuckets 参数设置分箱的桶数。使用的桶数可能会小于此值,例如,如果输入的不同值太少而无法创建足够的不同分位数。

NaN 处理:另请注意,当 QuantileDiscretizer 在数据集中找到 NaN 值时会引发错误,但用户也可以通过设置 handleInvalid 参数来选择保留或删除数据集中的 NaN 值。如果用户选择保留 NaN 值,会进行特殊处理,放入自己的 bucket,例如,如果使用 4 个 bucket,那么 non-NaN 数据将被放入 bucket[0-3],但 NaN 会被计数在一个特殊的桶中[4]。

算法:使用近似算法选择分箱范围(有关详细说明,请参阅 approxQuantile() 的文档)。近似的精度可以通过 relativeError 参数来控制。 bin 的下限和上限将为 -Infinity 和 Infinity,涵盖所有实数值。

setHandleInvalid(value):设置handleInvalid 的值。

handleInvalid = Param(parent=‘undefined’, name=‘handleInvalid’, doc=‘如何处理无效条目。选项有skip(过滤掉具有无效值的行)、error(抛出错误)或keep(保留无效值)在一个特殊的附加桶中)。’)

01.创建数据

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("QuantileDiscretizer").master("local[*]").getOrCreate()
#%%
values = [(0.1,), (0.4,), (1.2,), (1.5,), (float("nan"),), (float("nan"),)]
df = spark.createDataFrame(values, ["values"])
df.show()

​ 输出结果:

+------+
|values|
+------+
|   0.1|
|   0.4|
|   1.2|
|   1.5|
|   NaN|
|   NaN|
+------+

02.进行分箱

from pyspark.ml.feature import QuantileDiscretizer
qds = QuantileDiscretizer(numBuckets=2,\
    inputCol="values", outputCol="buckets", relativeError=0.01, handleInvalid="error")
model = qds.fit(df)
model.transform(df).count()

​ 输出结果:6

03.更改参数,查看结果

qds.setHandleInvalid("skip").fit(df).transform(df).count()

​ 输出结果:4

04.查看值

splits = model.getSplits()
splits[0]

​ 输出结果:-inf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值