机器学习算法

机器学习算法简介

引言

本文是对机器学习算法的一个概览,以及个人的学习小结。通过阅读本文,可以快速地对机器学习算法有一个比较清晰的了解。本文承诺不会出现任何数学公式及推导,适合茶余饭后轻松阅读,希望能让读者比较舒适地获取到一点有用的东西。

本文主要分为三部分,第一部分为异常检测算法的介绍,个人感觉这类算法对监控类系统是很有借鉴意义的;第二部分为机器学习的几个常见算法简介;第三部分为深度学习及强化学习的介绍。最后会有本人的一个小结。

1 异常检测算法

异常检测,顾名思义就是检测异常的算法,比如网络质量异常、用户访问行为异常、服务器异常、交换机异常和系统异常等,都是可以通过异常检测算法来做监控的,个人认为这种算法很值得我们做监控的去借鉴引用,所以我会先单独介绍这一部分的内容。

异常定义为“容易被孤立的离群点 (more likely to be separated)”——可以理解为分布稀疏且离密度高的群体较远的点。用统计学来解释,在数据空间里面,分布稀疏的区域表示数据发生在此区域的概率很低,因而可以认为落在这些区域里的数据是异常的。

主流机器学习算法简介与其优缺点分析

机器学习算法的分类是棘手的,有几种合理的分类,他们可以分为生成/识别,参数/非参数,监督/无监督等。

例如,Scikit-Learn的文档页面通过学习机制对算法进行分组。这产生类别如:1,广义线性模型,2,支持向量机,3,最近邻居法,4,决策树,5,神经网络,等等…

但是,从我们的经验来看,这并不总是算法分组最为实用的方法。那是因为对于应用机器学习,你通常不会想,“今天我要训练一个支持向量机!”相反,你心里通常有一个最终目标,如利用它来预测结果或分类观察。

所以在机器学习中,有一种叫做“没有免费的午餐”的定理。简而言之,它的意思就是说没有任何一种算法可以完美地解决每个问题,这对于监督式学习(即预测性建模)尤其重要。

例如,你不能说神经网络总是比决策树好,反之亦然。有很多因素在起作用,比如数据集的大小和结构。因此,您应该为您的问题尝试许多不同的算法,同时使用数据的“测试集”来评估性能并选择优胜者。

当然,你尝试的算法必须适合你的问题,这就是选择正确的机器学习算法的重要性之所在。打个比方,如果你需要清理你的房子,你可以使用真空吸尘器,扫帚或拖把,但是你不会拿出一把铲子然后开始挖掘。

因此,我们想要介绍另一种分类算法的方法,即通过机器学习所负责的任务来分类。

机器学习的任务

成为一名合格的开发工程师不是一件简单的事情,需要掌握从开发到调试到优化等一系列能力,这些能力中的每一项掌握起来都需要足够的努力和经验。而要成为一名合格的机器学习算法工程师(以下简称算法工程师)更是难上加难,因为在掌握工程师的通用技能以外,还需要掌握一张不算小的机器学习算法知识网络。下面我们就将成为一名合格的算法工程师所需的技能进行拆分,一起来看一下究竟需要掌握哪些技能才能算是一名合格的算法工程师。

图1 机器学习算法工程师技能树

图1 机器学习算法工程师技能树

机器学习算法选用指南

在从事数据科学工作的时候,经常会遇到为具体问题选择最合适算法的问题。虽然有很多有关机器学习算法的文章详细介绍了相关的算法,但要做出最合适的选择依然非常困难。

在这篇文章中,我将对一些基本概念给出简要的介绍,对不同任务中使用不同类型的机器学习算法给出一点建议。在文章的最后,我将对这些算法进行总结。

