首页 > 解决方案 > PySpark MLLib:将数值转换为分类

问题描述

我从数据仓库中获得了一个数据框,它具有一些基于日期的功能,例如

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()))

非常感谢你的帮助。

标签: pythondataframeapache-sparkpyspark

解决方案


除了前面的答案,如果您希望将日期的序数性质考虑到模型中,那么您可以尝试将日期转换为 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()


推荐阅读