【发布时间】:2020-04-16 03:45:18
【问题描述】:
我从一个数据仓库获得了一个数据框,它有一些基于日期的功能,例如
- a) 像 2011 年或 2012 年这样的年份在一列中,
- b) 另一列中的月份编号,如 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()))
非常感谢您的帮助。
【问题讨论】:
-
不需要类型转换,使用 VectorAssemeber + VectorIndexer (set maxCategories) 应该足以完成您的任务。 spark.apache.org/docs/latest/api/python/…
-
非常感谢 jxc。
-
@jxc:关于 VectorIndexer 的一个问题。假设我有 35 个特征,其中只有 20 个是分类特征 - 如何使用 VectorIndexer 指定这 20 个?
-
这里是你需要指定
maxCategories的地方:如果n_i是i'th分类列(共20个)中不同值的数量,你可以设置@987654327 @,然后具有较少不同值的列将自动转换为名义特征。但是,如果某些数值特征的不同值比 maxCategories 少,则单独处理它们。 -
谢谢@jxc。这太棒了。您能否阐明如何分别处理数字特征?我需要创建带有特征的向量,那么如何将它们分开并将它们放在向量中
标签: python dataframe apache-spark pyspark