利用机器学习_利用机器学习炒股 - CSDN
  •  前阵子看到一篇文章,学习了一段时间的机器学习算法后,再回头看机器学习问题,发现要想利用机器学习去很好的求解一个问题,其实是一件很难的事情。因为利用机器学习处理一个实际的问题就不仅仅是我们得学会怎么...

    引言

        前阵子看到一篇文章,学习了一段时间的机器学习算法后,再回头看机器学习问题,发现要想利用机器学习去很好的求解一个问题,其实并不是一件容易办到的事情,尤其是能够对整个模型的解释方面,要想能够对模型很好的解释,那么难度就会更大。因为利用机器学习处理一个实际的问题就不仅仅是我们得学会怎么使用机器学习算法,更重要的是如何对整个问题建模。我刚开始是学习智能计算,当然一个优化问题怎么去建模,建模完成之后就是求解,相对还算比较简单。但是在机器学习中,问题就变得复杂多了,很多将机器学习的书也都是讲机器学习的算法,就像我之前的“简单易学的机器学习算法”一样,注重算法的实现,但是机器学习问题中不仅仅是机器学习算法,还有一些其他的知识需要我们去注意。

        所以在这个标题下,我就我看的这篇文章与大家一起分享一下我自己的想法。

    一、机器学习问题的组成

        李航老师在《统计机器学习》中指出:机器学习=模型+策略+算法。其实机器学习可以表示为:Learning= Representation+Evalution+Optimization。我们就可以将这样的表示和李航老师的说法对应起来。机器学习主要是由三部分组成,即:表示(模型)、评价(策略)和优化(算法)


    如上图所示,机器学习主要是由上述三个部分组成。对应于每一个部分,都有每一个部分的基本的方法,这里有的方法在我的以往的博客中都能找到介绍,还有的会在以后陆续的补充。下面还是具体每一个部分来说说。

    1、表示(或者称为:模型):Representation

        表示主要做的就是建模,故可以称为模型。模型要完成的主要工作是转换:将实际问题转化成为计算机可以理解的问题,就是我们平时说的建模。类似于传统的计算机学科中的算法,数据结构,如何将实际的问题转换成计算机可以表示的方式。这部分可以见简单易学的机器学习算法

        具体对于一个分类问题而言,我们希望能够找到一个映射,这样的映射是将输入空间投影到输出空间中。而这样的映射的集合我们便把它称为假设空间(hypothesisspace)。我们其实是在这样的假设空间中寻找满足具体问题的一个映射。对于分类问题而言,映射主要分为:

    • 率模型:主要是条件概率()
    • 非概率模型:主要是决策函数()

    2、评价(或者称为:策略):Evalution

        评价的目标是判断已建好的模型的优劣。对于第一步中建好的模型,评价是一个指标,用于表示模型的优劣。这里就会是一些评价的指标以及一些评价函数的设计。

    3、优化(或者称为:算法):Optimization

        优化的目标是评价的函数,我们是希望能够找到最好的模型,也就是说评价最高的模型。

    4、总结

        机器学习不仅仅是机器学习算法,从上面我们也看到机器学习算法只是属于机器学习的表示,机器学习是由三部分组成,包括表示(模型)、评价(策略)和优化(算法)。构建一个机器学习的应用,我们需要综合考虑这样的三个方面。以上的三个部分也并不是可以任意组合的,主要还是要看具体的问题,采取不同的方式。

    二、什么是泛化能力

        机器学习的目的是利用训练数据集训练出机器学习的模型,然后将该模型应用到测试数据集中。在整个过程中,我们对测试数据集是一无所知的,这是前提。所以该模型对未知数据的预测能力便称为泛化能力(Generalization ability),这是机器学习成功与否的一个很重要的评价指标。同时,预测误差便成为评价学习方法的泛化能力的指标。

        机器学习算法中有很多的参数,算法成功往往源自对这些参数的精细调节。尽管我们能够获得的数据越来越多,但是始终我们不能把所有数据都得到,要像调节好这些参数,我们就必须充分利用训练数据。

    1、cross-validation

        交叉验证是充分利用数据最好的方式,其中交叉验证的基本想法就是要重复地使用数据。交叉验证的基本思想是:将数据集划分成训练数据和验证数据,在训练数据上训练整个模型,利用验证数据模拟实际的数据,对整个模型进行调整,最终我们选择在验证数据上表现最好的模型。常用的交叉验证的方法有:

    • 简单交叉验证:与上面类似,简单的划分
    • S折交叉验证:将数据随机划分成S份,其中的S-1份作为训练,剩下的1份作为验证,重复进行,最终选择平均验证误差最小的模型
    • 留一交叉验证:S折交叉验证的特殊情况()

    2、总结

        机器学习的最终任务是利用学习好的模型来预测实际的数据,这便是机器学习的泛化能力。我们是希望能够在优化的过程中直接面对测试数据的优化函数,但是在实际的过程中,我们是无法得到这样的函数的,此时便使用训练过程中的优化函数来代替这个真实的函数。在最优化求解的过程中,有时求出的局部最优解也许比全局最优解更好。

    三、为什么仅有数据还不够

        因为需要提高的是机器学习的泛化能力,所以在训练数据集上表现优越并不能代表该模型可以在测试集上表现良好,对于我们来说测试集永远是未知的,我们不知道将要面对的测试集是什么样的,对于一个具体的问题,我们也不能得到该问题下的所有的数据集,因为这样的集合根本也没有办法全部获得。所以仅有数据还是不够的。

    1、No Free Lunch(NFL,没有免费的午餐)

        没有免费的午餐定理最早是在最优化理论中提出的,是由WolpertMacerday共同提出。定理的结论是:由于对所有可能函数的相互补偿,最优化算法的性能是等价的。其含义是说没有其他任何算法能够比搜索空间的线性列举或者纯随机搜索算法更优。

        在机器学习问题中,没有学习器能够比在所有可能的函数中比随机猜测的结果更优。也就是说每个学习器都必须包含一些数据之外的知识或者假设,才能够将数据泛化。

    2、关于假设

        有一些假设,如平滑(smoothness),相似的样例有相似的类别,有限依赖,或者有限复杂度。其实这些假设在我们的问题中也经常会用到。

    3、有关演绎(Deduction)和归纳(Induction)

        演绎简单来讲就是由普通的前提推出特殊性结论的推理。而归纳则是通过对特例的分析来引出普遍结论的一种推理形式。由定义可以看出,演绎是由一般到特殊的过程,而归纳则是由特殊到一般的过程。归纳,也正是机器学习所要做的,从一些特殊的例子中得到一般性的规律,对应到机器学习中便是将少量的输入知识转化成为大量的输出知识。

    四、过拟合问题(Over-fitting)

    1、过拟合的含义

        过拟合是指学习时选择的模型包含的参数过多,以至于出现这一模型对已知数据预测很好,但是对未知数据预测得很差的现象。

    2、对过拟合的理解

        一种理解过拟合的方式是将泛化误差分解成偏置(bias)和方差(variance):

    其中,noise为常数。偏置度量了学习器倾向于一直学习相同错误的程度;方差则度量了学习器倾向于忽略真实信号,学习随机事物的程序。其实,在我的理解中,这里很像演化计算中的那些启发式算法的更新公式,如何协调好这两个因素是算法成功的关键。

    3、过拟合的例子

        作者在文中举了一个例子:


    一个线性学习器有高的偏置,因为加入需要分类的问题不是一个线性可分的问题,那么线性学习器是无法学习的;而决策树是有高的方差,因为在不同的训练集上,最终的学习结果是不一样的。
        又一个例子说明过拟合的存在对模型的影响:

    如上图,在1000个样本以下时,Bayes的方法的准确性要比决策树高,尽管正确的模型是基于规则的,直到数据量超过了1000,决策树的准确性才能高于bayes,这也说明:一个强错误假设比那些弱正确假设更好,因为后者需要更多的数据才能避免过拟合。

    4、避免过拟合的方法

        避免过拟合的方法主要有两种:

    • 交叉验证(cross-validation)
    • 给评价函数加上正则项
    以上的两种方法在数据量比较小的时候还是比较有优势的,其中交叉验证有的时候也不能彻底解决问题,因为加入我们利用交叉验证做了太多的参数选择,那么本身这样的过程就开始有过拟合的可能。加上正则项的目的是惩罚那些包含更多结构的分类器,去选择较少结构的分类器,起到降低过拟合的可能。

    5、过拟合与数据噪声的关系

        有人会认为过拟合是因为数据中的噪声引起的,实际上过拟合并不仅仅是因为数据的噪声引起的,当然,在有噪声的数据中会加剧过拟合的可能性。

    五、维数灾难(The curse of dimensionality)

    1、维数灾难的概念

        维数灾难最初是由贝尔曼提出,主要描述的一个现象是:很多的算法在低维空间表现很好,但是在高维空间中就变得无法正确计算。在机器学习中,这样的问题变得更加普遍,随着样本维度(即特征数目)的增长,正确泛化的难度会以指数级增加。这里原因是同等规模的训练集只能覆盖越来越少的输入空间。

    2、典型的例子

        以K-近邻这样的基于相似度的算法为例,基于相似度的推理在高维空间不再有效。分为两种情况:

    • 有2个与预测相关的特征,增加98个不相关的特征,这样,这98个特征就会淹没掉2个相关特征,最终导致K-NN是随机预测
    • 这100个都是相关的特征,这时所有的样本表现出来的是都是相似的

    3、带来的问题及其解决办法

        有人认为在机器学习问题中,特征越多越好,其实这就会引起维数灾难的问题。“blessing of non-uniformity”在一定程度上抵消了维数灾难。

        在大多数应用中,样本在空间中并非均匀分布,而是集中在一个低维流形上面或者附近。以手写体识别为例:每一个像素点为一个特征,这样为什么有效?

        是因为数字图片的空间要远小于整个可能的空间,学习器可以隐式地充分利用这个有效的更低位空间,也可以显示地进行降维。

    六、理论VS实践

    1、机器学习中常见的两类理论

    • 能保证泛化所需要样例数目的边界
    • 渐进:给定无穷数据,学习器将保证输出正确的分类器

    2、理论与实践的关系

        机器学习中理论保证的主要作用并不是在实践中作为决策的标准,而是在算法设计中作为理解和驱动的来源。

    3、总结

        机器学习是理论+实践的过程,里面有很多的理论是边界的条件,在实际的应用中很少会真正碰到这样的约束问题,所以不能把这样的理论作为实践的指导,而是并驾齐驱的过程。

    七、特征工程

        在我之前的文章中有关于特征工程的描述“机器学习中的特征——特征选择的方法以及注意点”。决定一个机器学习项目成功与否的其中一个关键因素就是特征的选取。

    1、特征的难点

        应用机器学习的过程是相对较为简单的过程,然而,如果考虑到对数据的收集,整合,清洗和预处理,那么整个过程就显得不会那么简单,因为在整个数据的处理过程中,针对不同的数据,处理的方法是不尽相同的,这里面就会牵涉到很多的领域知识(domain-specific)。对这些领域知识的理解是能否处理好这些数据的关键。

    2、如何处理特征工程问题

        每一个特征独立地看也许与分类无关,但是组合起来也许就是相关的。如果所要处理的特征很多,那么寻找合适的特征将会成为一个费时费力的事,而且,还很容易导致模型的过拟合。在上面提及到的文章中有一些方法,可以应用到特征的选择中。

    八、数据-多多益善

            More data beats a cleaverer algorithm.

    1、提高机器学习准确性的两种方法

        当特征已经如上面说的那样处理好,但是依然得不到好的结果,此时有两种方式改进:

    • 设计一个更好的学习算法
    • 获得更多的数据(包括更多的样例和不致造成维数在难度饿更多可能的原始特征)

    2、更多的数据出现的问题

        经验上讲:More data beats a cleaverer algorithm。但是,这样就出现一个问题,更多的数据我们可以学习到更复杂的分类器,但是在实践中,要学习到这样复杂的分类器需要更多的时间,所以在很多情况下,我们依旧选择简单的分类器。这时,就需要一些快速的学习算法。例如一些分布式的计算。

    3、机器学习的分类以及工作机制

         其实无论简单的学习算法还是复杂的学习算法,他们的工作机制都是类似的:所有的学习器都是将临界样例归类到同一类别中;所不同的是每个分类器对这样的“临界”的定义是不一样的。如下图所示:无论什么样的算法,都能学出这样的分类边界,只是在刻画分类边界的时候是复杂的,还是不复杂的,这样的情况就有很多。


        分类器可以分为两类:

    • 参数学习算法,如线性分类器
    • 非参数学习算法,如决策树
        首先,在参数学习算法中,其参数是固定的。但是这样的模型存在一个问题就是,当数据超过一定的数量之后,这样的学习算法就不能再从中获益。
    如上图中,朴素贝叶斯在最后的阶段,提升的效果已经很不明显。
        第二种是非参数学习算法,如果有足够的数据,理论上是可以学习任何的函数,如上图中的C4.5算法。但是实际中是无法做到的,有这样的一些因素:
    • 一些优化算法会陷入局部最优
    • 计算复杂性的限制
    • 维数灾难中讲,再多的数据也不会够。

    4、总结

        在选择机器学习算法的过程中,首先还是应当选择简单的学习算法。当然,想要提升学习的准确性,设计不同的学习算法也是相当有必要的,但是前提就是要知道基本的学习算法,从基本的学习算法中得到设计的灵感与方法。

    九、多模型的融合

        最初,人们是在一个算法上花很大的功夫,研究各种变种,力图使一个算法变得更通用,但是结果却发现,将算法进行融合,会表现的更好,而且只需花费很少的精力。

    1、三种集成模式

    • Bagging(最简单的一种)
    • Boosting
    • Stacking
        第一种(Bagging)采用的方法是:通过重采样随机产生若干个不同的子训练集,然后在每个集合上训练一个分类器,最终用投票的方式将结果合并。

        第二种(Boosting)采用的方法是:每个训练样例都有一个权重,并且权重会不断变化,每次训练新分类器的时候都集中在那些分类器之前倾向于分错的样例上。

        第三种(Stacking)采用的方法是:每个单独的分类器的输出作为更高层分类器的输入,更高层分类器可以判断如何更好地合并这些来自低层的输出。

    2、BaggingBoosting方法的比较

        Bagging采用重复取样,每个个体分类器所采用的训练样本都是从训练集中按等概率抽取的,因此Bagging的各子训练集能够很好的覆盖训练样本空间,从而有着良好的稳定性。

        Boosting注重分类错误的样本,将个体子训练集分类错误的训练样本的权重提高,降低分类正确的样本权重,并依据修改后的样本权重来生成新的训练样本空间并用来训练下一个个体分类器。然而,由于Boosting算法可能会将噪声样本或分类边界样本的权重过分累积,因此Boosting很不稳定,但其在通常情况下,其泛化能力是比较理想的集成算法之一。

    3、Netflix比赛

        随着比赛的进行,很多优秀的算法都是融合了很多不同的算法才能得到如此高的准确性,这也说明了现在的趋势是越来越大型的集成。

    4、模型集成(model ensemble)VS 贝叶斯模型平均(Bayesian model averaging, BMA)

        模型集成改变了假设空间,而且可以采用多种多样的形式;BMA只是根据某个准则对原始空间的假设赋予不同的权重。

    5、总结

        主要是在几种模型集成的算法上,为什么会成功,模型集成是一种趋势,其实也是“No Free Lunch”的一个表现。接下来,我也会写点模型集成的实验。

    十、简单VS准确

        简单并不意味着准确。在简单与准确之间并不能完全的画上等号。

    1、奥卡姆剃刀(Occam's Razor)

        奥卡姆剃刀原理是:Entities should not be multiplied unnecessarily(若无必要,勿增实体)。奥卡姆剃刀原理是在说明简单有效的原理,即不要浪费东西去做本身只需较少的东西就能做好的事情。

    2、机器学习中错误的认识

        在机器学习中,有人会认为,对于相同训练误差的两个分类器,比较简单的那个更可能有较低的测试误差。其实这个断言是没有根据的,在很多情况下也是存在问题的。理由主要有以下的三点。

    • 首先是No Free Lunch理论。NFL理论中就表明,没有额外的信息是没有办法做到最好的。与上面的表述就是矛盾的。
    • 其次是模型集成。集成模型的泛化误差会随着增加新的分类器而得到不断地改进,即使是在训练误差达到0的情况下。这就说明并不是简单就好。
    • 最后是支持向量机。支持向量机会有很多的参数,这些参数不至于使得支持向量机过拟合。在这里,也就说明模型参数的数量和过拟合之间并没有直接的联系。

    3、结论

        在机器学习中应当先选择简单假设,因为简单本身就是一个优点,并不是因为所假设的与准确率有什么关系。在很多情况下,我们都会选择简单的模型,吴军老师在《数学之美》上也谈到数学模型的问题时就指出:一个正确的数学模型应当在形式上是简单的。

    十一、可表示VS可学习

    1、可表示并不意味着可学习

        当一个问题中仅有一个函数是可以被表示的,并不意味着这个函数是可以被学习的。有这样的三个例子:

    • 第一个是标准的决策树。决策树就无法学习出比训练样本更多的叶子节点。
    • 第二个是在连续空间中,我们可以想象一下泰勒展开,对于一个正弦函数,我们要用泰勒展开也是无穷多项。
    • 第三个是存在局部最优的情况,我们可能就无法找到真正的函数。
    所以,对于给定有限数据,时间和内存的情况下,标准学习器智能学到所有可能函数中很有限的子集,这个子集也会随着表示方法的不同而不同。

    2、可表示与可学习之间的关系

        对于某些函数来讲,一些表示方法会比其他方法更加精简,从而只需要更少的数据来学习那些函数。举例来讲,对与一个非线性问题,如果直接处理,可以采用核方法,但是采用多层神经网络,那就会变成一个线性的问题

    3、总结

        可表示并不意味着可学习,但是表示的恰到好处会大大降低学习的难度与复杂性。

    十二、相关VS因果

        相关性是因果关系的标志,但是相关并不意味着因果。机器学习也只能学习到相关关系。


    参考文献

    A Few Useful Things to Know about Machine Learning


    展开全文
  • 想要了解乙方安全厂商是如何利用机器学习来进行威胁检测,有一个非常重要的观点必须了解。 一般来说,机器学习是用来区分已知的行为,但是会存在可变的参数。什么意思呢?也就是说,大多数情况下,我们知道恶意行为...

    今天看到Gartner分析师Augusoto Barros的一个博文,感觉深有同感,借着讨论下我对于机器学习与安全结合的一些想法。

    More on “AI for cybersecurity”

    下面是翻译的原文:

    想要了解乙方安全厂商是如何利用机器学习来进行威胁检测,有一个非常重要的观点必须了解。

    一般来说,机器学习是用来区分已知的行为,但是会存在可变的参数。什么意思呢?也就是说,大多数情况下,我们知道恶意行为是什么,但不知道它具体是一个什么样的形式。

    举个例子来说,我们知道数据泄漏通常是利用特定协议来产生的,比如DNS。但是利用DNS来窃取数据可以通过很多种形式。在这种情况下,我们可以让机器学习基于某些特征去拟合正常的行为,从而检测恶意行为。这些特征可能包括:每次请求的数据量、请求的频率等等。这些参数的异常值可能表示在尝试窃取数据。

    在这种情况下,机器学习帮助我们来发掘我们已知的恶意行为,但是对于恶意行为的具体定义太模糊太复杂了,以致于我们无法通过制定简单的规则来进行区分。这是一个无监督学习的例子,它用来识别相对异常的行为来进行威胁检测。也有很多场景可以使用有监督学习来学习恶意行为的模糊特征。但是,如你所见,我们必须首先知道什么是恶意行为,它是怎么产生的,然后才能利用机器学习模型取检测这些行为。

    如果你想要高举“深度学习”的大旗来反驳,那么请放下吧。就算是使用深度学习,你仍然需要通过特征工程来告诉哪些数据维度是需要关注的。如果你想使用深度学习来识别恶意行为的特征,你仍然需要告诉他什么是恶意的。所以和传统机器学习没太多区别。

    虽然基于机器学习的恶意检测是一个相对独特的方法,整个过程和传统建立规则特征库的方法仍然十分相似。

    目前为止,人工智能仍然无法发现人类未知的威胁。大多数的乙方安全厂商会使用诱导性语言来让人们认为他们能够做到这一点,但是事实上是不存在的。考虑现实水平的话,我最喜欢对这些安全厂商提的问题通常是“你是怎么来保证新的威胁能够被及时发现,并且迅速建立新的模型来识别这些新威胁?”人们买了一个所谓的“人工智能”产品,但是仍然需要安全厂商的人力支持才能使其保持有效,这不是一个很讽刺的事情嘛?

    如果你正在使用这些产品,你最好了解安全厂商们做了哪些工作,来让这些工具能够识别出新的威胁。更进一步来说,面对一个成熟的产品,你也需要知道,如果你需要的话,这些工具能否让你自己来更新模型。

    这些是和“人工智能”安全厂商沟通时,一个好的出发点。然后看看他们是如何快速掉入这样一个陷阱:“我们能够发现未知的新威胁”(we can find unknown unknowns)。

    机器学习和安全

    从我所了解的国内各家安全厂商的情况来看,不打出机器学习和人工智能的口号,都不好意思出来卖产品。然而现实情况就如上文所说,机器学习真的无所不能嘛?人工智能到底对人工依赖到什么样一个程度?下面就写一写我对机器学习和安全的一些理解。

    以下观点全部基于个人理解,有错误之处,欢迎指出。

    基于目前对机器学习的理解,其实根本上来说只存在两种不同的模式:无监督学习 和 有监督学习。近年来发展出来的 深度学习、半监督学习、弱监督学习等,其实都是有监督学习下的进一步研究。两者区别也很简单:无监督学习不需要标签,但是要求数据分布具有一定的特征和边界;有监督学习需要标签,而且训练出来的模型和标签本身的分布强相关。而现在流行的知识图谱、关系网络等概念,在我看来是属于特征工程的部分,用来从有限的数据中挖掘更多的隐藏信息。

    如上所说,机器学习无法发现unknow unknows,但是,我们可以利用机器学习去发现unknown knows。在安全领域中,如何去定义和挖掘knows,我认为是安全人员需要思考的关键。

    数据集

    数据是机器学习的基础,想在零数据的基础下去做机器学习,个人认为是不可行的。也许有人会想到利用其他的公开数据去弥补数据的缺失。但我曾经做过一个统计,安全领域中,各知名的公开数据集情况如下:

    数据集 引用次数 首次公布 最后更新
    DARPA Intrusion Detection 2000+ 1998 2000
    KDD 1999 1000+ 1999 1999
    Enron email dataset 200+ 2004 2015

    这些数据集,大都缺乏有效的更新。而这些数据,至今仍然在被各种论文引用,作为结果对比的参照。当下安全迅速发展,攻防手段日新月异,10年前的攻击数据和标准,在今天又能产生多大的意义呢?

    也有很多厂商在鼓吹“迁移学习”的概念,即采用公开或者通用的数据,来训练好一个成熟模型。然后再引入少量的公司个性化数据,即可快速获得一个个性化的模型。这方面倒是没做过深入研究,不过从表层来看,各个公司各个业务的行为模式和数据都不尽相同,能够真正达到通用的数据字段不到一小半。那么迁移学习是只采用通用字段,还是用个性化字段迁移呢?如果是通用字段的话,在损失一大半信息的情况下,真的能达到理想的效果吗?如果是个性化字段的话,没有相关的基础模型,又何来迁移之说?

    所以说,数据集只能靠时间来进行积累,没有太多捷径可走。而面对不断发展的攻防手段,数据也需要不断的更新。而在积累数据的过程中,应该花更多的精力去提高数据的质量。

    无监督学习

    之前已经说了,机器学习不可能发现unknow unknows。有的人可能会认为,无监督学习不就是在没有标签的情况下去找寻分类嘛,那么这是不是代表无监督学习可以发现所谓的unknown unknowns呢?其实不然。无监督学习只是不需要对个体进行打标,但是仍然需要对整体分布有一个先验假设:正常行为由正常用户产生,因此各有各的不同,恶意行为则是少数人批量产生,行为会比较相似;或者反过来说,正常行为因为业务引导,都比较相似,恶意行为则因为不遵守规则,有一定的不同

    曾经和几家做业务风控的乙方厂商聊过,其中DataVisor的售前明确表示过他们主要采用无监督学习来进行业务风控的识别,他们的假设是:“正常用户比较分散,聚集的都是坏人”。很大程度上来说,这样的思路是没问题的,黑灰产们大都是通过批量的行为来获取非法利益的。那么必然会从IP、设备、行为、关联关系等各个方面露出一些马脚,从而被识别出来。

    但是如果完全依赖无监督去做的话,很快就会陷入一个瓶颈中:要么抓大不抓小,要么大规模的误伤。在真实的业务场景中,黑灰产会利用代理IP、手机墙、云控设备等各种手段去减少批量的特征,来加大被识别的难度;而正常用户有时也会表现出一定的批量特征来:爱豆们批量注册小号给明星刷量、同学们通过亲友的手机号刷邀请奖金、地推人员大量推广安装注册等。这些情况的存在,导致恶意行为并不完全一致,正常行为也不完全不同,正常和恶意之间的界线变得模糊而且复杂。在这种情况下,无监督学习只能抓到一些典型的特征分布,而异常和正常的临界点就很难进行判定,所以要么就只抓典型,漏过更高级的黑产,要么一锅端,但是带来较大的误伤。为了使得无监督学习的结果更加精准,并且应对黑产的不断升级,就需要不断的挑选特征,调优权重和阈值,依靠人力来进行持续的对抗。

    就目前的理解,我更倾向于将无监督学习当成对整体数据的一个评价方法。更简单来说,我无法通过无监督学习去准确的给每一个数据进行分类,但是我能够给出正常和异常的大致占比,甚至能更细分一些,给出整体数据中包含了多少种不同的异常。这样一些整体的评价指标,对准确率和召回率都没有特别严格的要求,只要合理即可。而获取到这些指标后:一方面,有利于安全人员正确的评估自己公司的安全现状,不至于陷入“能发现的异常数据都处理了,不知道不能发现的异常行为有多少”这样一种尴尬的境地;另一方面,这些指标也能够反应出当前安全机制的优劣,从而有方向的去进行改善。

    有监督学习

    正如之前所说的,有监督学习的基础是标签数据。而想要保持和黑灰产进行持续的对抗,就必须不断的生产标签数据。而依靠人工去生产标签数据是不可行的:

    • 时间成本较高:在图片识别等领域,打标只需要普通人花几秒钟的时间。而对于一个安全类的数据,一个安全人员可能需要花费几十分钟甚至几个小时,才能够确定这次行为到底干了什么,到底是不是恶意行为。
    • 覆盖面不全:其实也是由于时间成本导致的,无法进行大规模的打标。因此覆盖的恶意行为会相对片面,最终的结果通常是大部分的标签数据都是明显的恶意行为,而相对隐秘的行为,则无法覆盖到。
    • 标准偏差:恶意与正常往往没有明确的界线,不同的安全人员对于安全的认知和要求也是不同的。比如,一次简单的端口扫描算不算恶意行为呢?一个专刷明星的帐号算不算垃圾呢?这些歧义的存在,导致最终产生的标签数据分布不一致,对机器学习的结果将产生较大的影响。

    在网络安全领域,整个攻击链路较长,各个协议层基本都可以进行一定的防护。而黑灰产的最终目的无非就是:获取数据、篡改程序、拒绝响应。所以,在网络安全的领域中,其实可以通过最终结果来进行标记,获得最终的判定标签,然后将标签进行回溯,从而获得表层的标签数据。

    举个例子,WAF通常是工作在http(s)协议下的,通过获取http相关的数据(路径、参数、header、ua等),来找出恶意的http请求,从而对WEB攻击进行检测拦截。但是WAF并不知道这个请求具体会干什么,执行了什么样的逻辑,所以它的评判标准只能是“带有XXX特征的请求是恶意请求”。假如想持续不断的为WAF提供标签数据,靠人力肯定不行,那么就应该深入追踪下去,总最终结果来对数据进行自动打标。OpenRASP的检测思路就是如此,直接深入到web程序的逻辑,根据运行情况去评判是否是攻击行为,可以涵盖:数据库 SQL 注入、数据库慢查询、任意文件上传、敏感文件下载。因为是从http请求的最终行为去做的评判,OpenRASP可以实现所谓的“无规则检测”,准确率和召回率都有保证。设想一下,如果利用OpenRASP去对http请求进行打标,然后由WAF去学习这些http请求具有什么样的特征,一个完整的机器学习闭环基本就形成了。

    可能也有人会疑惑,既然已经有OpenRASP了,为啥还要费功夫去弄WAF呢?的确,按上述的闭环去操作的话,WAF的覆盖范围不会超出OpenRASP,因此不存在互补的关系。但是从部署成本上来说,越底层的防护改动成本越大。OpenRASP虽然不需要改动业务代码,但是需要在Linux上安装软件,修改一些必要的配置,对于已经成型的公司或者业务,推进起来还是有难度的。那么,是不是可以尝试用几台其他机器,镜像一下web应用和http流量,部署OpenRASP来进行检测。这样一来,这几台额外机器就成了WAF稳定的训练集来源,在较少的人工干预情况下,不断学习最新的攻击行为特征。

    业务安全其实也可以尝试这样一个思路来进行。比较直接的,通过对客户端请求签名、异步设备信息采集等方式,对异常的行为进行识别,但不拦截。之所以不建议根据这些信息去拦截,主要是为了避免被黑灰产探测到这些指标的存在。众所周知,安全没有银弹,而这些信息相对比较隐蔽,与其主动暴露,不如去降低黑灰产去研究破解签名算法或者仿造更真实请求信息的欲望,从而一定程度上保证这些标签的准确性。在此基础之上,就可以利用这个机制去稳定的获取标签数据,让业务风控的机器学习算法能够不断的更新迭代。也可以采用一些相对间接的方法,比如:通过用户反馈来获取异常的行为数据;标记一部分已知的恶意用户,但不处理,而是将它们产生的行为都当成恶意行为来标记等。相比于直接的判定方法,这些间接方案的可信度较低,需要对数据集进行一定的加工筛选才能够正常使用。

    总而言之,想要成功的运用有监督学习,必须设计出一个合理的标签系统来。这个标签系统和机器学习必须处于不同的维度,观察角度不一样,才有意义。在这个基础之上,我们才能够运用各种高上大的算法,去挖掘安全领域中的unknow knows。

    展开全文
  • 原创: Frank 机器学习blog 2017-02-26     目前,在线展示广告越来越流行。在线展示广告的目的是获取更多的潜在客户,吸引客户购买商品。在线展示广告的一个基本要求就是通过广告获取用户所需费用要小于用户...

    https://www.toutiao.com/a6641920612455416334/

     

    2019-01-02 23:24:11

    原创: Frank 机器学习blog 2017-02-26

     

    浅谈机器学习在市场营销中的应用

     

    目前,在线展示广告越来越流行。在线展示广告的目的是获取更多的潜在客户,吸引客户购买商品。在线展示广告的一个基本要求就是通过广告获取用户所需费用要小于用户购买商品所耗费用,进而使得通过广告吸引来的客户为企业带来利润。

    在线展示广告中,比较流行的方式是通过手工精心设计更吸引人的广告,来招揽客户。然而,这种方法具有其局限性,并不是所有用户的兴趣点都一致,由于这种方式没有个性化特征,所带来的效果并没有特别显著。既然人工方式带来的效果不显著,那么可以考虑利用机器学习自动挖掘其中的潜在特性,进而带来更好的效果。

    什么是机器学习呢?机器学习即为利用算法自动发现人们自己不能发现的潜在特征,或者隐藏的一些规律。机器学习已经在很多领域取得了显著的效果,如图像识别,语音识别,自然语言处理等。

    浅谈机器学习在市场营销中的应用

     

    如何在市场营销中利用机器学习呢?首先需要找出相关的特征。在机器学习中,一般用一行表示一个样本,每个列是一个相关的特征。针对不同的应用场景,需要找出不同的特征。本文以客户流失预测为例,客户流失预测相关的特征大致有距离上次登录时间,下单数,消费总金额,评论数等等。

    其次要确定目标变量。每个样本都对应一个目标变量,比如在客户流失场景中,可以用0和1来标识某个用户是否流失。

    确定了特征和目标变量,就要收集相关数据。为收集相关数据,需要找到相关的数据库以及相关的表格中相应的列或者其他存储方式的原始数据。在这个步骤中,可以得到一张集成的表格,其中包含了相关特征和目标变量。每一行对应一个样本。

    收集完数据,接下来要选择恰当的机器学习算法来解决客户流失预测问题。由于预测客户流失本质上是一个二分类问题,可以选择的算法主要有logistic regression(逻辑回归), decision tree(决策树),neural network(神经网络), support vector machine(支持向量机)等等。 现实问题中,通常数据比算法更重要,解决问题的算法有很多,只要收集的数据质量比较好,那么利用恰当的算法往往比复杂算法用于质量比较差的数据时取得的效果更好。简而言之,通常情况下数据比算法要重要。

    浅谈机器学习在市场营销中的应用

    logistic regresion 示意图

    浅谈机器学习在市场营销中的应用

    decision tree 示意图

     

    浅谈机器学习在市场营销中的应用

    neural network 示意图

    浅谈机器学习在市场营销中的应用

    support vector machine 示意图

    选择了恰当的算法,就要对原始数据进行分割,分割成训练集和测试集。如此分割,是为了方便查看在训练集上训练所得模型是否在测试集中可以取得理想的效果。通常分割比例为6:4或者7:3。前者为训练集占比,后者为测试集占比。训练集用来训练算法,学习其中的参数,测试集用来查看或检验所选算法在测试集上的效果。

    将原始数据分成训练集和测试集之后,就可以运行算法了。当前比较流行的机器学习算法都集成到了包里,用户可以利用R或者Python来运行相关算法。目前,数据科学(data science)领域比较流行的运行机器学习算法的两种语言就是R和Python。

    运行完算法,需要衡量算法效果。通常可以利用准确率,召回率,F1 score 以及AUC (Area under ROC)。准确率即为预测成流失的样本中真实流失样本占比,召回率即为原本即为流失样本且预测成流失样本的样本在真实流失样本中的占比。F1 score 是准确率以及召回率的调和平均。AUC是ROC(receiver operating characteristic)曲线下的面积,其中ROC是曲线,横坐标是FPR(FALSE positive rate),纵坐标是TPR(TRUE positive rate,也可以看做召回率)。

    浅谈机器学习在市场营销中的应用

    ROC 曲线示意图

    浅谈机器学习在市场营销中的应用

    ROC 曲线示意图

     

    通过机器学习算法也可以发现对客户流失造成较大影响的因素,进而可以采取相应的措施来挽留客户。挽留客户是营销领域中比较重要的一项任务,挽留了客户才可以使得客户为企业带来更大的价值。

    展开全文
  • 机器学习实践应用

    2019-07-05 10:04:12
    机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度等多门学科,专门研究计算机怎样模拟或实现人类的学习行为。机器学习是人工智能的核心,是使计算机具有 智能的根本途径。 本书通过对...

    内容简介

    机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度等多门学科,专门研究计算机怎样模拟或实现人类的学习行为。机器学习是人工智能的核心,是使计算机具有 智能的根本途径。

    本书通过对机器学习的背景知识、算法流程、相关工具、实践案例以及知识图谱等内容的讲解,全面介绍了机器学习的理论基础和实践应用。书中涉及机器学习领域的多个典型算法,并详细给出了机器学习的算法流程。

    本书适合任何有一定数据功底和编程基础的读者阅读。通过阅读本书,读者不仅可以了解机器学习的理论基础,也可以参照一些典型的应用案例拓展自己的专业技能。同时,本书也适合计算机相关专业的学生以及对人工智能和机器学习感兴趣的读者阅读。

    通过阅读本书,你将了解到:

    • 机器学习全流程的串联方式,包括数据预处理、特征工程、算法、模型评估等;
    • 最常用的机器学习算法,包括逻辑回归、随机森林、支持向量机、KMEANS、DBSCAN、K 近邻、马尔科夫决策、LDA、标签传播等;
    • 机器学习算法在实际业务中的应用,涉及金融、医疗、新闻、电商等诸多领域;
    • 机器学习的常用工具:R、Spark-MLib、TensorFlow、PAI 等;
    • 时下最热门的技术领域:深度学习、知识图谱等。

    作者简介

    李博,花名“傲海”。目前任阿里云数据产品经理,主要负责机器学习平台的产品化建设以及对外业务应用。本科、硕士毕业于北京邮电大学,曾就职于索尼和华为(实习),从事数据相关产品的开发。作为 CSDN 博客专家、云栖社区博客专家,长期分享 IT 技术相关文章,内容涉及机器学习算法、Android 应用及源码开发等领域。一直活跃于开发者社区,主导开发了多个 GitHub 百星开源项目,还开发并上线了多款手机 App。

    本书内容

    推荐序

    近年来,在 IT 圈大家谈论最多的就是人工智能。AlphaGo 与围棋选手的人机大战更是让我们领略到人工智能技术巨大潜力的同时,又将人工智能推向了一个新的制高点。

    人工智能的发展得益于云计算和大数据技术的成熟与普及。和人工智能相关的还有两个核心词汇——机器学习和深度学习。这三者有着什么样的关系?所谓人工智能,通俗地讲是指由人工制造出来的系统所表现出来的智能。人工智能研究的核心问题包括推理、知识、交流、感知、移动和操作物体的能力。而机器学习是人工智能的一个分支,很多时候机器学习几乎成为人工智能的代名词。机器学习简单来讲就是通过算法,使机器能从大量历史数据中学习规律,从而对新的样本做出智能识别或对未来做预测。深度学习是机器学习的一个新领域。之所以称为“深度”,是因为前面说的机器学习是浅层的学习,主要基于概率统计、矩阵或图模型而得出的分析结论。深度学习的概念源于人工神经网络的研究,它基于神经网络框架,通过模拟人脑学习的方式来处理数据。在人工智能实践中,数据是载体和基础,智能是追求的目标,而机器学习则是从数据通往智能的技术桥梁。因此,在人工智能领域,机器学习才是核心,是现代人工智能的本质。

    人工智能的火热使市场上对机器学习人才的需求不断提高,很多从事软件开发的程序员纷纷转行投向机器学习领域。但机器学习对人才的技术和理论水平要求都非常高,除了要掌握统计学中各种复杂的机器学习算法的理论推导外,还要懂计算机算法的实现逻辑以及分布式、并行化等架构理论。

    本书是以应用场景为导向,以代码实现为样例贯穿始终,并融入了通俗易懂的理论知识。对于机器学习爱好者和想进入相关领域的从业者来说,是一本值得推荐的好书。

    从2015年开始,我有幸与作者在同一个团队工作,一起设计并研发阿里云的机器学习平台——PAI。作者对机器学习的理解以及产品上的设计思想都在本书中完美地呈现,值得准备进入机器学习领域的爱好者和从业者好好品读。

    感谢作者让我在新书出版之前先睹为快。

    ——刘吉哲
    阿里云高级专家

    致谢

    感谢我的父母这些年对我的鼓励,感谢我的女朋友,家人的支持永远是我的源动力,让你们生活得幸福是我奋斗的目标。感谢我的大学同学,特别是本科宿舍的室友,你们是我心中的一股清流。最后我要特别感谢我的同事,感谢楚巍、不老、吉哲、云郎、贾总、品道等人以及 UED 小团队,感谢你们对我工作上的支持和帮助。在阿里云大家庭中,我工作得很快乐,个人成长也非常迅速。同时,我也非常感谢出版社的编辑胡俊英在本书写作期间为我提供建议和帮助。

    最后对自己这段时间的写作过程做一个总结,最大的感触是,在这样快速紧张的生活和工作节奏下,连续8个月坚持做一件事情是非常需要毅力的。每天下班之后坚持学习和写作2小时,常常熬到凌晨才关灯睡觉,但是这份坚持换来了将近500小时的时间用来“充电”。在这段时间中,写作已经成为我的一种生活方式,在飞机上、在高铁上、在出租车上、在厕所中……很多地方都留下了思考和回忆。无论最终能做到什么程度,都希望自己可以继续把这样的激情保持下去。最后感谢所有在工作和学习中给过我帮助的人,也感谢所有拒绝我、批评过我的人,因为有你们才有了这本书。

    前言

    人工智能是近年来非常火的话题,人们似乎看到了在某些领域内机器智能取代人力的可能性。之所以人们可以得到这样的判断,主要是基于以下几方面原因:随着互联网的发展,人类社会积累了大量的数据可供分析;机器学习的算法不断迭代,特别是近年来随着深度学习的发展,人们从理论层面取得了实质性突破;随着分布式计算的成熟,云计算让计算资源不再成为瓶颈。我们可以把人工智能看作一个数据挖掘体系,在这个体系当中,机器学习的作用主要是学习历史数据中的经验,把这些经验构建成数学模型。人类利用机器学习算法生成的模型,就可以解决日常的一些问题,如商品推荐和对股票涨跌的预测等。

    以上谈到了机器学习的主要作用,我们再来了解机器学习在业务中的应用,其实机器学习算法正在逐步向“平民化”演变。早些时候,只有一些规模比较大的公司会投入资源在智能算法的研究上,因为这些算法需要大量的数据积累以及计算资源,而且整个业务框架跟算法的结合也需要耗费很大人力,所以只有少数数据业务量达到一定规模的公司会在这方面投入。但是随着各种开源算法框架的发展以及计算资源的价格走低,机器学习不再是“奢侈品”,很多规模不大的公司也开始尝试用机器学习算法生成的模型来指导自身业务,用数据来解决业务问题是代价最小的方式,而且效果会随着数据量的积累变得越来越明显。机器学习算法正在帮助越来越多的企业实现转型,从传统的商业智能(Business Intelligence,BI)驱动到人工智能(Artificial Intelligence,AI)驱动。通过平日里与客户打交道,我们可以了解到,现在不只是互联网公司,更多传统行业,如教育、地产和医疗等,也在尝试把自己的业务数据上传到云,通过机器学习算法来提升自己的业务竞争力。

    综上所述,业务与机器学习算法的结合很有可能是下一阶段行业变革的驱动力,如果固守原来的传统技术,不尝试提升业务的数据驱动力,企业很有可能在这一波新的浪潮中被淘汰。本书尝试将算法与实际的业务实战相结合,将对机器学习的全链路逐一进行介绍。在描述算法理论的时候,本书尽可能用更直白易懂的语句和图示来替代公式。另外,为了帮助读者更有成效地理解机器学习算法的使用逻辑,书中不单介绍了算法,还对整个数据挖掘的全流程,包括数据预处理、特征工程、训练以及预测、评估进行了介绍。而且本书还通过真实案例的数据,在各种不同业务场景下对整个数据挖掘流程进行了详细介绍。此外,书中还简单地介绍了深度学习和知识图谱这两个未来可能被更多关注的领域。总之,本书不是一本理论教程,而是一本推动算法与业务实践相结合的指南。

    写作本书的目的

    我从研究生阶段开始接触机器学习算法,在硕士研究生期间主要从事算法的理论研究和代码实现,当时参与了一些开源算法库的开发和算法大赛,那时对机器学习的理解更多的是停留在数学公式推导层面。那时候理解的机器学习就是一门统计科学,需要把公式研究透彻。直到入职阿里云,从事了机器学习平台相关的工作,我对机器学习的看法发生了很大改变。根据平日里与客户的沟通,我认识到,对绝大部分中小企业用户而言,机器学习算法只是帮助大家提升业务成效的工具,很多用户对机器学习的理解还处于比较初级的阶段,与这种现状相矛盾的是目前市面上部分机器学习相关的图书都更偏向于理论研究,而比较缺乏实际应用的场景。

    写这本书的目的就是希望可以提供这样一本素材,能够让渴望了解机器学习的人快速了解整个数据挖掘体系的轮廓,可以用最小的成本帮助用户把算法迁移到机器学习云服务上去。至于算法的精密度和深度的探索,那是数学家需要考虑的事情,对绝大部分的机器学习算法用户而言,这样一本能帮助大家快速理解算法并能够将其在业务上实践的教程可能会更加有效。

    对我而言,本书也是我对自己学习成果的总结。从 2013年起,我陆陆续续在 CSDN、GitHub 和云栖社区上分享过一些自己在 IT 领域的学习笔记和代码,收到了很多朋友的反馈,也有一些出版社的朋友找到我希望可以把这些内容整理成书,但是一直没有特别笃定的想法——什么样的书是有价值的。通过近一年来的机器学习平台产品建设以及与客户的不断接触,我心中的想法逐渐清晰,很多机器学习爱好者最关心的是如何使用算法而不是这些算法背后的推理,于是本书就应运而生了。虽然我才疏学浅,书中内容未免有描述不足之处,但是我真心希望这本书可以在读者探索机器学习的道路上为其提供助力。

    读者对象

    本书的读者对象如下:

    • 有一定数学基础,希望了解机器学习算法的人;
    • 有编程基础,希望自己搭建机器学习服务解决业务场景的工程师;
    • 数据仓库工程师;
    • 与数据挖掘相关的高校学生;
    • 寻求数据驱动业务的企业决策者。

    如何阅读本书

    本书的结构是按照读者对机器学习的认知过程和数据挖掘的算法流程来组织的,一共分为5个部分,共9章内容。

    第1部分是机器学习的背景知识介绍,包括第1章。这一部分主要介绍机器学习的发展历史以及现状,另外,也介绍了机器学习的一些基本概念,为接下来的内容做准备。

    第2部分介绍机器学习的算法流程,包括第2~6章,分别介绍了场景解析、数据预处理、特征工程、机器学习常规算法和深度学习算法。在第5章的算法部分,对常见的分类算法、聚类算法、回归算法、文本分析算法、推荐算法和关系图算法都进行了介绍,从这一章可以了解到不同业务场景下不同算法的区别和用法。第6章对深度学习相关内容进行了讲解,包括常用的3种模型 DNN、CNN 和 RNN 的介绍。

    第3部分介绍机器学习的相关工具,包括第7章的内容。这里的工具是一个广泛的概念,包括了 SPSS 和 R 语言这样的单机统计分析环境,也包括了分布式的算法框架Spark MLib和TensorFlow,还有企业级的云算法服务 AWS ML 和阿里云 PAI。通过阅读这一章,读者可以根据自身的业务特点,选择适合自己的算法工具。

    第4部分介绍机器学习算法的实践案例,包括第8章,帮助读者理解整个数据挖掘流程。这一章针对不同行业和不同场景搭建了实验,分别介绍了如何通过机器学习算法应对心脏病预测、商品推荐、金融风控、新闻分类、贷款预测、雾霾天气预报和图片识别等业务场景,因此也是本书的核心章节。

    第5部分主要针对知识图谱这个热点话题进行介绍,包括第9章,知识图谱的介绍主要是从图谱的概念以及实现的角度来说明。

    尽管读者可以根据自己的侧重点来选择阅读顺序,但我强烈建议读者按照顺序来阅读,这样对理解书中的概念并能够循序渐进地掌握相关知识更有帮助。

    勘误和服务

    虽然花了很多时间去反复检查和核实书中的文字、图片和代码,但是因为认知能力有限,书中难免会有一些纰漏,如果大家发现书中的不足之处,恳请反馈给我,我一定会努力修正问题,我的个人邮箱是 garvin.libo@gmail.com。如果大家在阅读本书的时候遇到什么问题,也欢迎通过各种方式与我取得联系。

    个人网站

    博客地址

    读者也可以到异步社区的页面内提交勘误。因为工作繁忙,可能来不及一一回复,但是我会尽力与读者保持沟通,谢谢大家的支持。

    第01章:机器学习概述(上)

    在本章中,笔者会以对于人工智能发展历史的回顾作为开篇,进而介绍一些人工智能的发展现状,还会引出对于机器学习的基本概念的一些讲解。这一章作为全书的开篇,希望给各位读者一个宏观的概念——什么是机器学习?它会给我们的生活带来哪些改变?

    1.1 背景

    正如爱因斯坦所说:“从希腊哲学到现代物理学的整个科学史中,不断有人试图把表面上极为复杂的自然现象归结为几个简单的基本概念和关系,这就是整个自然哲学的基本原理。”人类进化的发展史,从某种意义上来讲就是不断归纳经验进而演绎的过程。从刀耕火种的新石器时代到近代的工业革命以及现代科技的发展,人类已经积累了大量的经验。这些经验既是“种瓜得瓜,种豆得豆”这样的常识,也是例如相对论这样的定理公式。人类文明正沿着时间这条坐标轴不断前进,如何利用过往的经验来推动人类社会的再一次飞跃,人工智能或许是我们需要的答案。

    人工智能的起源应该可以追溯到17世纪甚至更早,当时人们对于人工智能的定义是基于推理的。人们畅想着如果两个哲学家或者历史学家的观点出现矛盾,两个人不必再进行无休止的争吵,世界上的所有理论会抽象成类似于数学符号的语言,人们只需要拿出笔来计算就可以解决矛盾。这种抽象逻辑给了后人引导,如今,机器学习在行业上的应用也是将业务逻辑抽象成数字来进行计算,从而解决业务问题。但是在远古时代,这些逻辑还只是科学家脑中的想法。实际上,直到有机器的出现,人工智能才真正作为一门学科而受到广泛关注。

    谈到近代人工智能的起源就不得不提到一个名字——图灵(见图1-1)。

    enter image description here

    图1-1 阿兰 · 图灵

    随着第二次世界大战的爆发,越来越多的机械开始替代手工,人们开始幻想什么时候机器能代替人类来进行思考。在20世纪40年代,关于人工智能的讨论开始兴起。但是,机器做到什么程度才算人工智能,这需要一个标准来判定。图灵用了最直白的话语描述了人工智能,这就是图灵测试(见图1-2)。

    enter image description here

    图1-2 图灵测试

    1950年,计算机科学和密码学的先驱阿兰 · 麦席森 · 图灵发表了一篇名为《计算机器与智能》的论文,文中定义了人工智能测试的方法,让被测试人和一个声称自己有人类智力的机器在一起做一个实验。测试时,测试人与被测试人是分开的,测试人只有通过一些装置(如键盘)向被测试人问一些问题,随便是什么问题都可以。问过一些问题后,如果测试人能够正确地分出谁是人、谁是机器,那机器就没有通过图灵测试,如果测试人没有分出谁是机器、谁是人,那这个机器就是有人类智能的。

    人工智能的另一个重要标志是人工智能这一学科的诞生,故事发生在1956年达特茅斯会议。会议上提出了这样的理论:“学习或者智能的任何其他特性都能被精确地描述,使得机器可以对其进行模拟。”这个论调很像机器学习算法在今日的应用,我们需要提取可以表示业务的特征,然后通过算法来训练模型,用这些模型对于未知结果的预测集进行预测。这次会议对于人工智能在更广阔的领域发展起到了推动作用。在之后的20年里,人类在人工智能,特别是相关的一些统计学算法的研究上取得了突破进展,比较有代表性的如神经网络算法,就是在这个时期诞生的。有了这些智能算法作支撑,更多的真实场景才可以在数学层面进行模拟,人类慢慢学会通过数据和算法的结合来进行预测,从而实现某种程度上的智能化应用。

    人工智能在发展过程中也遇到过非常多的挑战。20世纪70年代,随着理论算法的逐步成熟,人工智能的发展遇到了计算资源上的瓶颈。随着计算复杂度的指数性增长,20世纪70年代的大型机器无法负担这一切。同时,当时的互联网还处于发展初期,在数据积累方面也才刚刚起步。科学家往往没有足够的数据去训练模型,以图像印刷文字识别(Optical Character Recognition,OCR)为例。如果想针对某一场景训练一套精度较高的 OCR 模型,需要千万级的数据样本,这样的数据无论从数据获取、存储和计算成本来看,在当时都是不可能实现的。所以人工智能在之后很长的一段时间内都受限于计算能力以及数据量的不足。

    虽然经历了近20年的消沉时期,但是数据科学家对于人工智能的探索从未停止过。在 21 世纪,随着互联网的井喷式发展,越来越多的图像和文本数据被分享到网页上,停留在互联网巨头的服务器中,随之而来的是用户在网上的浏览记录和购物记录的收集。互联网已经变成了一个大数据仓库,许多网络大咖们纷纷将注意力投向数据挖掘领域,数据库成为了一座座金矿,数据科学家们开始用一行行公式和代码挖掘数据背后的价值,越来越多的公司做起了数据买卖。这些代码和公式就是本书的主角——机器学习算法。马云先生在很多年前的公开演讲上就已经明确表示过“阿里巴巴是一家数据公司”。数据的积累就像是一块块肥沃的土地,需要机器学习算法来在上面耕种,云计算就是挥舞在土地上的“锄头”。PB 级数据的积累使得人们不得不将单机计算迁移到多机,并行计算理论开始得到了广泛的应用,这就催生了云计算的概念。云计算,就是分布式计算,简单来讲就是将一个很复杂的任务进行拆解,由成百上千的机器各自执行任务的一个小模块,然后将结果汇总。

    以 Hadoop 为代表的开源分布式计算架构为更多的企业提供了分布式计算的技术支持。随着 Caffe 和 Tensorflow 等高效率的深度学习架构被开源,许多小型企业也具备了自主研发改进算法模型的能力。人工智能的应用开始普及,并且逐渐融入我们的生活当中。人们开始习惯了在 Google 上输入一个词条马上就能返回上千万条信息,通过刷脸或者指纹识别来进行支付,在淘宝购物时获得智能商品推荐。图像识别、文本识别和语音识别的发展给我们的生活带来了颠覆式的影响。2016年,Google关于人工智能的一场秀将人工智能产业带到了一个新高度。机器智能战胜人类围棋选手一直以来被认为是不可能实现的任务,但是 AlphaGo 成功地实现了这一点。AlphaGo 的成功不仅仅验证了深度学习和蒙特卡洛搜索算法的实践性,更加再一次印证了这样的事实,即人类不再是产生智能的唯一载体。任何机器,只要能够进行信息的接收、存储和分析,都是可以产生智能的。而这里面的关键因素是信息的量级以及算法的深度。

    人工智能的发展史,就是对于过往经验的收集和分析方法不断演绎的历史。在机器出现之前,人类只能通过别人的分享和自己的实践在很小的信息量级上来对事物进行判断,这种对于外界事物的认知受限于人的脑力和知识量。不同于人类的脑力,抽象意义上的机器可以被当成一个信息黑洞,吸收所有的信息,而且可以不分昼夜地对这些数据进行大维度的分析、归纳以及演绎,如果人类将这些机器学习后得到的认知进行分享,就形成了人工智能。于是,随着人类社会的发展,数据的积累以及算法的迭代将进一步推动整个人工智能的发展。

    正如前面所提到的,人工智能的发展体现在机器带动人类进行经验归纳以及思考,那么人工智能背后的引擎就是本书要介绍的重点——机器学习算法。机器学习是一种多学科交织的研究型学科,涉及生物学、统计和计算机等多个学科。机器学习算法发展到目前阶段,做的事情主要是将生活中的场景抽象成为数学公式,并且依靠机器的超强计算能力,通过迭代和演绎生成模型,对于新的社会问题进行预测或者分类操作。人工智能的发展史其实伴随着机器学习算法的进化史,正是随着机器学习算法的不断发展以及计算能力的提升,人工智能产业才得到了发展,进而达到了目前这种火热的局面。下面将对于机器学习算法在目前阶段所取得的一些成就进行一个介绍,方便大家了解机器学习算法的用途。

    1.2 发展现状

    上一节中回顾了人工智能的发展历程,不考虑计算能力等硬件条件的限制,当今世界的人工智能可以总结为数据和智能算法的结合。通过对过往经验的分析得到实验模型,并且利用这种模型指导实际的业务。把人工智能看作一个人类大脑的话,里面的血液就是数据,而大脑里面的血管承载着数据的流转,可以看作是相关的机器学习算法。所以在介绍机器学习算法之前,大家不得不先了解一下大数据时代的特性,然后再针对当前数据爆炸的这种情况介绍机器学习算法的一些用途。

    1.2.1 数据现状

    21世纪注定是属于互联网的,在这个数字时代产生了很多新名词,这里边有云计算、电子商务和有共享经济。大数据也是互联网时代的产物,出现在报纸中、电视上、网页里。“大数据”已经成为信息时代的代名词,乃至于好多人还来不及认识它,就已经开始被它支配。什么是数据?客观世界存在的那一刻开始,数据就已经出现了,从宇宙中天体运动的速度、角度及天体的质量,到人类文明的产生、更迭和演进。数据无处不在,但是数据的价值在于如何采集和利用。

    正是受到互联网的驱动,人类开始采集和利用数据。对于大数据时代,我最深切的感触是大数据未来的版图清晰又模糊。清晰的是人们已经开始意识到数据是有价值的,并且已经开始采集数据,看看人们都做了什么?根据存储市场调研的最新报告,目前世界全年的数据保存量约合 50EB,这些数据来源于互联网、医疗健康、通信、公共安全以及军工等行业。接下来,我们来看看这些数据是如何产生的。

    以全球最大的 SNS 服务商 Facebook 为例。Facebook 现在的用户数达到9.5亿,这些用户的每一个行为,包括每一次通知、页面访问、查看朋友的页面,都会被Facebook 的服务器追踪,并且产生历史行为数据。而全世界9.5亿用户平均每个月在 Facebook 上花费的时间超过6.5个小时,产生的数据量大小超出人们的想象。Facebook 上每天可以产生 500TB 左右的数据量,我们来看看这些数据具体包括什么。人们每天分享 25 亿个内容条目,包括状态更新、墙上的帖子、图片、视频和评论,每天有 27 亿个“ like”操作,人们每天上传 3 亿张图片。

    虽然诸如 Facebook、Google 和 Alibaba 这样的国际互联网巨头已经开始积累数据,并且将数据进行分析来反哺业务。但是截止到今天,全世界每年保存下来的数据只占到数据产生总量的百分之一不到,其中可以被标记并且分析的数据更是连百分之十都不到。这种现状造成了两方面的瓶颈,一方面是数据产生和数据收集的瓶颈,另一方面是采集到的数据和能被分析的数据之间的瓶颈。

    针对数据产生和数据采集的瓶颈,其原因一方面是硬件存储成本的限制,但是随着硬盘技术的发展和产能的提升,这方面的缺陷正逐渐弱化。笔者认为,造成目前数据采集与数据生成失衡的主要原因是数据的采集缺乏标准。虽然,互联网公司对数据采集和标准制定方面已经形成了一套成熟的体系,如网站的点击行为、日志的收集等。但是对于更多行业,特别是传统行业来说,数据的采集方式还处于摸索当中,而且从目前来看,这样的摸索还将持续相当长的时间。尽管现在提倡互联网思维以及世界万物联网的思想,但是互联网对于采集数据的经验恐怕很难复制到传统行业。因为互联网行业对于数据采集存在天然的优势,互联网的数据都是托管在数据库里,以二进制的方式记录在硬盘中,只要稍作处理就可以形成一份质量较高的结构化数据。但是在传统行业,以建筑行业为例,数据产生于工地上一砖一瓦的堆砌,产生于工地的施工建设,这样的数据如何转成二进制来存储需要由新的标准来指定,而这种标准更多地受限于技术手段。如果我们的图像识别做得足够智能,拍一张照片就可以将工地的数据量化,这样可能就可以解决这种问题。对于传统行业的数据智能化进程可能还需要耐心的等待。

    数据采集方面还需要制定更多的标准以及技术的支持,但是数据的应用方面也存在不小的缺陷。如果目前世界上采集到的数据能被充分利用是足够颠覆生活的,可惜的是目前可以供分析的数据还只占很小的比例。造成这样的困境主要有两方面因素,一个是目前比较主流的机器学习算法都是监督学习算法,监督学习需要的数据源是打标过的数据,打标数据很多时候是依赖于人工标记。比如我们需要一份数据来训练模型进行电影推荐,除了已知的电影的特征数据以外,还需要一份打标的数据来表示电影的好看程度,有点像豆瓣的电影分数,这种数据很难通过计算机的计算直接生成,需要依赖于人工打标。人工打标的影响就是,一方面很难生成大量的标本(上千万样本的数据),设想一下1000万人坐到一个地方一起看一部电影再进行评分是多么浩大的一项工程。另一方面,人工打标的成本太高,目前有很多负责打标的第三方公司,打标服务往往在市场上可以卖到很高的价格。

    另一个导致可分析数据比例较低的因素是对于非结构化的数据处理能力较低。非结构化数据指的是文本或者图片、语音、视频这样的数据。这部分数据来自于用户在贴吧的评论、社交软件上的头像、直播平台上的视频展现等。虽然目前的科技水平已经具备了文本和图像方面的分析能力,但是在大批量处理和特征提取方面依然处于相对基础的阶段。以图像识别为例,目前比较成熟的包括人脸识别和指纹识别等,图像识别的特点是每种事物的识别需要训练相对应的模型,而这种模型需要大量的训练样本来提高精确率,一个成熟的模型通常需要千万级别的训练样例。人脸的数据是比较容易获取的,所以相应的模型比较容易训练,但是假如我们需要训练一个模型来识别某一款杯子,针对这一款杯子的训练数据是很难达到理想量级的,这也提高了特定场景下图像识别的门槛。

    互联网在不断发展,数据的生成也不会停下脚步。目前被广泛引用的互联网数据中心(International Data Corporation,IDC)和 EMC 联合发布的“2020年的数字宇宙”报告显示,到2020年全球数字宇宙将会膨胀到40000EB,均摊每个人身上是5200GB以上,这个数据量的数据将会如何被有效存储和应用,目前我们还不敢想象。不过可以肯定的是,数据会成为重要的资源,就像是水电煤一样,在大数据时代,特别是未来的数据爆发时代,数据一定会展现出更大的潜能,人类社会也会进入数据处理技术(Data Technology,DT)时代。

    1.2.2 机器学习算法现状

    之前讲了大数据,这里再讲机器学习就变得容易理解了。传统的机器工作模式是程序员向机器输入一连串的指令,可以理解为是代码,然后机器按照这些指令一步一步执行下去,结果通常是我们可以事先预料的。这种逻辑在机器学习里是走不通的,机器学习是指我们向机器(更准确地说是机器学习算法)中输入数据,然后机器会根据数据返回结果,这些结果是通过数据自我学习得到的,学习的过程通过算法来完成。我们可以这样来定义,机器学习方法是计算机利用已有的数据(经验)得出了某种模型,并利用这些模型预测未来的一种方法。这个过程其实与人的学习过程极为相似,只不过机器是一个可以进行大维度数据分析而且可以不知疲倦地学习的“怪兽”而已(见图1-3)。

    enter image description here

    图1-3 机器学习与人的不同

    机器学习跟模式识别、统计学习、数据挖掘、计算机视觉、语音识别和自然语言处理等领域都有着很深的联系。如今生活在这样的 DT 时代,随时随地都是机器学习的影子,通过机器对大数据进行分析而带来的人工智能应用,正在一点一点地改变人们的生活方式和思维方式。看到这里很多人都会发问:机器学习究竟能做什么?其实机器学习已经服务了我们生活的各个方面,下面以一个简单的购物场景来介绍机器学习是如何应用在我们的日常生活中的。

    现在是 2016 年,如果你还没有尝试过网上购物,那真的是落伍了。网上购物目前已经成了人们的生活方式。下面就简单地聊聊机器学习算法在购物行为中的应用。假设我们在餐厅吃饭,看到一个人的短袖体恤很漂亮,我们想买同款,但是又不好意思开口去问。那么我们可以先偷拍一张这个人的T恤的照片,然后拍立淘(见图1-4)就会显示出这件衣服的同款。

    enter image description here

    图1-4 拍立淘

    这里就用到了机器学习中的图像识别技术。但是往往与这件衣服相近的款式又非常的多,因此我们需要把这些款式按照一定的规则进行排序,这就涉及了机器学习算法模型的训练,通过这个模型,我们把所有的类似款式进行一个排名,最后就得出了最终的展示顺序。

    当然,更多的时候我们是通过键盘的输入来搜索商品的,但是如果犯懒,还可以选择通过语音的方式输入内容,这就是语音转文本的运用。在我们搜索一款产品之后,网页的边栏上会出现一些推荐列表,而且每个用户的推荐列表都是不同的,这就是所谓的千人千面。这个场景的实现依赖的是推荐系统后台的用户画像,而用户画像就是大数据和机器学习算法的典型应用,通过挖掘用户的特征,如性别、年龄、收入情况和爱好等特征,推荐用户可能购买的商品,做到个性化推荐。

    到了这一步,我们终于把商品放到了购物车里,开始下单。下单之前我们发现网银账户中的钱不够用了,想申请一些贷款。这个时候,我们发现有一个贷款额度,这个额度是如何计算的呢?这里面涉及金融风控的问题,而金融风控也是根据机器学习的算法来训练模型并且计算出来的。

    下单之后我们的商品就被安排配送了,目前除了少数边远地区,基本上5天之内就可以收到商品。这段时间包含了商品的包装、从库存发货到中转库存、从低级仓库到高级仓库配送、向下分发。这么多工序之所以能够在短时间内完成,是因为仓储在库存方面已经提前做了需求量预测,提前在可能的需求地附近备货,这套预测算法也是建立在机器学习算法基础之上的。

    我们的快递员拿到货物,打开地图导航,系统已经为他设计了配送的路径,这个路径避免了拥堵而且尽量把路线设计到最短距离,这也是通过机器学习算法来计算的。快递员走进门,我们拿到货物后,发现衣服的尺码不合适怎么办?打开客服,输入问题,然后我们发现可以瞬间得到回复,因为这名客服人员可能并不是真的“客服人员”,只是一个客服机器人而已。智能客服系统利用文本的语意分析算法,可以精准地确定用户的问题,并且给予相应问题的解答。同时,智能客服还可以对用户问题的语境进行分析,如果问题很严重需要赔偿,如:“你的产品害我坏肚子了”这样的问题会由客服机器人通过情感分析挑出来,交给专人处理。

    如上所述,笔者简单列举了机器学习在网上购物中的几大应用,这里面涉及了很多智能算法,包括模型的训练和预测、语义分析、文本情感分析、图像识别技术以及语音识别技术。我们可以看到,在网购这种最常见的场景下,机器学习算法几乎贯穿了全部流程。

    当然,我们还可以列举出非常多诸如上述例子,因为场景实在太多了,没有办法全部穷举出来,这里通过场景来切分把机器学习的一些高频场景列举如下。

    • 聚类场景:人群划分和产品种类划分等。
    • 分类场景:广告投放预测和网站用户点击预测等。
    • 回归场景:降雨量预测、商品购买量预测和股票成交额预测等。
    • 文本分析场景:新闻的标签提取、文本自动分类和文本关键信息抽取等。
    • 关系图算法:社交网络关系(Social Network Site,SNS)网络关系挖掘和金融风险控制等。
    • 模式识别:语音识别、图像识别和手写字识别等。

    上面列举的应用只是机器学习算法应用场景中的一小部分,其实随着数据的积累,机器学习算法是可以渗透到各行各业当中,并且在行业中发生巨大的作用。随着数据智能、数据驱动等思想的传播,机器学习算法正在成为一种普世的基础能力向外输出。我们可以预见未来随着算法和计算能力的发展,机器学习应该会在金融、医疗、教育、安全等各个领域有更深层次的应用。笔者特别期待机器学习算法在破解基因密码以及癌症攻破方面可以取得突破,同时无人车、增强现实(Augmented Reality,AR)等新概念、新技术的发展也需要依赖于机器学习算法的发展。相信未来,机器学习算法会真正做到颠覆生活改变人类命运。

    第01章:机器学习概述(下)

    1.3 机器学习基本概念

    在开始机器学习的算法流程介绍之前,因为机器学习是一个多学科交叉的学科,有很多类似于统计学的概念,但是在叫法上与传统的统计学又有一定的区别,我们需要了解一些机器学习相关的基本概念,因为如果不明确这些概念的话,对于一些文献的阅读和理解会构成障碍。下面通过这一节的介绍帮助大家对于基础的机器学习名词和概念进行了解,首先介绍一下机器学习的基本流程,然后针对机器学习涉及的数据、算法和评估这3个方面用到的基础概念进行介绍。

    1.3.1 机器学习流程

    机器学习的过程就是一个数据流转、分析以及得到结果的过程,在使用的过程中很多人花了很多时间在算法的选择或者调优上,但其实机器学习的每一个步骤都是至关重要的,介绍算法的具体实现的资料已经比较丰富了,笔者希望花更多的篇幅来介绍数据的处理和整个机器学习流程的串联。

    机器学习的整个流程大致可以分为6个步骤,整个流程按照数据流自上而下的顺序排列,分别是场景解析、数据预处理、特征工程、模型训练、模型评估、离线/在线服务(见图1-5),下面来逐一介绍下这些步骤的基本功能。

    enter image description here

    图1-5 数据挖掘流程

    (1)场景解析。场景解析就是先把整个业务逻辑想清楚,把自己的业务场景进行一个抽象,例如我们做一个广告点击预测,其实是判断一个用户看到广告是点击还是不点击,这就可以抽象成二分类问题。然后我们根据是不是监督学习以及二分类场景,就可以进行算法的选择。总的来说,场景抽象就是把业务逻辑和算法进行匹配。

    (2)数据预处理。数据预处理主要进行数据的清洗工作,针对数据矩阵中的空值和乱码进行处理,同时也可以对整体数据进行拆分和采样等操作,也可以对单字段或者多字段进行归一化或者标准化的处理。数据预处理阶段的主要目标就是减少量纲和噪音数据对于训练数据集的影响。

    (3)特征工程。特征工程是机器学习中最重要的一个步骤,这句话一点都没有错。特别是目前随着开源算法库的普及以及算法的不断成熟,算法质量并不一定是决定结果的最关键因素,特征工程的效果从某种意义上决定了最终模型的优劣。通过一个例子说明一下特征工程的作用,2014 年某互联网巨头举办了一场大数据竞赛,参赛队伍在 1000 个以上,到最后,这里面几乎所有的参赛队伍都用了相同的一套算法,因为算法的优劣是比较容易评判的,不同算法的特性是不一样的,而且可供选择的算法种类是有限的。但是特征的选取和衍生却有极大的不定性,100 个人眼中可能有 100 种不同的特征,所以这种大赛到了后期,往往大家比拼的就是特征选取的好坏。在算法相对固定的情况下,可以说好特征决定了好结果。

    (4)模型训练。如图1-6所示的“逻辑回归二分类”组件表示的是算法训练过程,训练数据经过了数据预处理和特征工程之后进入算法训练模块,并且生成模型。在“预测”组件中,读取模型和预测集数据进行计算,生成预测结果。

    enter image description here

    图1-6 模型训练

    (5)模型评估。机器学习算法的计算结果一般是一个模型,模型的质量直接影响接下来的数据业务。对于模型的成熟度的评估,其实就是对于整套机器学习流程的评估。

    (6)离线/在线服务。在实际的业务运用过程中,机器学习通常需要配合调度系统来使用。具体的案例场景如下:每天用户将当日的增量数据流入数据库表里,通过调度系统启动机器学习的离线训练服务,生成最新的离线模型,然后通过在线预测服务(通常通过 Restful API,发送数据到服务器的算法模型进行计算,然后返回结果)进行实时的预测。具体架构如图1-7所示。

    enter image description here

    图1-7 机器学习服务架构

    利用这种架构就实现了离线训练和在线预测的结合,串联了从离线到在线的整个业务逻辑。

    1.3.2 数据源结构

    前面已经介绍了机器学习的基本流程,下面将针对机器学习的数据结构进行介绍。如果把机器学习算法比作一个数据加工场,那么进入工厂的数据就是被算法用来加工的原材料,机器学习算法需要的数据是什么样结构的呢?如果经常关注大数据相关的文章,基本会听说过“结构化数据”和“非结构化数据”这两个词,当然这里面还能衍生出“半结构化数据”,下面分别介绍一下这几种数据的结构。

    (1)结构化数据。结构化数据是指我们在日常数据库处理中经常看到的日志类数据结构,是以矩阵结构存储在数据库中的数据,可以通过二维表结构来显示,如图1-8所示。

    enter image description here

    图1-8 结构化数据示例

    结构化数据主要由两个部分组成,一个部分是每个字段的含义,也就是图1-8中的 age、sex、cp 等字段头,另一个部分是每个字段的具体数值。通常来讲,机器学习算法处理的数据都是结构化的数据,因为机器学习需要把数据带入矩阵去做一些数学运算,结构化数据原生是以矩阵形态存储的,所以机器学习算法通常是只支持结构化数据的。

    结构化数据中还有两个非常重要的概念需要介绍一下,即特征(Feature)和目标列(Label)。这是机器学习算法中最常出现的两个名词,其中特征表示的是数据所描述对象的属性,如用一组数据来形容人,那么这个人的身高、体重、性别和年龄都是特征。在结构化数据的数据集中,每一列数据通常就对应一个特征。

    目标列表示的是每一份数据的打标结果,因为前面也介绍过,机器学习的原理其实是从历史数据中来学习经验,目标列表示的是这一组数据的结果。例如,我们想通过一份体检数据来预测对象是否有心脏病,需要先通过成千上万份的训练数据来生成模型,这成千上万份的训练数据需要打标,也就是说机器要事先知道什么样体检指标的人患病了,什么样的人没有患病,这样才能学习出预测模型。通过一个例子来说明,如图1-9所示为一份心脏病预测需要的数据结果,其中框起来的字段表示的是对象是否患病,这一列是目标列。其他3个字段 age、sex 和 cp 描述的是对象的特征,是特征列。

    (2)半结构化数据。半结构化数据是指按照一定的结构存储,但不是二维的数据库行存储形态的数据。比较典型的半结构化数据就是 XML 扩展名的存储数据,如图1-10所示。

    enter image description here

    图1-9 目标列说明

    enter image description here

    图1-10 半结构化数据

    另一种半结构化数据就是在数据表中,某些字段是文本型的,某些字段是数值型的。见表1-1。

    表1-1 半结构化数据

    IDOccupationIncome
    小李老师241
    小王厨师521
    小刘司机421
    小方运动员23636

    半结构化数据常用于一些数据的传递,但是在机器学习算法相关的应用方面还有一定距离,需要做数据转换把半结构化数据转为结构化数据来进行操作。

    (3)非结构化数据。非结构化数据的数据挖掘一直以来是机器学习领域的热点话题,特别是随着深度学习的发展,目前对于非结构化数据的处理似乎找到了方向。典型的非结构化数据就是图像、文本或者是语音文件。这些数据不能以矩阵的结构存储,目前的做法也是通过把非结构化数据转为二进制存储格式,然后通过算法来挖掘其中的信息。第6章和第7章将详细介绍如何使用深度学习算法实现非结构化数据的处理。

    以上就是对于真实业务场景下需要处理的3类数据结构的介绍。机器学习算法对于结构化数据的支持是比较好的,对于半结构化数据和非结构化数据,在真实的业务场景下,通常是先把这两类数据做转化,然后才通过算法来进行数据挖掘。关于非结构化数据转为结构化数据的方法在第4章也有相关介绍。

    1.3.3 算法分类

    上面对于机器学习的流程和数据源结构都进行了介绍,下面对于算法的分类进行一个简单的说明。机器学习算法包含了聚类、回归、分类和文本分析等几十种场景的算法,常用的算法种类为 30 种左右,而且还有很多的变形,我们将机器学习分为 4 种,分别是监督学习、无监督学习、半监督学习和增强学习。

    (1)监督学习。监督学习(Supervised Learning),是指每个进入算法的训练数据样本都有对应的期望值也就是目标值,进行机器学习的过程实际上就是特征值和目标队列映射的过程。例如,我们已知一只股票的历史走势以及它的一些公司盈利、公司人数等信息,想要预测这只股票未来的走势。那么在训练算法模型的过程中,就是希望通过计算得到一个公式,可以反映公司盈利、公司人数这些信息对于股票走势的影响。通过过往的一些数据的特征以及最终结果来进行训练的方式就是监督学习法。监督学习算法的训练数据源需要由特征值以及目标队列两部分组成。

    如图1-11所示,ifhealth 是目标队列,age、sex 和 cp 为特征队列,这就是一个典型的监督学习的训练数据集。因为监督学习依赖于每个样本的打标,可以得到每个特征序列映射到的确切的目标值是什么,所以常用于回归以及分类场景。常见的监督学习算法见表1-2。

    表1-2 监督学习

    分类算法

    K 近邻、朴素贝叶斯、决策树、随机森林、GBDT 和支持向量机等

    回归算法

    逻辑回归、线性回归等

    监督学习的一个问题就是获得目标值的成本比较高。例如,我们想预测一个电影的好坏,那么在生成训练集的时候要依赖于对大量电影的人工标注,这样的人力代价使得监督学习在一定程度上是一种成本比较高的学习方法。如何获得大量的标记数据一直是监督学习面临的一道难题。

    enter image description here

    图1-11 监督学习

    (2)无监督学习。无监督学习(Unsupervised Learning),学习上面讲的监督学习的概念之后,其实无监督学习就比较好理解了。无监督学习就是指训练样本不依赖于打标数据的机器学习算法。既然是没有目标队列,也就缺少了特征环境下的最终结果,那么这样的数据可能对一些回归和分类的场景就不适合了。无监督学习主要是用来解决一些聚类场景的问题,因为当我们的训练数据缺失了目标值之后,能做的事情就只剩下比对不同样本间的距离关系。常见的无监督学习算法见表1-3。

    表1-3 半监督学习

    聚类算法

    K-Means、DBSCAN 等

    推荐算法

    协同过滤等

    相较于监督学习,无监督学习的一大好处就是不依赖于打标数据,在很多特定条件下,特别是打标数据需要依靠大量人工来获得的情况下可以尝试使用无监督学习或者半监督学习来解决问题。

    (3)半监督学习。半监督学习(Semi-supervised Learning),是最近几年逐渐开始流行的一种机器学习种类。上文中也提到,在一些场景下获得打标数据是很耗费资源的,但是无监督学习对于解决分类和回归这样场景的问题又有一些难度。所以人们开始尝试通过对样本的部分打标来进行机器学习算法的使用,这种部分打标样本的训练数据的算法应用,就是半监督学习。目前很多半监督学习算法都是监督学习算法的变形,本书将介绍一种半监督学习算法——标签传播算法。其实目前半监督算法已经有很多的应用了,推荐大家去深入了解。

    (4)强化学习。强化学习(Reinforcement Learning),是一种比较复杂的机器学习种类,强调的是系统与外界不断地交互,获得外界的反馈,然后决定自身的行为。强化学习目前是人工智能领域的一个热点算法种类,典型的案例包括无人汽车驾驶和阿尔法狗下围棋。本书介绍的分词算法隐马尔科夫就是一种强化学习的思想。

    上面就是关于监督学习、无监督学习、半监督学习和强化学习的一些介绍。监督学习主要解决的是分类和回归的场景,无监督学习主要解决聚类场景,半监督学习解决的是一些打标数据比较难获得的分类场景,强化学习主要是针对流程中不断需要推理的场景。本书对于这4类机器学习算法都有介绍,具体的分类见表1-4,方便大家有针对性的学习。

    表1-4 算法分类

    监督学习

    逻辑回归、K 近邻、朴素贝叶斯、随机森立、支持向量机

    无监督学习

    K-means、DBSCAN、协同过滤、LDA

    半监督学习

    标签传播

    强化学习

    隐马尔可夫

    1.3.4 过拟合问题

    机器学习模型训练的过程中会遇到非常多的问题,如参数或者梯度的设置不合理、数据的清洗不够彻底,但是如果问一个数据挖掘工程师什么问题是数据挖掘领域中最常见的问题,他的答案八成是“过拟合”,这也是为什么我们要单独拿出一小节来讲一下数据挖掘过程中的过拟合问题。

    过拟合(Over-fitting),从字面的意义上理解的话就是过度拟合的意思,常发生在线性分类器或者线性模型的训练和预测当中。过拟合现象是在数据挖掘过程中经常会遇到的问题,如通过训练集训练了一个模型,这个模型对于训练集的预测准确率很高,可以达到95%,但是我们换一份数据集进行预测,发现准确率只有30%,出现这种情况的原因很有可能是训练的过拟合现象。

    过拟合的原理就是机器学习算法过度学习了训练集数据,听上去有点难以理解,下面通过一个例子进行解释。假设我们有一组二维数据展示在坐标系当中,我们想对这个二维数据进行一个线性的回归训练。如果拟合出的曲线是如图 1-12 所示的虚线,其实是一种欠拟合(underfitting)的形式,曲线拟合的并不理想,因为并没有通过回归算法很好地拟合出一种符合数据分布的曲线。

    enter image description here

    图1-12 线性拟合曲线一

    我们再来看看图1-13。

    enter image description here

    图1-13 线性拟合曲线二

    如果最终拟合出来的是如图1-13所示情况,就是一种比较理想的状况,我们看到最终的曲线走势已经几乎刻画了数据的分布,这种曲线是比较理想的。那么什么是过拟合呢?我们来看下图1-14。

    enter image description here

    图1-14 线性拟合曲线三

    如图1-14所示这种情况是典型的过拟合,图中的曲线已经跟数据分布完全一致。那么有的人可能会问,做线性回归的目的不就是为了找到最符合数据走向的曲线么,为什么当我们拿到的结果跟数据走向完全匹配的时候反而不好呢?这是因为训练线性回归曲线或者线性分类器的目的是要对于其他数据集进行分类或者预测。如果在针对训练集做曲线拟合的时候做得过于“完美”,那么当我们针对于其他预测集进行预测的时候,这套模型很有可能会失准,因为这套模型在训练的时候过度地接近于训练集的特征,缺乏鲁棒性。所以在机器学习训练过程中,100%的拟合训练集数据并不一定是好的。

    通过前面的介绍,我们已经明白了过拟合发生的现象和原理,那么究竟是什么原因导致了过拟合问题的出现呢?原因可以总结为以下几种。

    • 训练数据集样本单一,如训练样本只有白色鸭子的数据,我们拿生成的模型去预测黑鸭子肯定是不对的。所以在做训练的过程中,要求训练样本要尽可能地全面,覆盖所有的数据类型。
    • 训练样本噪音数据干扰过大,噪音数据是指数据集中的干扰数据。过多的噪音数据会导致模型记录了很多噪音特征,忽略了输入和输出之间的关系。
    • 模型过于复杂,模型参数太多往往也是造成过拟合现象的一个重要因素。所以一个成熟的模型不一定是非常复杂的,而是要求模型对于不同的数据集都有稳定的输出表现。

    针对过拟合这样的常见性问题,其实已经有了很多预防和解决的办法如下所示。

    • 在训练和建立模型的时候,一定要从相对简单的模型开始,不要一上来就把模型调得非常复杂、特征非常多,这样很容易造成过拟合现象的发生。而且当模型过于复杂而造成过拟合现象发生之后,也比较难于排查具体的问题出在哪一部分特征。
    • 数据的采样,一定要尽可能地覆盖全部数据种类。另外,数据需要经过清洗后再进行算法训练,否则如果混入了大量噪声数据,会加大过拟合问题发生的概率。
    • 在模型的训练过程中,我们也可以利用数学手段预防过拟合现象的发生,可以在算法中添加惩罚函数来预防过拟合,这里如果想详细了解可以参考正则化 L1、L2 规范,本书就不对这部分内容展开来讲了。

    以上对于过拟合问题进行了基本的描述,而且也介绍了问题发生的原因以及预防的方法。因为过拟合问题是在使用机器学习算法的过程中非常有可能碰到的问题,所以掌握这方面的知识以及应对手段是非常重要的。希望通过本节的学习,大家可以在模型训练当中有意识地避免过拟合问题的发生。

    1.3.5 结果评估

    前文介绍了一些机器学习算法在具体数据挖掘过程中可能会遇到的一些概念和名词,我们知道机器学习算法的最终目的是生成模型,模型的好坏需要通过一些指标来评估,现在就来介绍一下在机器学习算法中可能用到的一些关于结果评估的概念。常用到的概念可能包括精确率、召回率、F1 值、ROC 和 AUC 几种,看上去概念有点多,因为每个指标都是从不同维度来对结果进行评估,下面将分别介绍这几个概念的含义。

    (1)精确率、召回率、F1 值。因为精确率(Precision)、召回率(Recall)和 F1(F-Measure)值常被放在一起作比较,所以把相关的这3个指标放在一起介绍。计算这3个指标还需要先了解下 TP、TN、FP 和 FN 这4个指标的含义。

    • TP(True Positive):本来是正样本,被模型预测为正样本。
    • TN(True Negative):本来是负样本,被模型预测为负样本。
    • FP(False Positive):本来是负样本,被模型预测为正样本。
    • FN(False Negative):本来是正样本,被模型预测为负样本。

    上面这4个概念读上去有点难以理解,我们通过一个实际的案例讲解一下。例如有一个预测集,里面有500个女生和100个男生,需要通过机器学习生成模型,尽可能地区分数据集中的女生,所以女生是正样本,假如我们最终的预测结果是70个女生和20个男生。下面计算精确率、召回率以及 F1 值,首先要计算 TP、TN、FP 和 FN 这4个值。在这个案例里面,TP 为本来是女生又被预测为女生的人数,所以 TP 的值为70;FP表示本来是男生被预测为女生的人数,FP 的值为20;FN 表示本来是女生但被预测为男生的人数,FN 的值为500−70=430。

    最终精确率、召回率、F1 值的公式如下。

    enter image description here

    通过上面的公式可以看出,其实精确率的概念通俗来讲就是模型在预测的时候正确的比例。召回率表示的是在预测到的正样例占全部正样例的比例。这可以看到精确率和召回率是对模型的两个维度的评估,前者评估的是准确性,后者评估的是覆盖率。当然在实际的模型评估中,我们希望精确率和召回率都尽可能高,但是实际上这两个指标是相互矛盾的,为了更均衡的评估精确率和召回率,我们创建了 F1 值。F1 值表达的是精确率和召回率的综合评估,现在很多的模型评估都是通过 F1 值来做,就是考虑到了 F1 值可以把这两个指标结合在一起来评估。

    (2)ROC 和 AUC。ROC(Receiver Operating Characteristic Curve)曲线是常用的二分类场景的模型评估算法曲线,ROC曲线的样例如图1-15所示。

    enter image description here

    图1-15 ROC 曲线

    图1-15中的齿状弧形曲线就是 ROC 曲线,这个曲线的横轴为上面提到的 FP 值,TP 值是纵轴。如何来评估模型的好坏呢?通过 ROC 曲线可以清晰地展示出来,只要是模型曲线越接近于左上角就说明模型的效果越好。通过 AUC 值来表示 ROC 曲线与横轴围起来的面积(也就是图1-15中有颜色覆盖的部分),这个 AUC 值越大表示模型的效果越好。AUC 的取值是0到1,通常大于0.5,当 AUC 的取值达到0.9以上时,证明这个模型的效果是比较不错的。

    上面介绍了 ROC 和 AUC 两个指标的概念,AUC 是通过 ROC 曲线计算出来的面积实现的。AUC 和 F1 值一样,都是通过一个数值来对于最终的结果进行评估的。ROC 的作用更多是通过对于曲线的光滑程度以及曲线的斜率来获取模型内包含的信息。

    1.4 本章小结

    本章作为全书的开篇章节,通过对于人工智能领域的发展历史引出了本书的主角——机器学习算法,其实机器学习算法已经贯穿了我们的日常生活,正是因为这些智能算法的普及,所以越来越多的人把目光瞄向了这一新生的技术。我们通过举例介绍了机器学习算法的发展现状,帮助读者梳理了这一学科的应用领域,另外通过对于一些基础概念的介绍,帮助初学者对于机器学习入门。有了上述背景,下面就正式开始对整个机器学习全流程的介绍。

    第02章:场景解析
    第03章:数据预处理(上)
    第03章:数据预处理(下)
    第04章:特征工程(上)
    第04章:特征工程(中)
    第04章:特征工程(下)
    第05章:机器学习算法——常规算法(上)
    第05章:机器学习算法——常规算法(中)
    第05章:机器学习算法——常规算法(下)
    第06章:机器学习算法——深度学习(上)
    第06章:机器学习算法——深度学习(下)
    第07章:常见机器学习工具介绍(上)
    第07章:常见机器学习工具介绍(中)
    第07章:常见机器学习工具介绍(下)
    第08章:业务解决方案(上)
    第08章:业务解决方案(中)
    第08章:业务解决方案(下)
    第09章:知识图谱(上)
    第09章:知识图谱(下)

    阅读全文: http://gitbook.cn/gitchat/geekbook/5a377733d7fd13649973b0dc

    展开全文
  • 机器学习已经在某些领域取得了显著的成果,例如模式识别领域,但机器学习对需要广泛的洞察力和行业效率的企业产生了更大更持久的影响。谷歌在美国总部以外最大的开发者集合是一个致力于机器学习的研究小组,微软开源...
  • 1、定义问题,获取数据 2、导入数据 3、分析数据(以pandas DataFrame类型数据为例) 1、打印数据,简单查看 print(data.head()) 2、数据维度 3、数据属性和类型: 4、描述性统计:通过DataFrame 的describe()...
  • 原创不易,如需转载,请标明出处。 常用数据分析步骤 1.导入基本工具库: import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns ...fr...
  • 作者:Todd Moses 编译:BigQuant 通过对冲降低交易风险的方法有很多,基金通常使用期货和期权来对冲每笔交易,然而与保险类似,这种安全网也是有成本的。现在有一种基于人工智能的方法,或许可以帮助实现更低的...
  • 利用机器学习进行恶意代码分类 最近在Kaggle上微软发起了一个恶意代码分类的比赛,并提供了超过500G的数据(解压后)。有意思的是,取得第一名的队伍三个人都不是搞安全出身的,所采用的方法与我们常见的方法存在很大...
  • 基本把跟算法交易相关的机器学习内容概括性的提到了,遗憾的是并没有给出代码,也没给个github资料。 书名有点骗人,我买之前以为是能够详细介绍用机器学习进行算法交易的,读完才知道是个大概框架。 不够这不能怪...
  • 从使用的数据类型,以及相关的机器学习技术的观点来看,互联网搜索经历了三代的发展历程。  第一代技术,将互联网网页看作文本,主要采用传统信息检索的方法。  第二代技术,利用互联网的超文本结构,有效地计算...
  • ML/DL之预测分析类:利用机器学习算法进行预测分析的简介、分析、代码实现之详细攻略 目录 机器学习算法进行预测的简介 机器学习算法进行预测的分析 机器学习算法进行预测的代码实现 机器学习算法...
  • 各种类型企业都希望利用机器学习来降低成本,希望获得更好的成果。这种机器学习的广泛采用有一些后果,大数据的应用并不是一件容易的事情,当企业的数据管理系统随着快速发展的算法而不断更新时,企业目前面临着严峻...
  • 在本教程中,我将带你使用Python来开发一个利用机器学习技术的车牌识别系统(License Plate Recognition)。 车牌识别系统使用光学字符识别(OCR)技术来读取车牌上的字符。 换句话说,车牌识别系统以车辆图像作为...
  • 各位老司机晚上好啊,上篇文章主要采用了Frechet Distance进行曲线分类,这篇文章主要采用机器学习的方法来实现曲线分类,基本思路是对训练集先用聚类方法(如Kmeans和Birch等进行聚类,对数据打上标签),然后在对...
  • ML之Medicine:利用机器学习研发药物—《Machine Learning for Pharmaceutical Discovery and Synthesis Consortium》 目录 Machine Learning in Computer-Aided Synthesis Planning 论文以及Demo ...
  • 学习机器学习也有段时间了,借《机器学习 实战》的第一篇中的例子来记录下自己的学习过程吧,《实战》中的第一讲即是利用k近邻分类器进行手写体的识别,原理很简单,由于手写体的数字已经被处理成用01表示的文本650)...
  • 有了股票历史数据,如果我们决定采用机器学习的方法来制定策略算法的话,接下的步骤就是分析数据、选择特征和机器学习模型、预测结果等等。 由于股票的数据分析和特征选择比较多样化,这里我们随意选取股票前两天...
  • 利用机器学习,人工智能系统获得了归纳推理和决策能力;而深度学习更将这一能力推向了更高的层次。 从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义...
  • 大数据原本在工业界中就已经炙手可热,而基于大数据的机器学习则更加流行,因为其通过对数据的计算,可以实现数据预测、为公司提供决策依据。跟我们生活息息相关的最常见机器学习算法包括电影推荐算法、图书推荐算法...
1 2 3 4 5 ... 20
收藏数 314,617
精华内容 125,846
关键字:

利用机器学习