Как установить опорные уровни в логистической регрессии Spark ML с помощью OneHotEncoder - PullRequest
0 голосов
/ 11 мая 2018

Я работаю в 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,[],[])|
+-------------+------------------+------------------+

Как я могу удалить наиболее частую категорию каждой из моих строковых переменных?

...