gpt4 book ai didi

apache-spark - 如何使用 OneHotEncoder 在 Spark ML 逻辑回归中设置引用水平

转载 作者:行者123 更新时间:2023-12-05 07:34:08 24 4
gpt4 key购买 nike

我在 PySpark 中工作,使用 Spark 2.1 准备我的数据以构建逻辑回归。我的数据中有几个字符串变量,我想将最频繁的类别设置为引用水平。我首先使用 StringIndexer 将字符串列编码为标签索引,我知道这些是按标签频率排序的,最频繁接收索引 0。

stringIndexer = StringIndexer(inputCol='income_grp', outputCol="income_grp_indexed")
model = stringIndexer.fit(df)
indexed = model.transform(df)

+-------------+------------------+
| income_grp|income_grp_indexed|
+-------------+------------------+
|200000_299999| 0.0|
|300000_499999| 1.0|
|100000_199999| 2.0|
|500000_749999| 3.0|
| less_100000| 4.0|
|750000_999999| 5.0|
| ge_1000000| 6.0|
+-------------+------------------+

然后我使用 OneHotEncoder 将标签索引列映射到二进制向量列。但是,我只在 OneHotEncoder 中看到一个选项可以删除最后一个级别,这是最不常见的类别。

encoder = OneHotEncoder(dropLast=True, inputCol="income_grp_indexed", outputCol="income_grp_encoded")
encoded = encoder.transform(indexed)

+-------------+------------------+------------------+
| income_grp|income_grp_indexed|income_grp_encoded|
+-------------+------------------+------------------+
|200000_299999| 0.0| (6,[0],[1.0])|
|300000_499999| 1.0| (6,[1],[1.0])|
|100000_199999| 2.0| (6,[2],[1.0])|
|500000_749999| 3.0| (6,[3],[1.0])|
| less_100000| 4.0| (6,[4],[1.0])|
|750000_999999| 5.0| (6,[5],[1.0])|
| ge_1000000| 6.0| (6,[],[])|
+-------------+------------------+------------------+

如何删除每个字符串变量中出现频率最高的类别?

最佳答案

我知道这是一个老问题,我的回答可能不适用于 Spark 2.1 版,但对于 Spark 3.1.2(这是我使用的版本),StringIndexer 有一个参数 stringOrderType,可以设置为'frequencyAsc'。如果你这样做,最后一个索引将是频率最高的索引,它将在 OneHotEncoder 处被丢弃。

所以你可以这样做:

    stringIndexer = StringIndexer(inputCol='income_grp', 
outputCol="income_grp_indexed", stringOrderType='frequencyAsc')

# The rest is the same
encoder = OneHotEncoder(dropLast=True, inputCol="income_grp_indexed", outputCol="income_grp_encoded")
encoded = encoder.transform(indexed)
...

如果我们正在处理 pyspark.ml.regression.GeneralizedLinearRegression,这是一个可以输出每个系数的统计 p.values 的模型,并且这些 p.values 可以改 rebase 于基层的频率。

关于apache-spark - 如何使用 OneHotEncoder 在 Spark ML 逻辑回归中设置引用水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50293717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com