为随机森林回归做准备

使用 PySpark 进行特征工程

John Hogue

Lead Data Scientist, General Mills

特征所需的假设

随机森林回归

  • 偏态/非正态数据?可以
  • 未标准化?可以
  • 缺失数据?可以
  • 分类数据?可以

假设

使用 PySpark 进行特征工程

追加的特征

经济

  • 30 年按揭利率

政府

  • 城市房价中位数
  • 城市房龄占比
  • 城市房屋面积占比

社会

  • 步行指数
  • 自行车指数

季节性

  • 银行假日
使用 PySpark 进行特征工程

构造特征

时间特征

  • 仅一年数据,价值有限
  • 节假日周

比率、占比、求和

  • 业务语境
  • 个人语境

扩展特征

  • 非自由文本列
  • 需移除低频观测
# 我们数据的形状?
print((df.count(), len(df.columns)))
(5000, 126)
使用 PySpark 进行特征工程

将数据框列转换为特征向量

from pyspark.ml.feature import VectorAssembler
# 替换缺失值
df = df.fillna(-1)
# 定义需转换为向量的列
features_cols = list(df.columns)
# 从列表中移除因变量
features_cols.remove('SALESCLOSEPRICE')
使用 PySpark 进行特征工程

将数据框列转换为特征向量

# 创建向量组装器变换器
vec = VectorAssembler(inputCols=features_cols, outputCol='features')

# 将向量变换器应用到数据 df = vec.transform(df)
# 仅选择特征向量和因变量 ml_ready_df = df.select(['SALESCLOSEPRICE', 'features'])
# 查看结果 ml_ready_df.show(5)
+----------------+--------------------+
| SALESCLOSEPRICE|            features|
+----------------+--------------------+
|143000          |(125,[0,1,2,3,5,6...|
|190000          |(125,[0,1,2,3,5,6...|
|225000          |(125,[0,1,2,3,5,6...|
|265000          |(125,[0,1,2,3,4,5...|
|249900          |(125,[0,1,2,3,4,5...|
+----------------+--------------------+
only showing top 5 rows
使用 PySpark 进行特征工程

我们已准备好进行机器学习!

使用 PySpark 进行特征工程

Preparing Video For Download...