利用python构建自己的机器学习平台

机器学习可以被纳入仿生学中,它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。现在,由于机器学习在行为预测方面的应用,在商业活动中得到极大的施展空间,使得机器学习的关注度越来越高。
机器学习涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科,从底层开始实现,其复杂度是巨大的。这样,有一个适合的机器学习平台来帮助我们实现各种各样有趣的想法,就显得非常必要。ODPS、盖娅等平台已经提供了比较强大机器学习支持能力,但对于喜欢“自力更生”的Geek们,构建自己的机器学习平台也不失是一种灵活而充满成就感的事情。本文介绍作者是如何使用python构建自己的机器学习平台的,希望各位看官多加指点。

准备工作:安装必要的依赖库

笔者依赖的python版本为2.6,6。除此以外,还用到了如下依赖库:nose(1.3.1)-ATLAS(3.10.2)-Lapack(3.4.2),Numpy(1.8.1)-Scipy(0.16.0),scikit-learn(0.17)-PyBrain(0.3.3)。最终使用的是scikit-learn和PyBrain。
安装ATLAS之前,最好检查下ATLAS的配置文件,注意一点,即所有表示”目录“的变量,是否都是以”/“结尾,如果有不一致的情况,请修改成多数派。笔者在安装过程中,”目录“大多不以"/“结尾,但有一项是"/"结尾,导致后来安装numpy和scipy时常常不成功。具体参考文献见下。PS:numpy、scipy可以通过pip直接安装。
参考scipy安装过程
ATLAS官网
scikit-learn官网
PyBrain官网

了解scikit-learn和PyBrain

scikit-learn是基于python的机器学习模块,基于BSD开源许可证。scikit-learn的基本功能主要被分为六个部分:分类,回归,聚类,数据降维,模型选择,数据预处理;基本覆盖机器学习中涉及的大多数类型。
对于具体的机器学习问题,通常可以分为三个步骤:数据准备与预处理(通常为numpy数组),模型选择与训练(常见包含fit方法),模型验证与参数调优(常见包含predict方法)。具体形式可以参考官网首页-->documents-->User Guide。
screenshot
scikit-learn有一个缺陷,即不包含神经网络算法,这样PyBrain就是一个比较好的补充。PyBrain包括常用到的FNN、RNN等神经网络算法,具体形式可以参考官网手册。
screenshot

架构设计

所谓平台,必然是多种机器学习方法的整合,既要有丰富的方法可以使用,同样也要考虑到接口的简易性和比较高的性能。由于使用了scikit-learn和PyBrain,各种方法的调用形式各不相同,同时也需要平台实现多路任务并行处理,因而,需要对各个方法进行提炼,归纳出一个比较一致的逻辑结构。
以支持五种算法机器学习平台为例,五种算法分别:线性预测、决策树、人工神经网络FNN、K-means、DBSCAN。
简单的架构设计如下:
screenshot
各个状态通过状态机的形式进行确定,对外数据传递格式为Json。
Init:指定任务号和任务用到的具体方法,以及输入数目和输出数目;
learning:对于监督式学习来说,这一过程仅仅指记录训练队列;对于非监督学习来说,这一过程也仅仅指输入样本;
training:针对已经取得的样本和训练队列进行具体的学习过程,eg:对于FNN来说,这一步即是反馈训练过程;对于DBSCAN来说,这一步就是聚类过程。一般来说,training过程是最消耗资源的,所以可以考虑将这部分进行并发异步处理。可以考虑使用优秀的python并发模型stackless-python,本例中使用threading暂时代替;
working:进行预测和工作。
除此以外,考虑到具体的使用细节,还考虑到以下几种状态:
backlearn:在learning过程中,即撤销上一条数据(此步骤正在开发进行中);在learning之后的过程中,即回滚到learning过程;
relearn:将所有样本数据清除,重新进入learning状态中;
killing:删除某任务;
check:当看当前各个任务及其状态。

实现过程

直接上代码(当前为进程socket交互,面向过程),见附件。

问题、想法、小应用

1、相信读者们可以很容易发现,该模型存在一个比较大的问题,就是很难实现最优的分布式。可以通过Queue方式实现任务的分布式处理,但由于依赖了现成模块,其模块算法是无法分布式进行,因而此方法仅限于构建小规模的机器学习平台;
2、算法的分布式,在GitHub上已经有了各种各样的解决方案,希望看官同笔者一起,找到更优秀的解决方案,让机器学习平台的构建更加灵活、可定制;
3、前些日子笔者使用该平台辅助进行了Amap疑似错误地址的POI点查找,效果还不错,能达到近80%的正确率;后来笔者给还在上大学的学弟使用该平台的方法进行了二次拟合预测,直接用在了其建模竞赛中……

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值