PySpark MLLib: конвертировать числовые в категориальные - PullRequest
0 голосов
/ 02 апреля 2020

Я получил фрейм данных из репозитория, который имеет несколько функций, основанных на дате, таких как

  • a) год как 2011 или 2012 в одном столбце,
  • b) monthnum, например от 1 до 12 в другом столбце,
  • c) weekdayNum, например от 1 до 7 в одном столбце, и
  • d) некоторые другие производные столбцы, такие как IsSunday или IsMonday (представленные как 0 или 1 ) в другой колонке.
  • e) с некоторыми другими числовыми характеристиками et c. как цена продажи дома.
The types of all these are IntegerType()

Вопрос 1 : Для обучения модели я должен преобразовать эти столбцы, относящиеся к дате, в категориальные?

Вопрос 2 : Как мне это сделать в PySpark MLLib? Будет ли достаточно просто привести тип данных в StringType ()? Я имею в виду, что если monthnum равен 1, могу ли я просто преобразовать в «1» следующий код? Будут ли алгоритмы ML принимать / признавать его категоричным?

Или есть лучший способ сделать это?

from pyspark.sql.types import StringType

df = df.witColumn("MonthNum", df["MonthNum"].cast(StringType()))

Большое спасибо за помощь.

1 Ответ

1 голос
/ 15 апреля 2020

В дополнение к предыдущим ответам, если вы хотите, чтобы порядковый характер даты учитывался в модели, вы можете попытаться преобразовать дату в unix отметки времени. Единственный улов, а не номер недели в ваших данных вам понадобится дата. Вы можете конвертировать это с помощью простого udf. Если это возможно для вас, чтобы получить дату, то замечательно. Когда у вас есть данные, вы можете сделать что-то вроде этого:

df_new = df.withColumn("date_info",concat_ws("-",col('date'),col('month'),col('year')))

df_timestamp = df_new.withColumn("time_stamp",unix_timestamp(col('date_info'),format='dd-MM-yyyy'))

Теперь, наряду с этой отметкой времени, вы можете также собрать другие непрерывные объекты в векторном виде. Также будет хорошо нормализовать все функции, прежде чем вы начнете кормить на тренировке. Вы можете проверить pyspark.ml.feature.MinMaxScaler ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...