前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ML/DL科普向:从Sklearn到TensorFlow

ML/DL科普向:从Sklearn到TensorFlow

作者头像
木东居士
发布2019-07-10 18:32:16
8730
发布2019-07-10 18:32:16
举报
文章被收录于专栏:木东居士的专栏

本文为数据茶水间群友原创,经授权在本公众号发表。

0x00 前言

大数据、处理器等技术的成熟,将已经有60多年历史的“人工智能”推向了舞台中心。随着机器学习、深度学习等概念的火热,很多同学也摩拳擦掌,准备在人工智能这一“弯道”进行超车。

但是也有很多同学在打开这人工智能的大门时,发现里面充斥了大量的数学公式、推导过程等早已归还给大学老师的知识。在头晕眼花的同时无奈地又把门关上了。

居士发起的“学习小组”的初衷正是希望组织大家成体系地对统计学知识进行温习、掌握常用算法模型并提高相应的工程能力。本文作为“学习小组”的第一篇入门向的输出内容,主要讲一下机器学习以及深度学习的概念,并引出sklearn和tensorflow这两个在领域中举足轻重的学习库对其进行简单的科普介绍。

0x01 ML/DL简介

机器学习

相信“机器学习”这个词,这两年大家已经听烦了,这里就简单介绍一下定义:

一个程序要完成任务(T),如果程序获取关于T的经验(E)越多则表现的越好,那么就可以说程序学习了关于T的经验。

简单地说:传统的编程方式是人类自己积累经验,并将这些经验转换为规则或者数学公式,然后用不同的编程语言去描述这些规则和公式。而机器学习则只需要人订制学习步骤,将大量的数据输入给计算机,计算机则可以根据数据和学习步骤自己总结经验,自动升级,借助计算机的计算性能,接近甚至超越人类自身水平。

机器学习的方法包括:

  • 监督学习 supervised learning;
  • 非监督学习 unsupervised learning;
  • 半监督学习 semi-supervised learning;
  • 强化学习 reinforcement learning;
  • 遗传算法 genetic algorithm.

(以上相关概念不在本文重点范围内)

特征工程

为什么要在“机器学习”和“深度学习”之间夹着“特征工程”这一概念的,因为特征工程是机器学习,甚至是深度学习中最为重要的一部分,也是最难讲的一部分。因为特征工程往往与具体的数据相结合,是要撸起袖子动手干的实战技巧,因此很难系统地讲清楚。本部分向大家介绍基本概念,方便大家后续阅读。

在kaggle中有一句经典的话:

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

数据里面提取出来的特征好坏与否直接影响模型的效果。从某些层面上来说,所使用的特征越好,得到的效果就会越好。

要了解特征工程,首先要知道什么是特征

特征(feature),是反映对象在某方面的表现或性质的事项,也可以被称作属性(attribute)。比如我们在描述一个人外表时,“身高”、“体重”、“发型”、“肤色”等就是特征,那么与之对应的“偏高”、“偏瘦”、“短发”、“较白”就是特征值。这四个特征值组成一行,就是所谓的特征向量。n条特征向量组成的一个矩阵,就是所谓的数据集。

特征值1

特征值2

特征值3

特征值4

特征向量1

偏高

中等

短发

较白

特征向量2

中等

偏胖

光头

较黑

特征向量3

偏矮

偏瘦

长发

较白

那么什么是特征工程呢?

现在根据上面的样本数据,用逻辑回归方法设计一个身材分类器。

首先我们要对数据进行判断:“发型”和“负责”这两个特征值对身材分类有帮助么?很明显,没有,甚至如果我们提取了某些冗余特征(不发散、不相关),还会降低模型的性能。那么我们就需要选择符合我们要求的特征,这就是特征选择。

那么接下来,我们选择了身高和体重两个特征值。那么输入数据X:身高和体重 ,标签为Y:身材等级(胖,不胖)。

需要注意,我们不能单纯的根据体重来判断一个人胖不胖,02年NBA选秀时的姚明,重吗?重!胖吗?显然不是。

那么针对这个问题,一个非常经典的特征工程是,BMI指数,BMI=体重/(身高^2)。这样,通过BMI指数,就能帮助我们刻画一个人身材如何。甚至,你可以抛弃原始的体重和身高数据。

所以说,特征工程就是通过X,创造新的X’。基本的操作包括,衍生(扩充维度),筛选(降低维度)。说起来简单,实际上在真正的AI项目中,扩维和降维都是困难重重,需要非常专业的知识和丰富的经验

