机器学习中的数据预处理有哪些常见/重要的工具?

理由
举报 取消

想要为以后可能要做的事情做下准备,到目前为止做过分析拿到手的还都是经过一串pipeline预处理过的比较干净的数据,想要知道搭建这些pipeline一般需要哪些工具。比如,未经处理的机器生成的文本log一类,要处理成可以进行分析、建模的形式一般需要哪些步骤,哪些工具是比较必要的?

2017年12月21日 10 条回复 1445 次浏览

发起人:病退统计员 初入职场

“不要畏首畏尾,去尽情地浪费这一生吧。你这粒尘埃啊,什么都不算的。”

回复 ( 10 )

  1. lau phunter
    理由
    举报 取消

    不太清楚你说的是搭建pipeline的工具还是说pipeline里面处理数据的工具,就顺道都说一下。

    1. pipeline工具本身一般是控制这些工具的流程,最简单的crontab就定时执行就好,但是有时候会有数据依赖的问题,比如第7步依赖第三步的两个文件以及平行的第6步的文件,这个依赖并不是线性的,而是一个图的形式。当中加上有些技术延迟比如有些数据生成失败了需要重启某些特定的步骤重新生成,这个问题就稍微复杂了。crontab一般在这时候就搞不定,需要一些专门的pipeline管理,比如 spotify/luigi · GitHub 或者 Azkaban

    2. 预处理文本数据本身一般用一些Linux的工具比如cut啊awk啊等等做数据筛选和清理,自己写一写python小工具做数据的简单组合比如复杂的regex规则组合,比较大的数据归类和抽象一般用Hive之类的hadoop工具都可以,里面也可以插入linux小工具和自己写的工具。

    工业界的数据项目多数时间要设计如何清理数据,这和学术界的玩具数据玩起来很不一样,欢迎来到真实的世界。

  2. 金胤臻
    理由
    举报 取消

    最近在Prettyyes一直想建立起非常专业的data pipeline系统,然后没有很多时间,这几个礼拜正好app上线,有时间开始建立自己的 data pipeline,能够很好的做每天的数据导入,数据收集,以及数据分析。

    • 什么是ETL

    ETL 是常用的数据处理,在以前的公司里,ETL 差不多是数据处理的基础,要求非常稳定,容错率高,而且能够很好的监控。ETL的全称是 Extract,Transform,Load, 一般情况下是将乱七八糟的数据进行预处理,然后放到储存空间上。可以是SQL的也可以是NoSQL的,还可以直接存成file的模式。

    一开始我的设计思路是,用几个cron job和celery来handle所有的处理,然后将我们的log文件存在hdfs,还有一些数据存在mysql,大概每天跑一次。核心是能够scale,稳定,容错,roll back。我们的data warehouse就放在云上,就简单处理了。

    有了自己的ETL系统我觉得就很安心了,以后能够做数据处理和机器学习方面就相对方便一些。

    • 问题来了

    一开始我设计的思路和Uber一开始的ETL很像,因为我觉得很方便。但是我发觉一个很严重的问题,我一个人忙不过来。首先,要至少写个前端UI来监控cron job,但是市面上的都很差。其次,容错的autorestart写起来很费劲,可能是我自己没有找到一个好的处理方法。最后部署的时候相当麻烦,如果要写好这些东西,我一个人的话要至少一个月的时间,可能还不是特别robust。在尝试写了2两天的一些碎片处理的脚本之后我发觉时间拖了实在太久了。

    • 隆重推荐的工具

    airbnb是我很喜欢的公司,他们有很多开源的工具,airflow我觉得是最实用的代表。airflow 是能进行数据pipeline的管理,甚至是可以当做更高级的cron job 来使用。现在一般的大厂都不说自己的数据处理是ETL,美其名曰 data pipeline,可能跟google倡导的有关。airbnb的airflow是用python写的,它能进行工作流的调度,提供更可靠的流程,而且它还有自带的UI(可能是跟airbnb设计主导有关)。话不多说,先放两张截图:

    • 什么是DAG

    airflow里最重要的一个概念是DAG。

    DAG是directed asyclic graph,在很多机器学习里有应用,也就是所谓的有向非循环。但是在airflow里你可以看做是一个小的工程,小的流程,因为每个小的工程里可以有很多“有向”的task,最终达到某种目的。在官网中的介绍里说dag的特点:

    * Scheduled: each job should run at a certain scheduled interval

    * Mission critical: if some of the jobs aren’t running, we are in trouble

    * Evolving: as the company and the data team matures, so does the data processing

    * Heterogenous: the stack for modern analytics is changing quickly, and most companies run multiple systems that need to be glued together

    YEAH! It’s awesome, right? After reading all of these, I found it was perfectly fit Prettyyes.

    • 如何安装

    安装airflow超级简单,使用pip就可以,现在airflow的版本是1.6.1,但是有个小的bug,这个之后会告诉大家如何修改。

    pip install airflow
    
  3. 孔涛
    理由
    举报 取消

    用熟用好python, matlab

    在做数据预处理之前明确目标和应用场景是什么,至于具体的细节还是别偷懒老老实实编代码吧。

  4. Shu Matt
    理由
    举报 取消

    最好的工具就是你的双手和你的电脑/测试机。

    数据预处理是很多机器学习工作的大头,不要偷懒 😀

  5. 乔叶斯
    理由
    举报 取消

    我理解的数据预处理的主要任务是处理缺失值,光滑噪声数据,识别或删除利群点,解决数据的不一致性。

    通常比较容易的实现方式是用MATLAB, R 和Python等自己写,不过对于不熟悉代码的人来说可能要花点功夫去学习一下。

    你可以了解一下这个产品,Elemental Data Engine,目前是公测阶段,可以免费注册使用。简单的拖拖拽拽就可以实现从数据处理到建模的流程,就算不会写代码也可以实现机器学习。

  6. 秋天的松鼠
    理由
    举报 取消

    数据预处理需要根据数据本身的特性进行,不同的格式,不同的要求,有缺失值的要填,有无效数据的要剔,有冗余维的要选,这些步骤都跟数据本身的特性紧密相关,并没有什么现成的黑箱工具可以用(当然在一些特定领域针对某种类型的数据会有现成的)。我个人而言做预处理一般就用MATLAB, R 和Python,每次拿到数据,根据数据特征,矩阵涉及的多不多啊 数据量大不大跑起来费不费时啊,需要用到工具包的多不多啊等等,在三个语言里选一个,自己写脚本做预处理。

  7. 罗YQ
    理由
    举报 取消

    图像的话,先滤个波。

  8. 顾笑群
    理由
    举报 取消

    如果是你说的预处理是指数据的清洗、数字化、normalization的话,我用的Python,这些步骤大部分可以自己写、不难;用工具的话,pandas不错,灵活、全面,包括平均数、方差、补全等都有;在scikit learn库中也有一些API专门做这个的。

    目前在机器学习上只用过Python,其他语言不知道。另外,有些算法不在意是否数字化和normalization。有时候用hash把数字和字符都映射成数字也可以,简单省事。

    我目前只知道这么多,希望有帮助。

  9. 高阔
    理由
    举报 取消

    简单说一下,目前的算法都有各种应用,只是行业不同而已哦。

    按照机器学习的分法,最常见的分类就是有监督学习、无监督学习、半监督学习、强化学习。

    有监督学习主要有:逻辑回归(Logistic Regression)、BP神经网络(Back Propagation Neural Network)

    无监督学习主要有:Apriori、k-means.

    半监督学习主要是分类和回归,有:推理算法(Graph Inference)、拉普拉斯支持向量机(Laplacian SVM)

    强化学习有:Q-learning、时间差学习(Tempral difference learning)

    如果按照数据挖掘来分:

    分类与回归:决策树、贝叶斯、人工神经网络、K-近邻、支持向量机、逻辑回归等

    关联:Apriori、FP-树频集等

    聚类:k-means、k-medoids等

    简单就这么看看吧,功能这一块不好说,不同算法的应用真的不一样,回头我整理一下写到博客里面。

  10. 郭斯特
    理由
    举报 取消

    自然语言处理(比如分词,去掉连接词等)的话,有Python的nltk, 收费的Stanford Parser, Java的OpenNLP等等。

    数据处理的话,工具更多,商用的如STS, 需要编程的如Weka, R语言等都可以。

    谷歌一下很容易搜出几十个工具来,挨个试试research一下,找出最适合自己的。既然干了数据挖掘就要心细不怕苦。

我来回答

Captcha 点击图片更换验证码