Я работаю в 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,[],[])|
+-------------+------------------+------------------+
Как я могу удалить наиболее частую категорию каждой из моих строковых переменных?