特征工程的一般步骤如下:

  1. 确定任务:根据实际业务确定需要解决的问题
  2. 数据选择:整合数据
  3. 预处理:涉及数据清洗等一系列操作
  4. 构造特征:将数据转换为有效的特征,常用归一化、标准化、特征离散处理等方法
  5. 模型使用:计算模型在该特征上的准确率
  6. 上线效果:通过在线测试来判断特征是否有效
  7. 进行迭代

总之,除去语音和图像等特定场景,对于大部分生活中的机器学习项目,由于没有足够的训练数据支撑,我们还无法完全信任算法自动生成的特征,因而基于人工经验的特征工程依然是目前的主流。这就需要建模人员对实际业务有较深的理解和把控

深度学习

首先要明确一下机器学习和深度学习的关系:深度学习是机器学习的一个子集

对机器学习来说,特征提取并不简单。特征工程往往需要人工投入大量时间去研究和调整,就好像原本应该机器解决的问题,却需要人一直在旁边搀扶。

深度学习便是解决特征提取问题的一个机器学习分支。作为一种强大的自动化特征工程工具,能够自动学习各种低级和高级的特征。它可以自动提取数据的内在特征,并学习特征和任务之间的关联,还能从简单特征中提取复杂的特征。

要理解深度学习,不得不提的一个概念就是神经网络,实际上,深度学习就是多层神经网络的训练过程

神经网络

神经网络简单点将就是由好多个神经元组成的系统。

人之所以能够进行思考,是因为人体的生物神经网络。外部刺激通过神经末梢传到神经元,无数个神经元构成了神经中枢,神经中枢综合各种信号,做成判断,从而对外部刺激做出反应。

从生物神经网络获得灵感,提出了人工神经网络,人工神经元模型就是我们所说的“感知机(perceptron)”。

上图的圆圈就代表一个感知机,接收多个输入信号,乘以权重并求和,并与阈值做判断,最后产生一个输出信号。就这样,单个感知机就构成了一个简单的决策模型。

但是在真实世界中,要处理的问题复杂得多,不是一个简单的据测模型就可以判断的。我们可以组成多层神经网络。多层神经网络分为:输入层(inputs)、隐藏层(可能有一层或多层)、和输出层(output),其中由于输入层未做任何变换,可以不看做单独的一层。

输入层将信号传递到到隐藏层中的底层神经元,底层神经元的输出是高层神经元的输入,直到最后得到结果。

实际中,输入层的每个神经元代表了一个特征,输出层个数代表了分类标签的个数。而每个隐藏层就是对上一层的输出值进行一次“转换”,也就是加权求和非线性变换的过程。神经网络就是通过将神经元(线性分类器)进行组合叠加,通过不断调整误差,反复训练,从而不断地逼近正确答案,达到较好地非线性分类效果

与机器学习做对比

首先,特征工程的角度上来说:机器学习需要人工处理特征,而深度学习则是自动从数据中学习特征

其次,从解决问题的思想上来说:机器学习是将问题拆解,一一解决后再组合起来;而深度学习是一次性地、端到端地解决问题(相应地,可解释性较差)

最后,深度学习适合处理大数据,计算量大、训练时间长,十分依赖高端硬件设施;而在数据量比较小的时候,机器学习也许更合适

0x02 scikit-learn

scikit-learn是python进行机器学习及数据挖掘与分析的重要而有效的工具。我们可以看到官网中的描述:

  • Simple and efficient tools for data mining and data analysis
  • Accessible to everybody, and reusable in various contexts
  • Built on NumPy, SciPy, and matplotlib
  • Open source, commercially usable - BSD license

包含了很多的机器学习方式:

  • Classification 分类
  • Regression 回归
  • Clustering 非监督分类
  • Dimensionality reduction 数据降维
  • Model Selection 模型选择
  • Preprocessing 数据预处理

sklearn主要针对中小型的、通用机器学习项目,尤其是数据量不大,且需要人工对数据进行处理的项目。并且sklearn提供了强大的特征工程,比如选择特征、压缩维度、转换格式等,满足了传统机器学习需要手动进行数据处理的要求。

