基于spark源码做ml的自定义功能开发

spark的ml中已经封装了许多关于特征的处理方式:
在这里插入图片描述在这里插入图片描述
极大方便了我们在做数据预处理时的使用。
但是这明显不够,在机器学习的领域中,还有许许多多的处理方式,这些都没有存在于feature包中。
那要如何去实现?

比较简单的方式:spark ml本质上就是对dataframe的操作,可以在代码中处理df以实现该功能。

但是实际应用中发现,这样的方式并不好用,我们所做的处理,纯粹是对df的转换提取等操作,这个过程无法进行落地,也无法加入pipeline做重复训练。

所以,我采用了另一种方式:基于saprk源代码开发
首先介绍一下本次想要实现的功能:WOE

在这里插入图片描述
woe的计算逻辑:
在这里插入图片描述
计算的逻辑还是比较清楚的,公式如下:
woei= ln (该组好的比例/坏的比例)
其中 i为数据离散后的组,good i 和 bad i 对应该组好坏的个数, good all 和bad all 对应好坏的总数。

编写代码:

对于woe转换的功能,有如下参数:

  • 输入字段:哪些字段需要做woe转换
  • 输出字段:字段做woe转换之后的新列名是什么
  • 标签列:label列的列名
  • 正类: positiveLabel 确定 1 为 good ,还是 0 为 good

1、自定义一个代码接口

方便transform和transformModel共同使用

trait woeTransformParams extends Params with HasInputCols with HasOutputCols with HasLabelCol{
  val positiveLabel: Param[String] = new Param(this,"positiveLabel","positiveLabel you want to choose",ParamValidators.inArray(Array(woeTransform.one,woeTransform.zero)))
  def getPositiveLabel = ${positiveLabel}
}

2、编写woeTransform

继承Estimator抽象类,实现copy,transformSchema,fit方法。

  • fit方法会生成一个代理df,并通过该代理df生成model。在使用该model进行转换的时候,实际上就是使用代
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值