當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。