sklearn中大部分函数都可以归为EstimatorTransformer两类。

  • Estimator实际上实就是模型,它用于对数据的预测或回归。基本上预估函数都会有以下几个方法:
    • fit(x,y):进行模型训练
    • score(x,y):对模型的正确率进行评分。
    • predict(x):对数据进行预测,用于评估模型。
  • Transformer用于对数据进行处理,例如标准化、降维以及特征选择等等。与估计器的使用方法类似:
    • fit(x,y):计算数据变换的方式。
    • transform(x):返回数据x变换后的结果
    • fit_transform(x,y):既包含训练,又包含转换。

sklearn作为一个通用机器学习库来说,抽象度高,封装程度好。我们只要遵循其固有模式,就可以通过少量的几行代码可以完成模型训练,对新人十分友好。

其实sklearn的学习曲线比较平缓,官方文档就是它最好的学习工具。文档中不但包含了对知识点的概述,还有通俗易懂的实例代码,简直是一份友好的新手入门指南。

因此,sklearn作为传统机器学习库的代表,调包侠们的瑞士军刀,是我们需要熟练使用并细心研究的,

0x03 TensorFlow

TensorFlow是Google开源的神经网络Python外部结构包, 也是一个采用数据流图(data flow graphs)来进行数值计算的开源软件库。TensorFlow是目前深度神经网络中最好用的库之一。我们可以通过使用TensorFlow来快速的入门神经网络, 大大降低了深度学习的开发成本和开发难度。

我们可以通过命名来理解:tensor,翻译为“张量”,表示N维向量flow表示流,是指一个有向无环图tensorflow的运行过程就是张量从图的一端流动到另一端的过程

数据流图用“节点”(nodes)和“线”(edges)的有向图来描述数学计算。nodes一般用来表示施加的数学操作,也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入永久变量(persistent variable)的终点edges表示node之间的输入/输出关系。这些edges可以传送大小可动态调整的多维数据数组,也就是张量。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行运算。

使用Tensorflow需要:

  1. 向tf中输入搭建模型所需要的信息,并将其转化为可处理的数据。
  2. 通过tf内置的函数模块搭建模型
  3. 循环地迭代训练以及评估模型,以便确定模型中的参数。

不同于高度抽象及模块化的sklearn,TensorFlow作为深度学习库,有很高的自由度,这些意味着对使用这的要求更高,当然我们也可以使用keras(深度学习领域的sklearn)。

其实,在更常见的情况下,可以把sklearn和tf,甚至keras结合起来使用。sklearn肩负基本的数据清理任务,keras用于对问题进行小规模实验验证想法,而tf用于在完整的的数据上进行严肃的调参(炼丹)任务。

0x04 一些想法

其实大部分同学可能都是开发出身,对于AI等相关概念略有了解,或缺乏成体系的理论知识,或缺乏具体的实践业务。居士发起的学习小组的初衷,也是为了使大家能够互相督促地补一补知识。

我本人在某AI独角兽交付部门任开发工程师,也不是从事专门的算法岗位。那么我想从我的角度谈一谈为什么想要学习AI。

近些年AI领域的火热,在招聘市场,尤其是校园招聘中,算法岗位的竞争之激烈,是经历过的同学们有目共睹的。很多大厂算法组招聘实习生的条件也是海外名校/985硕博起步的,而且一定要有匹配的专业背景以及优秀的学术能力。那么对于我们这些非算法岗位的人来说,就没有办法涉及这一领域了么?其实我认为,对于企业来说,对于AI人才的需求分为两种:一种是学术界的牛人,发过大paper,有学术界比赛的结果的。公司需要他们去做算法研究,保持技术的领先性,在业内赢得口碑,这样才能在领域内保持头部领域。另一方面,人工智能早已不是一个概念了,企业需要把业务部门的算法落地的人,能够快速、稳定、高效地把实验室中的算法落实到生产环境中,解决实际问题的人。这就需要那些工程底子扎实、能够实打实地写代码,并且对算法模型理解深刻,能够快速将AI项目工程化、落地有产出的复合型人才

再结合居士的观点:统计学相关知识、人工智能相关知识已经逐渐地成为了我们必备的基础技能。很多时候我们要跳出自己的眼界,从更高的角度来说,这些知识有助于我们更好的了解自己的数据,更加了解业务,从而提高自己的竞争力,打破自己的能力边界,来进行“错位竞争”。

作为一名职场新人,我也希望能够不断完善自己的技术储备、从更多维的角度开阔自己眼界和想法。也希望能够通过输出的方式,和大家交流技术以及职业等方面的想法。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木东居士 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 ML/DL简介
    • 特征工程
      • 神经网络
      • 与机器学习做对比
  • 0x03 TensorFlow
  • 0x04 一些想法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档