机器学习导论

来源:互联网 发布:矩阵理论答案 编辑:程序博客网 时间:2024/05/22 14:19

        、    机器学习不是一门新颖的技术,在1970年开始就首次出现了相关的算法。因为计算机计算能力的爆炸式增长,可以让我们用机器学习去解决日益复杂的问题。当能捕获和存储大量的数据的时候,我们就能让机器学习在更多不同的领域内发挥作用。 

        机器学习应用在不同的领域,下面我们举几个例子:

1.安全算法用来提取保护攻击模式,例如,端口和网络。

2.图像分析来确认不同的形式和形状,比如说医疗分析或者脸部或者指纹的识别。

3.深度学习生成数据分析和大数据处理的规则,比如用在市场营销和销售促进。   

4.从视频流中进行目标识别和预测和多传感器的融合的自动驾驶技术。

5.模式识别分析代码的弱点,比如说临界和代码异味。

      大多数机器学习的总体思路是 ,计算机通过学习一组训练集来学习完成一项任务。计算机(或分布式或嵌入式计算机和控制器系统)用以前从未遇到过的数据执行同样的任务。

      、 学习策略

机器学习采用如下2种策略:

      有监督学习

     在有监督学习中,训练集包含带有该数据任务的数据和正确的输出。就好像给一个学生一系列问题和解决方法,告诉学生找出在将来如何处理或者解决其他的问题的方法。

       监督学习包括分类算法,它需要输入一个数据集和每个数据段的类,使计算机可以学习如何进行数据分类。例如,输入可能是一组过去的贷款应用程序,标明它们中的哪一个坏了。在这些信息的基础上,计算机应用新的贷款归类。分类可以采用逻辑回归,分类树,支持向量机,随机森林,人工神经网络(ANNs),或者其他的算法。人工神经网络是它们中的一个主要话题,我们以后在详细讨论。

       回归算法预测一个实体的属性值(“回归”比单纯的统计回归有更广泛的意义)。回归算法包括线性回归、决策树、贝叶斯网络、模糊分类,和人工神经网络。

      无监督学习

     在无监督学习中,训练集包含数据但没有解决方案;计算机必须找到自己的解决方案。这就像给一个学生一组模式,让他计算出来潜在的答案,产生模式。

        无监督学习包括聚类算法。输入覆盖不同维度的数据集,并将其划分为满足确定标准的集群。一个流行的算法是k-means聚类算法,其目的是划分数据集使每个观察点最接近其聚类的平均值.其他聚类方法包括层次聚类法、高斯混合模型,遗传算法(其中计算机学习最好的方式为通过一个任务进行人工选择),和人工神经网络。

        降维算法将初始数据集覆盖各个维度,并将数据投影到较少的维度。这些较少的维度试图更好地捕获数据的基本方面。降维算法包括主成分分析、张量约简、多维统计、随机投影,和人工神经网络。


     三、必要的工具

      机器学习的普及带来了丰富的工具。它们大多是开源的,用户可以轻松地进行实验。并学习如何使用它们。表1比较了流行的机器学习工具。


       数字和统计社区分为两个阵营:一个倾向于R,另一个喜欢Python。当然,任何绝对的划分都是毫无意义的。像机器学习这么宽泛的领域,没有单一的工具能够全部覆盖。软件工程师所能做的最好的事情就是熟悉许多不同的工具,并学习哪种工具最适合给定的情况。

       也就是说,R在统计背景比较强的人群中更受欢迎。它有极好的机器学习和统计推理库集合。如果你在某个地方找到了一个有趣的算法并想在你的数据上进行尝试,那么可以在R中实现它。R有ggplot2可视化类库,它可以产生很好的图。

        Python在计算机科学背景下更受欢迎。虽然没有针对机器学习和统计,Python提供了用于数值计算的扩展库(NumPy)、科学计算(SciPy),统计计算(statsmodels),和机器学习(scikit学习)。这些都是C代码的包装器,所以你可以用C的速度获得Python的便利。

        尽管比起R,python拥有更少的机器学习库,但是很多程序员更容易用python找到工作。可能是他们拥有其他语言的基础,相比R更好入门。他们还发现Python便于预处理数据:从各种来源读取它,清理它,并使之达到所需的格式。Python依靠matplotlib可视化,在matplotlib中你可以做几乎所有事情,但你必须付出一些努力去学习它。用顶层的seaborn库,可以让你用很少的代码产生优雅的可视化效果。

     一般来说,r和Python会在数据集在计算机主内存中返回时工作。如果不可能,则必须使用分布式平台。最著名的是Hadoop,但Hadoop不是最方便机器学习。即使是简单的算法运行也可能是一场斗争。

      因此,许多人喜欢在Spark提供的更高层次的抽象环境中工作。Spark利用Hadoop,但是看上去更像一个脚本环境,你可以让Scala,java,python,或R相互配合。Spark有一个机器学习库,它实现了关键算法,因此,在许多方面,你不需要自己实现任何东西。

      H2O是机器学习领域中相对较新的进入者。这是一个使用Hadoop和Spark来描述和预测分析的平台,你也可以用R和Python来使用它。它实现了监督和无监督学习算法和一个web界面,通过它可以组织你的工作流。

      Julia编程语言是一个很有前途的开发语言,它的目标在于拥有最高的性能。因为Julia是新出现,它没有像Python或R那么多的库,但是,谢谢。它以其令人印象深刻的速度,它的知名度可能会增长。

       强大的商业参与者包括MATLAB和SAS,两者都有着辉煌的历史。长期以来,MATLAB为数值计算提供了坚实的工具,它增加了机器学习算法和实现。对于熟悉MATLAB的工程师来说,这可能是一种自然的适合。SAS是用于高级统计分析的软件套件;它还增加了机器学习能力,并且很受商业智能任务的欢迎。

         四、人工神经网络和深度学习

       人工神经网络的基本组件已经存在了大约半个世纪。然而,你现在也可以用新的方法来构建他们。人工神经网络可用于机器学习的各个领域:分类、回归、聚类和降维。

       人工神经网络体系结构的创新和用廉价的计算资源来运行人工神经网络,带来了深度学习的萌芽-使用大型人工神经网络进行机器学习。在过去的几年中,深度学习已经取得了引人注目的成绩。在一些项目中击败了人类。去学习玩街机游戏,表现出不可思议的识别图像的能力,进行自动翻译,等等。深度学习特别擅长于一般任务,需要从输入数据中获取更高级、抽象的概念,这是人工神经网络的许多层次所擅长的。

       深度学习通常是通过矩阵实现,所以工作需要高效的矩阵运用与操作。通常实现是用C语言或C++设计实现的。但是在人工神经网络设计的层面是笨重的。Python程序员可以使用Theano库定义的人工神经网络,它是由C语言编译, 然后编译成机器语言。最近谷歌了发布了在人工神经网络中领域中开源的TensorFlow库。你能使用TensorFlow通过python API。一个C++ API是可用使用的;虽然不容易使用,但可能会给系统带来一些性能优点。

       在成为机器学习的大军中一员是,我们要记住所有机器学习方法都是建立在解释结果的基础上的。例如,分类树产生的规则,对数据进行分类。通过阅读这些规则,你可以很容易地理解一个分类树的数据归类。人工神经网络不会产生用户可以解释的任何内容。一个人工神经网络的图像归类不产生任何规则;网络本身体现了一切图像分类。

         许多机器学习书籍具有实用性,旨在在特定的平台上引入机器学习。随着技术的迅速发展,最好把重点放在掌握基本原理上。毕竟,使用机器学习平台并不困难。何时使用特定的算法以及如何使用它需要相当一点背景知识。这里有四本畅销书。

1. T. Hastie, R. Tibshirani, and J. Friedman, The Elements of Statistical Learning: Data Mining,Inference, and Prediction, 2nd ed., Springer, 2009.

2.C.M. Bishop, Pattern Recognition and Machine Learning, Springer, 2006.

3.K.P. Murphy, Machine Learning: A Probabilistic Perspective,MIT Press, 2012.

4.E. Alpaydın, Introduction toMachine Learning, 3rd ed., MIT Press, 2014