基于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进行转换的时候,实际上就是使用代
DIRS: Distributed Image Retrieval System === 本项目实现了基于分布式数据库的图像检索系统。其中,TF-IDF作为相似度依据,MapReduce+HBase作为分布式框架。 集群配置 --- 4个节点:1个Master,3个Slave,均运行64位Centos系统 运行环境 --- Hadoop:2.7.3 Hbase:1.2.3 python 2.7.3 java 1.8.0 系统架构 --- 1. **分布式存储** 使用了HBase表存储图片信息,包括原始图片的路径、缩略图和图片的bovw(Bag of Visual Word)特征。 流程:图片 => sift特征点检测及描述符提取 => 特征点进行编码,获得图片的bovw特征向量 => 插入HBase 代码:insertTables.py, sift.py - HBase表 - ***dbinfo: { 'rowid': { 'file': [ 'path':(...), 'data':(...) ], 'feature': [ 'hist':(...), 'data':(...) ] } }*** 其中每个cell含义分别为: 'rowid':'file':'path' 原始图片路径 'rowid':'file':'data' 图片的缩略图(读写需使用pickle进行处理) 'rowid':'feature':'hist' 图片的bow特征 2. **分布式检索** 利用HBase提供的MapReduce接口,让'dbinfo'的所有条目与query计算tf-idf相似度,根据tf-idf值从小到大排序,结果取排在前面的若干数据。 流程:query => sift特征点检测及描述符提取 => vocabulary对特征点进行编码,获得图片的bovw特征向量 => 调用MapReduce程序(Java) => Map阶段: 'dbinfo'表的一个条目 -> 计算与query的相似度 -> (tfidf score, id) => Reduce阶段:(不需要) => 从hdfs中读取结果(MapReduce输出默认根据中间结果的Key值排序) => 从'dbinfo'中读取相应的图片信息,并输出结果 代码:queryMR.py, sift.py, SortDriver.java 3. **非分布式检索(对比)** 利用倒排索引,获取query的候选集,然后从'dbinfo'中读取相应条目,在本地完成tfidf相似度计算以及排序。 代码:query.py 代码构成 --- 构建数据库 creatTables.py 创建数据库表 deleteTables.py 删除数据库表 insertTables.py 对图片进行特征提取,并将数据存入HBase中 视觉特征 sift.py 封装了sift特征提取常用操作 ransac.py,homograpy.py和warpy.py 用于特征点匹配 vocabulary.py 封装了视觉词典对象以及相关操作 trainVoc.py 训练视觉词典 检索 searcher.py 非分布式检索的运行脚本,封装了一些基本操作,包括通过倒排索引获取候选列表,获取图像的特征 query.py 对searcher进行进一步封装,提供检索接口 queryMR.py 分布式检索的运行脚本,将query的特征写入q.dat文件,作为SortDriver输入 SortDriver.java MapReduce的运行程序,计算结果输出到hdfs的/output中 辅助 imtools.py 封装了常用的操作,例如生成路径列表 HBaseConfigure.py HBase配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值