首先,你应该能区分以下四种机器学习任务:

  • 监督学习
  • 无监督学习
  • 半监督学习
  • 强化学习
  • 监督学习
    监督学习是从标记的训练数据中推断出某个功能。通过拟合标注的训练集,找到最优的模型参数来预测其他对象(测试集)上的未知标签。如果标签是一个实数,我们称之为回归。如果标签来自有限数量的值,这些值是无序的,那么称之为分类。

    无监督学习

    【干货】TensorFlow的55个经典案例

    本文是TensorFlow实现流行机器学习算法的教程汇集,目标是让读者可以轻松通过清晰简明的案例深入了解 TensorFlow。这些案例适合那些想要实现一些 TensorFlow 案例的初学者。本教程包含还包含笔记和带有注解的代码。

    第一步:给TF新手的教程指南

    1:tf初学者需要明白的入门准备

    机器学习入门笔记:
    https://github.com/aymericdamien/TensorFlow-Examples/blob/master/noteboo...
    MNIST 数据集入门笔记
    https://github.com/aymericdamien/TensorFlow-Examples/blob/master/noteboo...

    2:tf初学者需要了解的入门基础

    Hello World
    https://github.com/aymericdamien/TensorFlow-Examples/blob/master/noteboo...

    机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法。恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了。

    这节学习的是逻辑回归(Logistic Regression),也算进入了比较正统的机器学习算法。啥叫正统呢?我概念里面机器学习算法一般是这样一个步骤:

    1)对于一个问题,我们用数学语言来描述它,然后建立一个模型,例如回归模型或者分类模型等来描述这个问题;

    2)通过最大似然、最大后验概率或者最小化分类误差等等建立模型的代价函数,也就是一个最优化问题。找到最优化问题的解,也就是能拟合我们的数据的最好的模型参数;

    3)然后我们需要求解这个代价函数,找到最优解。这求解也就分很多种情况了:

    a)如果这个优化函数存在解析解。例如我们求最值一般是对代价函数求导,找到导数为0的点,也就是最大值或者最小值的地方了。如果代价函数能简单求导,并且求导后为0的式子存在解析解,那么我们就可以直接得到最优的参数了。

    机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法。恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了。

    在上一个博文中,我们聊到了k-means算法。但k-means算法有个比较大的缺点就是对初始k个质心点的选取比较敏感。有人提出了一个二分k均值(bisecting k-means)算法,它的出现就是为了一定情况下解决这个问题的。也就是说它对初始的k个质心的选择不太敏感。那下面我们就来了解和实现下这个算法。

    一、二分k均值(bisecting k-means)算法

    二分k均值(bisecting k-means)算法的主要思想是:首先将所有点作为一个簇,然后将该簇一分为二。之后选择能最大程度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。以此进行下去,直到簇的数目等于用户给定的数目k为止。

    机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法。恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了。

    机器学习中有两类的大问题,一个是分类,一个是聚类。分类是根据一些给定的已知类别标号的样本,训练某种学习机器,使它能够对未知类别的样本进行分类。这属于supervised learning(监督学习)。而聚类指事先并不知道任何样本的类别标号,希望通过某种算法来把一组未知类别的样本划分成若干类别,这在机器学习中被称作 unsupervised learning (无监督学习)。在本文中,我们关注其中一个比较简单的聚类算法:k-means算法。

    一、k-means算法

    通常,人们根据样本间的某种距离或者相似性来定义聚类,即把相似的(或距离近的)样本聚为同一类,而把不相似的(或距离远的)样本归在其他类。

       机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法。恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了。

    在这一节我们主要是对支持向量机进行系统的回顾,以及通过Python来实现。由于内容很多,所以这里分成三篇博文。第一篇讲SVM初级,第二篇讲进阶,主要是把SVM整条知识链理直,第三篇介绍Python的实现。SVM有很多介绍的非常好的博文,具体可以参考本文列出的参考文献和推荐阅读资料。在本文中,定位在于把集大成于一身的SVM的整体知识链理直,所以不会涉及细节的推导。网上的解说的很好的推导和书籍很多,大家可以进一步参考。

    八、SVM的实现之SMO算法

    终于到SVM的实现部分了。那么神奇和有效的东西还得回归到实现才可以展示其强大的功力。SVM有效而且存在很高效的训练算法,这也是工业界非常青睐SVM的原因。

    前面讲到,SVM的学习问题可以转化为下面的对偶问题:

    机器学习算法实践-决策树(Decision Tree)

    前言

    最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象。本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决策树种涉及到的算法进行总结并附上自己相关的实现代码。所有算法代码以及用于相应模型的训练的数据都会放到GitHub上(https://github.com/PytLab/MLBox).

    本文中我将一步步通过MLiA的隐形眼镜处方数集构建决策树并使用Graphviz将决策树可视化。

    正文

    决策树学习

    决策树学习是根据数据的属性采用树状结构建立的一种决策模型,可以用此模型解决分类和回归问题。常见的算法包括 CART(Classification And Regression Tree), ID3, C4.5等。我们往往根据数据集来构建一棵决策树,他的一个重要任务就是为了数据中所蕴含的知识信息,并提取出一系列的规则,这些规则也就是树结构的创建过程就是机器学习的过程。

    决策树的结构

    同步内容