记录pyspark ml与pmml的用法

这两天实践了一下sklearn、pyspark ml、pmml,下面记录一下。

项目地址:https://github.com/owenliang/machine-learning 

sklearn LR分类

  • 利用train_test_split切分了训练集合和验证集合
  • fit训练了LR回归分类模型
  • predict预测了验证集合
  • score计算了预测模型的得分

spark LR分类

  • 利用pandas将原始数组转换成DataFrame矩阵
  • 利用concat将特征与目标矩阵按行连接
  • 利用SparkSession将本地的pandas.DataFrame上传到spark集群中,变成了spark中的分布式DataFrame
  • 利用RFormula将DataFrame中属于特征的列提取到features字段中,将目标提取到labal字段
  • 将数据随机切分成8:2的训练集合与测试集合
  • 利用spark的逻辑回归分类器进行分布式训练fit
  • 然后调用transform完成对测试集的预测,得到一个预测结果的DataFrame
  • 将预测结果DataFrame转换成rdd并运行map输出(预测分类,正确分类)
  • 利用spark的一个Metrics库,统计模型得分
  • 最后将训练好的LR模型保存到hdfs上的lr.model文件

train_df.show()打印出了经过RFormula特征提取后的DataFrame:

可见4个特征被提取到了features字段,目标被提取到了labal字段。

其实无论对pandas还是spark来说,DataFrame都类似于一张MYSQL中的数据表,理解这一点非常重要。

spark ml导出PMML

PMML是预测模型的通用描述语言,简单的说就是用XML语法保存模型的一种标准规范,按照这个格式保存模型,其他编程语言也可以加载模型完成预测。

PMML支持导出extract、transform、estimator的完整过程,即特征的提取、转换、模型都可以导出。

我们通过pipeline配置整个训练流程,这里我配置了先经过RFormula提取特征与目标,然后再交给LR模型训练。大家也可以再增加其他的流程,比如对特征做标准化,归一化等操作都可以。

经过pipeline.fit训练后得到了模型,这个模型里包含了提取、转换、训练的完整信息,可以交给PMML来导出到文件。

我们看一下PMML文件就明白了:

  • DataDictionary描述了有哪些特征,特征排列的顺序是什么,目标是什么。
  • RegressionModel描述了回归分类算法的模型信息,可以看到每个分类的模型参数。

总结

关键记住2点:

  • DataFrame等价于mysql table,每一列有名字关联,需要参与训练的特征被提取到features字段,即特征向量。
  • PMML可以导出完整的提取、转换、预测模型,供其他语言加载使用(主要是JAVA)。

 

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~