python - PySpark MLLib:将数值转换为分类
问题描述
我从数据仓库中获得了一个数据框,它具有一些基于日期的功能,例如
- a) 像 2011 年或 2012 年这样的年份在一列中,
- b)monthnum,例如另一列中的1到12,
- c) weekdayNum 像一列中的 1 到 7 和
- d) 另一列中的一些其他派生列,如 IsSunday 或 IsMonday(表示为 0 或 1)。
- e)具有其他一些数字特征等,例如房屋销售价格。
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()))
非常感谢你的帮助。
解决方案
除了前面的答案,如果您希望将日期的序数性质考虑到模型中,那么您可以尝试将日期转换为 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()
推荐阅读
- c++ - 如果类型是在之后定义的,那么实例化具有不完整类型的类模板是否格式错误?
- r - 循环矩阵 - 向量乘法,其元素随每个循环而变化
- python - 计算深度神经网络关于输入的偏导数
- r - 如何使用包含的 Rcpp 代码将 R 闪亮的应用程序打包到电子中
- java - 任务 ':app:compileDebugJavaWithJavac 执行失败
- c# - Visual Studio 'Break all' 选项不再起作用
- c# - C# 在单独的类中调用异步 void
- common-lisp - Let,flet,macrolet:有没有办法做一个“class-let”?
- r - (如何)我可以使用 ddply 来总结按两个因素分组的数据框吗?
- scala - 使用自定义对象创建 scala 数据框