分享一篇来自机器之心的文章。关于机器学习的起步,讲的仍是很清楚的。原文连接在:只需十四步:从零开始掌握Python机器学习(附资源)html
Python 能够说是如今最流行的机器学习语言,并且你也能在网上找到大量的资源。你如今也在考虑从 Python 入门机器学习吗?本教程或许能帮你成功上手,从 0 到 1 掌握 Python 机器学习,至于后面再从 1 到 100 变成机器学习专家,就要看你本身的努力了。本教程原文分为两个部分,机器之心在本文中将其进行了整合,原文可参阅:suo.im/KUWgl 和 suo.im/96wD3。本教程的做者为 KDnuggets 副主编兼数据科学家 Matthew Mayo。
「开始」每每是最难的,尤为是当选择太多的时候,一我的每每很难下定决定作出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,并且这个过程当中仅须要使用免费的材料和资源便可。这个大纲的主要目标是带你了解那些数量繁多的可用资源。毫无疑问,资源确实有不少,但哪些才是最好的呢?哪些是互补的呢?以怎样的顺序学习这些资源才是最合适的呢?python
首先,我假设你并非如下方面的专家:git
固然,若是你对前两个主题有必定程度的基本了解就更好了,但那并非必要的,在早期阶段多花一点点时间了解一下就好了。程序员
若是咱们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是相当重要的。幸运的是,由于 Python 是一种获得了普遍使用的通用编程语言,加上其在科学计算和机器学习领域的应用,因此找到一个初学者教程并不十分困难。你在 Python 和编程上的经验水平对于起步而言是相当重要的。github
首先,你须要安装 Python。由于咱们后面会用到科学计算和机器学习软件包,因此我建议你安装 Anaconda。这是一个可用于 Linux、OS X 和 Windows 上的工业级的 Python 实现,完整包含了机器学习所需的软件包,包括 numpy、scikit-learn 和 matplotlib。其也包含了 iPython Notebook,这是一个用在咱们许多教程中的交互式环境。我推荐安装 Python 2.7。算法
若是你不懂编程,我建议你从下面的免费在线书籍开始学习,而后再进入后续的材料:数据库
若是你有编程经验,但不懂 Python 或还很初级,我建议你学习下面两个课程:编程
若是你要 30 分钟上手 Python 的快速课程,看下面:数组
固然,若是你已是一位经验丰富的 Python 程序员了,这一步就能够跳过了。即使如此,我也建议你常使用 Python 文档:https://www.python.org/doc/安全
KDnuggets 的 Zachary Lipton 已经指出:如今,人们评价一个「数据科学家」已经有不少不一样标准了。这其实是机器学习领域领域的一个写照,由于数据科学家大部分时间干的事情都牵涉到不一样程度地使用机器学习算法。为了有效地创造和得到来自支持向量机的洞见,很是熟悉核方法(kernel methods)是否必要呢?固然不是。就像几乎生活中的全部事情同样,掌握理论的深度是与实践应用相关的。对机器学习算法的深度了解超过了本文探讨的范围,它一般须要你将很是大量的时间投入到更加学术的课程中去,或者至少是你本身要进行高强度的自学训练。
好消息是,对实践来讲,你并不须要得到机器学习博士般的理论理解——就想要成为一个高效的程序员并没必要要进行计算机科学理论的学习。
人们对吴恩达在 Coursera 上的机器学习课程内容每每好评如潮;然而,个人建议是浏览前一个学生在线记录的课堂笔记。跳过特定于 Octave(一个相似于 Matlab 的与你 Python 学习无关的语言)的笔记。必定要明白这些都不是官方笔记,可是能够从它们中把握到吴恩达课程材料中相关的内容。固然若是你有时间和兴趣,你如今就能够去 Coursera 上学习吴恩达的机器学习课程:http://suo.im/2o1uD
除了上面提到的吴恩达课程,若是你还须要须要其它的,网上还有不少各种课程供你选择。好比我就很喜欢 Tom Mitchell,这里是他最近演讲的视频(一块儿的还有 Maria-Florina Balcan),很是平易近人。
目前你不须要全部的笔记和视频。一个有效地方法是当你以为合适时,直接去看下面特定的练习题,参考上述备注和视频恰当的部分,
好了,咱们已经掌握了 Python 编程并对机器学习有了必定的了解。而在 Python 以外,还有一些经常使用于执行实际机器学习的开源软件库。广义上讲,有不少所谓的科学 Python 库(scientific Python libraries)可用于执行基本的机器学习任务(这方面的判断确定有些主观性):
学习这些库的一个好方法是学习下面的材料:
在本教程的后面你还会看到一些其它的软件包,好比基于 matplotlib 的数据可视化库 Seaborn。前面提到的软件包只是 Python 机器学习中经常使用的一些核心库的一部分,可是理解它们应该能让你在后面遇到其它软件包时不至于感到困惑。
下面就开始动手吧!
首先检查一下准备状况
如今是时候使用 Python 机器学习标准库 scikit-learn 来实现机器学习算法了。
scikit-learn 流程图
下面许多的教程和训练都是使用 iPython (Jupyter) Notebook 完成的,iPython Notebook 是执行 Python 语句的交互式环境。iPython Notebook 能够很方便地在网上找到或下载到你的本地计算机。
一样也请注意,如下的教程是由一系列在线资源所组成。若是你感受课程有什么不合适的,能够和做者交流。咱们第一个教程就是从 scikit-learn 开始的,我建议大家在继续完成教程前能够按顺序看一看如下的文章。
下面是一篇是对 scikit-learn 简介的文章,scikit-learn 是 Python 最经常使用的通用机器学习库,其覆盖了 K 近邻算法:
下面的会更加深刻、扩展的一篇简介,包括了从著名的数据库开始完成一个项目:
下一篇关注于在 scikit-learn 上评估不一样模型的策略,包括训练集/测试集的分割方法:
在有了 scikit-learn 的基本知识后,咱们能够进一步探索那些更加通用和实用的算法。咱们从很是出名的 K 均值聚类(k-means clustering)算法开始,它是一种很是简单和高效的方法,能很好地解决非监督学习问题:
接下来咱们能够回到分类问题,并学习曾经最流行的分类算法:
在了解分类问题后,咱们能够继续看看连续型数值预测:
咱们也能够利用回归的思想应用到分类问题中,即 logistic 回归:
咱们已经熟悉了 scikit-learn,如今咱们能够了解一下更高级的算法了。首先就是支持向量机,它是一种依赖于将数据转换映射到高维空间的非线性分类器。
随后,咱们能够经过 Kaggle Titanic 竞赛检查学习做为集成分类器的随机森林:
降维算法常常用于减小在问题中所使用的变量。主成份分析法就是非监督降维算法的一个特殊形式:
在进入第七步以前,咱们能够花一点时间考虑在相对较短的时间内取得的一些进展。
首先使用 Python 及其机器学习库,咱们不只已经了解了一些最多见和知名的机器学习算法(k 近邻、k 均值聚类、支持向量机等),还研究了强大的集成技术(随机森林)和一些额外的机器学习任务(降维算法和模型验证技术)。除了一些基本的机器学习技巧,咱们已经开始寻找一些有用的工具包。
咱们会进一步学习新的必要工具。
神经网络包含不少层
深度学习无处不在。深度学习创建在几十年前的神经网络的基础上,可是最近的进步始于几年前,并极大地提升了深度神经网络的认知能力,引发了人们的普遍兴趣。若是你对神经网络还不熟悉,KDnuggets 有不少文章详细介绍了最近深度学习大量的创新、成就和赞许。
最后一步并不打算把全部类型的深度学习评论一遍,而是在 2 个先进的当代 Python 深度学习库中探究几个简单的网络实现。对于有兴趣深挖深度学习的读者,我建议从下面这些免费的在线书籍开始:
1.Theano
连接:http://deeplearning.net/software/theano/
Theano 是咱们讲到的第一个 Python 深度学习库。看看 Theano 做者怎么说:
Theano 是一个 Python 库,它可使你有效地定义、优化和评估包含多维数组的数学表达式。
下面关于运用 Theano 学习深度学习的入门教程有点长,可是足够好,描述生动,评价很高:
2.Caffe
连接:http://caffe.berkeleyvision.org/
另外一个咱们将测试驱动的库是 Caffe。再一次,让咱们从做者开始:
Caffe 是一个深度学习框架,由表达、速度和模块性建构,Bwekeley 视觉与学习中心和社区工做者共同开发了 Caf fe。
这个教程是本篇文章中最好的一个。咱们已经学习了上面几个有趣的样例,但没有一个可与下面这个样例相竞争,其可经过 Caffe 实现谷歌的 DeepDream。这个至关精彩!掌握教程以后,能够尝试使你的处理器自如运行,就看成是娱乐。
我并无保证说这会很快或容易,可是若是你投入了时间并完成了上面的 7 个步骤,你将在理解大量机器学习算法以及经过流行的库(包括一些在目前深度学习研究领域最前沿的库)在 Python 中实现算法方面变得很擅长。
机器学习算法
本篇是使用 Python 掌握机器学习的 7 个步骤系列文章的下篇,若是你已经学习了该系列的上篇,那么应该达到了使人满意的学习速度和熟练技能;若是没有的话,你也许应该回顾一下上篇,具体花费多少时间,取决于你当前的理解水平。我保证这样作是值得的。快速回顾以后,本篇文章会更明确地集中于几个机器学习相关的任务集上。因为安全地跳过了一些基础模块——Python 基础、机器学习基础等等——咱们能够直接进入到不一样的机器学习算法之中。此次咱们能够根据功能更好地分类教程。
上篇中包括如下几步:
1. Python 基础技能
2. 机器学习基础技能
3. Python 包概述
4. 运用 Python 开始机器学习:介绍&模型评估
5. 关于 Python 的机器学习主题:k-均值聚类、决策树、线性回归&逻辑回归
6. 关于 Python 的高阶机器学习主题:支持向量机、随机森林、PCA 降维
7. Python 中的深度学习
如上所述,若是你正准备从头开始,我建议你按顺序读完上篇。我也会列出全部适合新手的入门材料,安装说明包含在上篇文章中。
然而,若是你已经读过,我会从下面最基础的开始:
若是你正在寻找学习机器学习基础的替代或补充性方法,刚好我能够把正在看的 Shai Ben-David 的视频讲座和 Shai Shalev-Shwartz 的教科书推荐给你:
记住,这些介绍性资料并不须要所有看完才能开始我写的系列文章。视频讲座、教科书及其余资源可在如下状况查阅:当使用机器学习算法实现模型时或者当合适的概念被实际应用在后续步骤之中时。具体状况本身判断。
咱们重新材料开始,首先巩固一下咱们的分类技术并引入一些额外的算法。虽然本篇文章的第一部分涵盖决策树、支持向量机、逻辑回归以及合成分类随机森林,咱们仍是会添加 k-最近邻、朴素贝叶斯分类器和多层感知器。
Scikit-learn 分类器
k-最近邻(kNN)是一个简单分类器和懒惰学习者的示例,其中全部计算都发生在分类时间上(而不是提早在训练步骤期间发生)。kNN 是非参数的,经过比较数据实例和 k 最近实例来决定如何分类。
朴素贝叶斯是基于贝叶斯定理的分类器。它假定特征之间存在独立性,而且一个类中任何特定特征的存在与任何其它特征在同一类中的存在无关。
多层感知器(MLP)是一个简单的前馈神经网络,由多层节点组成,其中每一个层与随后的层彻底链接。多层感知器在 Scikit-learn 版本 0.18 中做了介绍。
首先从 Scikit-learn 文档中阅读 MLP 分类器的概述,而后使用教程练习实现。
咱们如今接着讲聚类,一种无监督学习形式。上篇中,咱们讨论了 k-means 算法; 咱们在此介绍 DBSCAN 和指望最大化(EM)。
Scikit-learn聚类算法
首先,阅读这些介绍性文章; 第一个是 k 均值和 EM 聚类技术的快速比较,是对新聚类形式的一个很好的继续,第二个是对 Scikit-learn 中可用的聚类技术的概述:
指望最大化(EM)是几率聚类算法,并所以涉及肯定实例属于特定聚类的几率。EM 接近统计模型中参数的最大似然性或最大后验估计(Han、Kamber 和 Pei)。EM 过程从一组参数开始迭代直到相对于 k 聚类的聚类最大化。
首先阅读关于 EM 算法的教程。接下来,看看相关的 Scikit-learn 文档。最后,按照教程使用 Python 本身实现 EM 聚类。
若是高斯混合模型初看起来使人困惑,那么来自 Scikit-learn 文档的这一相关部分应该能够减轻任何多余的担忧:
高斯混合对象实现指望最大化(EM)算法以拟合高斯模型混合。
基于密度且具备噪声的空间聚类应用(DBSCAN)经过将密集数据点分组在一块儿,并将低密度数据点指定为异常值来进行操做。
首先从 Scikit-learn 的文档中阅读并遵循 DBSCAN 的示例实现,而后按照简明的教程学习:
上篇只涉及一个单一的集成方法:随机森林(RF)。RF 做为一个顶级的分类器,在过去几年中取得了巨大的成功,但它确定不是惟一的集成分类器。咱们将看看包装、提高和投票。
给我一个提高
首先,阅读这些集成学习器的概述,第一个是通用性的;第二个是它们与 Scikit-learn 有关:
而后,在继续使用新的集成方法以前,请经过一个新的教程快速学习随机森林:
包装、提高和投票都是不一样形式的集成分类器,所有涉及建构多个模型; 然而,这些模型由什么算法构建,模型使用的数据,以及结果如何最终组合起来,这些都会随着方案而变化。
那么,为何要组合模型?为了从一个特定角度处理这个问题,这里是误差-方差权衡的概述,具体涉及到提高,如下是 Scikit-learn 文档:
如今你已经阅读了关于集成学习器的一些介绍性材料,而且对几个特定的集成分类器有了基本了解,下面介绍如何从 Machine Learning Mastery 中使用 Scikit-learn 在 Python 中实现集成分类器:
下一步咱们继续学习集成分类器,探讨一个当代最流行的机器学习算法。梯度提高最近在机器学习中产生了显著的影响,成为了 Kaggle 竞赛中最受欢迎和成功的算法之一。
给我一个梯度提高
首先,阅读梯度提高的概述:
接下来,了解为何梯度提高是 Kaggle 竞赛中「最制胜」的方法:
虽然 Scikit-learn 有本身的梯度提高实现,咱们将稍做改变,使用 XGBoost 库,咱们提到过这是一个更快的实现。
如下连接提供了 XGBoost 库的一些额外信息,以及梯度提高(出于必要):
如今,按照这个教程把全部汇聚起来:
你还能够按照这些更简洁的示例进行强化:
降维是经过使用过程来得到一组主变量,将用于模型构建的变量从其初始数减小到一个减小数。
有两种主要形式的降维:
下面是一对经常使用的特征提取方法。
主成分分析(PCA)是一种统计步骤,它使用正交变换将可能相关变量的一组观测值转换为一组称为主成分的线性不相关变量值。主成分的数量小于或等于原始变量的数量。这种变换以这样的方式定义,即第一主成分具备最大可能的方差(即考虑数据中尽量多的变率)
以上定义来自 PCA 维基百科条目,若是感兴趣可进一步阅读。可是,下面的概述/教程很是完全:
线性判别分析(LDA)是 Fisher 线性判别的泛化,是统计学、模式识别和机器学习中使用的一种方法,用于发现线性组合特征或分离两个或多个类别的对象或事件的特征。所获得的组合能够用做线性分类器,或者更常见地,用做后续分类以前的降维。
LDA 与方差分析(ANOVA)和回归分析密切相关,它一样尝试将一个因变量表示为其余特征或测量的线性组合。然而,ANOVA 使用分类独立变量和连续因变量,而判别分析具备连续的独立变量和分类依赖变量(即类标签)。
上面的定义也来自维基百科。下面是完整的阅读:
你对 PCA 和 LDA 对于降维的实际差别是否感到困惑?Sebastian Raschka 作了以下澄清:
线性判别分析(LDA)和主成分分析(PCA)都是一般用于降维的线性转换技术。PCA 能够被描述为「无监督」算法,由于它「忽略」类标签,而且其目标是找到使数据集中的方差最大化的方向(所谓的主成分)。与 PCA 相反,LDA 是「监督的」而且计算表示使多个类之间的间隔最大化的轴的方向(「线性判别式」)。
有关这方面的简要说明,请阅读如下内容:
上篇中提供了一个学习神经网络和深度学习的入口。若是你的学习到目前比较顺利并但愿巩固对神经网络的理解,并练习实现几个常见的神经网络模型,那么请继续往下看。
首先,看一些深度学习基础材料:
接下来,在 Google 的机器智能开源软件库 TensorFlow(一个有效的深度学习框架和现今几乎是最好的神经网络工具)尝试一些简明的概述/教程:
最后,直接从 TensorFlow 网站试用这些教程,它实现了一些最流行和常见的神经网络模型:
此外,目前一篇关于 7 个步骤掌握深度学习的文章正在写做之中,重点介绍使用位于 TensorFlow 顶部的高级 API,以增模型实现的容易性和灵活性。我也将在完成后在这儿添加一个连接。
相关的:
你想更深刻了解学习Python知识体系,你能够看一下咱们花费了一个多月整理了上百小时的几百个知识点体系内容: