当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Python pyspark QuantileDiscretizer用法及代码示例

本文简要介绍 pyspark.ml.feature.QuantileDiscretizer 的用法。

用法:

class pyspark.ml.feature.QuantileDiscretizer(*, numBuckets=2, inputCol=None, outputCol=None, relativeError=0.001, handleInvalid='error', numBucketsArray=None, inputCols=None, outputCols=None)

QuantileDiscretizer 采用具有连续特征的列,并输出具有分箱分类特征的列。可以使用 numBuckets 参数设置 bin 数量。例如,如果输入的不同值太少而无法创建足够的不同分位数,则使用的存储桶数量可能会小于该值。从3.0.0开始,QuantileDiscretizer可以通过设置inputCols参数一次映射多个列。如果同时设置了inputColinputCols 参数,则会抛出异常。要指定每列的存储桶数量,可以设置numBucketsArray参数,或者如果各列的存储桶数量应该相同,则可以设置numBuckets以方便起见。

2.0.0 版中的新函数。

注意

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

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

例子

>>> values = [(0.1,), (0.4,), (1.2,), (1.5,), (float("nan"),), (float("nan"),)]
>>> df1 = spark.createDataFrame(values, ["values"])
>>> qds1 = QuantileDiscretizer(inputCol="values", outputCol="buckets")
>>> qds1.setNumBuckets(2)
QuantileDiscretizer...
>>> qds1.setRelativeError(0.01)
QuantileDiscretizer...
>>> qds1.setHandleInvalid("error")
QuantileDiscretizer...
>>> qds1.getRelativeError()
0.01
>>> bucketizer = qds1.fit(df1)
>>> qds1.setHandleInvalid("keep").fit(df1).transform(df1).count()
6
>>> qds1.setHandleInvalid("skip").fit(df1).transform(df1).count()
4
>>> splits = bucketizer.getSplits()
>>> splits[0]
-inf
>>> print("%2.1f" % round(splits[1], 1))
0.4
>>> bucketed = bucketizer.transform(df1).head()
>>> bucketed.buckets
0.0
>>> quantileDiscretizerPath = temp_path + "/quantile-discretizer"
>>> qds1.save(quantileDiscretizerPath)
>>> loadedQds = QuantileDiscretizer.load(quantileDiscretizerPath)
>>> loadedQds.getNumBuckets() == qds1.getNumBuckets()
True
>>> inputs = [(0.1, 0.0), (0.4, 1.0), (1.2, 1.3), (1.5, 1.5),
...     (float("nan"), float("nan")), (float("nan"), float("nan"))]
>>> df2 = spark.createDataFrame(inputs, ["input1", "input2"])
>>> qds2 = QuantileDiscretizer(relativeError=0.01, handleInvalid="error", numBuckets=2,
...     inputCols=["input1", "input2"], outputCols=["output1", "output2"])
>>> qds2.getRelativeError()
0.01
>>> qds2.setHandleInvalid("keep").fit(df2).transform(df2).show()
+------+------+-------+-------+
|input1|input2|output1|output2|
+------+------+-------+-------+
|   0.1|   0.0|    0.0|    0.0|
|   0.4|   1.0|    1.0|    1.0|
|   1.2|   1.3|    1.0|    1.0|
|   1.5|   1.5|    1.0|    1.0|
|   NaN|   NaN|    2.0|    2.0|
|   NaN|   NaN|    2.0|    2.0|
+------+------+-------+-------+
...
>>> qds3 = QuantileDiscretizer(relativeError=0.01, handleInvalid="error",
...      numBucketsArray=[5, 10], inputCols=["input1", "input2"],
...      outputCols=["output1", "output2"])
>>> qds3.setHandleInvalid("skip").fit(df2).transform(df2).show()
+------+------+-------+-------+
|input1|input2|output1|output2|
+------+------+-------+-------+
|   0.1|   0.0|    1.0|    1.0|
|   0.4|   1.0|    2.0|    2.0|
|   1.2|   1.3|    3.0|    3.0|
|   1.5|   1.5|    4.0|    4.0|
+------+------+-------+-------+
...

相关用法


注:本文由纯净天空筛选整理自spark.apache.org大神的英文原创作品 pyspark.ml.feature.QuantileDiscretizer。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。