不能收视ai278了,怎么弄wwWai278com不会空白页

&figure&&img src=&https://pic4.zhimg.com/v2-0a37cdd86578_b.jpg& data-rawwidth=&1176& data-rawheight=&664& class=&origin_image zh-lightbox-thumb& width=&1176& data-original=&https://pic4.zhimg.com/v2-0a37cdd86578_r.jpg&&&/figure&&blockquote&&p&&em&Python 可以说是现在最流行的机器学习语言,而且你也能在网上找到大量的资源。你现在也在考虑从 Python 入门机器学习吗?本教程或许能帮你成功上手,从 0 到 1 掌握 Python 机器学习,至于后面再从 1 到 100 变成机器学习专家,就要看你自己的努力了。本教程原文分为两个部分,机器之心在本文中将其进行了整合,原文可参阅:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/KUWgl& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&7 Steps to Mastering Machine Learning With Python&/a& 和 &a href=&https://link.zhihu.com/?target=http%3A//suo.im/96wD3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&7 More Steps to Mastering Machine Learning With Python&/a&。本教程的作者为 KDnuggets 副主编兼数据科学家 Matthew Mayo。&/em&&br&&/p&&/blockquote&&p&「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。这个大纲的主要目标是带你了解那些数量繁多的可用资源。毫无疑问,资源确实有很多,但哪些才是最好的呢?哪些是互补的呢?以怎样的顺序学习这些资源才是最合适的呢?&br&&/p&&p&首先,我假设你并不是以下方面的专家:&br&&/p&&ul&&li&&p&机器学习&/p&&/li&&li&&p&Python&/p&&/li&&li&&p&任何 Python 的机器学习、科学计算或数据分析库&br&&/p&&/li&&/ul&&p&当然,如果你对前两个主题有一定程度的基本了解就更好了,但那并不是必要的,在早期阶段多花一点点时间了解一下就行了。&br&&/p&&p&&strong&基础篇&/strong&&br&&/p&&p&&strong&第一步:基本 Python 技能&/strong&&br&&/p&&p&如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。幸运的是,因为 Python 是一种得到了广泛使用的通用编程语言,加上其在科学计算和机器学习领域的应用,所以找到一个初学者教程并不十分困难。你在 Python 和编程上的经验水平对于起步而言是至关重要的。&br&&/p&&p&首先,你需要安装 Python。因为我们后面会用到科学计算和机器学习软件包,所以我建议你安装 Anaconda。这是一个可用于 Linux、OS X 和 Windows 上的工业级的 Python 实现,完整包含了机器学习所需的软件包,包括 numpy、scikit-learn 和 matplotlib。其也包含了 iPython Notebook,这是一个用在我们许多教程中的交互式环境。我推荐安装 Python 2.7。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-6d45f5f5913793cfef6bd72_b.jpg& data-rawwidth=&250& data-rawheight=&260& class=&content_image& width=&250&&&/figure&&p&如果你不懂编程,我建议你从下面的免费在线书籍开始学习,然后再进入后续的材料:&br&&/p&&ul&&li&&p&Learn Python the Hard Way,作者 Zed A. Shaw:&a href=&https://link.zhihu.com/?target=https%3A//learnpythonthehardway.org/book/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learn Python the Hard Way&/a&&br&&/p&&/li&&/ul&&p&如果你有编程经验,但不懂 Python 或还很初级,我建议你学习下面两个课程:&br&&/p&&ul&&li&&p&谷歌开发者 Python 课程(强烈推荐视觉学习者学习):&a href=&https://link.zhihu.com/?target=http%3A//suo.im/toMzq& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&suo.im/toMzq&/span&&span class=&invisible&&&/span&&/a&&/p&&/li&&li&&p&Python 科学计算入门(来自 UCSB Engineering 的 M. Scott Shell)(一个不错的入门,大约有 60 页):&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2cXycM& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&suo.im/2cXycM&/span&&span class=&invisible&&&/span&&/a&&br&&/p&&/li&&/ul&&p&如果你要 30 分钟上手 Python 的快速课程,看下面:&br&&/p&&ul&&li&&p&在 Y 分钟内学会 X(X=Python):&a href=&https://link.zhihu.com/?target=http%3A//suo.im/zm6qX& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learn python in Y Minutes&/a&&br&&/p&&/li&&/ul&&p&当然,如果你已经是一位经验丰富的 Python 程序员了,这一步就可以跳过了。即便如此,我也建议你常使用 Python 文档:&a href=&https://link.zhihu.com/?target=https%3A//www.python.org/doc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Welcome to Python.org&/a&&br&&/p&&p&&strong&第二步:机器学习基础技巧&/strong&&/p&&p&KDnuggets 的 Zachary Lipton 已经指出:现在,人们评价一个「数据科学家」已经有很多不同标准了。这实际上是机器学习领域领域的一个写照,因为数据科学家大部分时间干的事情都牵涉到不同程度地使用机器学习算法。为了有效地创造和获得来自支持向量机的洞见,非常熟悉核方法(kernel methods)是否必要呢?当然不是。就像几乎生活中的所有事情一样,掌握理论的深度是与实践应用相关的。对机器学习算法的深度了解超过了本文探讨的范围,它通常需要你将非常大量的时间投入到更加学术的课程中去,或者至少是你自己要进行高强度的自学训练。&br&&/p&&p&好消息是,对实践来说,你并不需要获得机器学习博士般的理论理解——就想要成为一个高效的程序员并不必要进行计算机科学理论的学习。&br&&/p&&p&人们对吴恩达在 Coursera 上的机器学习课程内容往往好评如潮;然而,我的建议是浏览前一个学生在线记录的课堂笔记。跳过特定于 Octave(一个类似于 Matlab 的与你 Python 学习无关的语言)的笔记。一定要明白这些都不是官方笔记,但是可以从它们中把握到吴恩达课程材料中相关的内容。当然如果你有时间和兴趣,你现在就可以去 Coursera 上学习吴恩达的机器学习课程:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2o1uD& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Machine Learning - Stanford University | Coursera&/a&&br&&/p&&ul&&li&&p&吴恩达课程的非官方笔记:&a href=&https://link.zhihu.com/?target=http%3A//www.holehouse.org/mlclass/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Machine Learning - complete course notes&/a&&br&&/p&&/li&&/ul&&p&除了上面提到的吴恩达课程,如果你还需要需要其它的,网上还有很多各类课程供你选择。比如我就很喜欢 Tom Mitchell,这里是他最近演讲的视频(一起的还有 Maria-Florina Balcan),非常平易近人。&br&&/p&&ul&&li&&p&Tom Mitchell 的机器学习课程:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/497arw& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Machine Learning&/a&&br&&/p&&/li&&/ul&&p&目前你不需要所有的笔记和视频。一个有效地方法是当你觉得合适时,直接去看下面特定的练习题,参考上述备注和视频恰当的部分,&br&&/p&&p&&strong&第三步:科学计算 Python 软件包概述&/strong&&br&&/p&&p&好了,我们已经掌握了 Python 编程并对机器学习有了一定的了解。而在 Python 之外,还有一些常用于执行实际机器学习的开源软件库。广义上讲,有很多所谓的科学 Python 库(scientific Python libraries)可用于执行基本的机器学习任务(这方面的判断肯定有些主观性):&br&&/p&&ul&&li&&p&numpy——主要对其 N 维数组对象有用 &a href=&https://link.zhihu.com/?target=http%3A//www.numpy.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NumPy - NumPy&/a&&/p&&/li&&li&&p&pandas——Python 数据分析库,包括数据框架(dataframes)等结构 &a href=&https://link.zhihu.com/?target=http%3A//pandas.pydata.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python Data Analysis Library&/a&&/p&&/li&&li&&p&matplotlib——一个 2D 绘图库,可产生出版物质量的图表 &a href=&https://link.zhihu.com/?target=http%3A//matplotlib.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python plotting - Matplotlib 2.0.0 documentation&/a&&/p&&/li&&li&&p&scikit-learn——用于数据分析和数据挖掘人物的机器学习算法 &a href=&https://link.zhihu.com/?target=http%3A//scikit-learn.org/stable/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&scikit-learn: machine learning in Python&/a&&br&&/p&&/li&&/ul&&p&学习这些库的一个好方法是学习下面的材料:&br&&/p&&ul&&li&&p&Scipy Lecture Notes,来自 Ga?l Varoquaux、Emmanuelle Gouillart 和 Olav Vahtras:&a href=&https://link.zhihu.com/?target=http%3A//www.scipy-lectures.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Scipy Lecture Notes&/a&&br&&/p&&/li&&br&&li&&p&这个 pandas 教程也很不错:10 Minutes to Pandas:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/4an6gY& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&10 Minutes to pandas&/a&&br&&/p&&/li&&/ul&&p&在本教程的后面你还会看到一些其它的软件包,比如基于 matplotlib 的数据可视化库 Seaborn。前面提到的软件包只是 Python 机器学习中常用的一些核心库的一部分,但是理解它们应该能让你在后面遇到其它软件包时不至于感到困惑。&br&&/p&&p&下面就开始动手吧!&br&&/p&&p&&strong&第四步:使用 Python 学习机器学习&/strong&&br&&/p&&p&首先检查一下准备情况&br&&/p&&ul&&li&&p&Python:就绪&/p&&/li&&li&&p&机器学习基本材料:就绪&/p&&/li&&li&&p&Numpy:就绪&/p&&/li&&li&&p&Pandas:就绪&/p&&/li&&li&&p&Matplotlib:就绪&br&&/p&&/li&&/ul&&p&现在是时候使用 Python 机器学习标准库 scikit-learn 来实现机器学习算法了。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2a704ea94b_b.jpg& data-rawwidth=&600& data-rawheight=&240& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/v2-2a704ea94b_r.jpg&&&/figure&&p&&em&scikit-learn 流程图&/em&&br&&/p&&p&下面许多的教程和训练都是使用 iPython (Jupyter) Notebook 完成的,iPython Notebook 是执行 Python 语句的交互式环境。iPython Notebook 可以很方便地在网上找到或下载到你的本地计算机。&br&&/p&&ul&&li&&p&来自斯坦福的 iPython Notebook 概览:&a href=&https://link.zhihu.com/?target=http%3A//cs231n.github.io/ipython-tutorial/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IPython Tutorial&/a&&br&&/p&&/li&&/ul&&p&同样也请注意,以下的教程是由一系列在线资源所组成。如果你感觉课程有什么不合适的,可以和作者交流。我们第一个教程就是从 scikit-learn 开始的,我建议你们在继续完成教程前可以按顺序看一看以下的文章。&br&&/p&&p&下面是一篇是对 scikit-learn 简介的文章,scikit-learn 是 Python 最常用的通用机器学习库,其覆盖了 K 近邻算法:&br&&/p&&ul&&li&&p&Jake VanderPlas 写的 scikit-learn 简介:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/3bMdEd& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jupyter Notebook Viewer&/a&&br&&/p&&/li&&/ul&&p&下面的会更加深入、扩展的一篇简介,包括了从著名的数据库开始完成一个项目:&br&&/p&&ul&&li&&p&Randal Olson 的机器学习案例笔记:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/RcPR6& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jupyter Notebook Viewer&/a&&br&&/p&&/li&&/ul&&p&下一篇关注于在 scikit-learn 上评估不同模型的策略,包括训练集/测试集的分割方法:&br&&/p&&ul&&li&&p&Kevin Markham 的模型评估:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2HIXDD& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&justmarkham/scikit-learn-videos&/a&&br&&/p&&/li&&/ul&&p&&strong&第五步:Python 上实现机器学习的基本算法&/strong&&br&&/p&&p&在有了 scikit-learn 的基本知识后,我们可以进一步探索那些更加通用和实用的算法。我们从非常出名的 K 均值聚类(k-means clustering)算法开始,它是一种非常简单和高效的方法,能很好地解决非监督学习问题:&br&&/p&&ul&&li&&p&K-均值聚类:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/40R8zf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&jakevdp/sklearn_pycon2015&/a&&br&&/p&&/li&&/ul&&p&接下来我们可以回到分类问题,并学习曾经最流行的分类算法:&br&&/p&&ul&&li&&p&决策树:&a href=&https://link.zhihu.com/?target=http%3A//thegrimmscientist.com/tutorial-decision-trees/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tutorial:
Decision Trees&/a&&br&&/p&&/li&&/ul&&p&在了解分类问题后,我们可以继续看看连续型数值预测:&br&&/p&&ul&&li&&p&线性回归:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/3EV4Qn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jupyter Notebook Viewer&/a&&br&&/p&&/li&&/ul&&p&我们也可以利用回归的思想应用到分类问题中,即 logistic 回归:&br&&/p&&ul&&li&&p&logistic 回归:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/S2beL& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&justmarkham/gadsdc&/a&&br&&/p&&/li&&/ul&&p&&strong&第六步:Python 上实现进阶机器学习算法&/strong&&br&&/p&&p&我们已经熟悉了 scikit-learn,现在我们可以了解一下更高级的算法了。首先就是支持向量机,它是一种依赖于将数据转换映射到高维空间的非线性分类器。&br&&/p&&ul&&li&&p&支持向量机:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2iZLLa& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&jakevdp/sklearn_pycon2015&/a&&br&&/p&&/li&&/ul&&p&随后,我们可以通过 Kaggle Titanic 竞赛检查学习作为集成分类器的随机森林:&br&&/p&&ul&&li&&p&Kaggle Titanic 竞赛(使用随机森林):&a href=&https://link.zhihu.com/?target=http%3A//suo.im/1o7ofe& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jupyter Notebook Viewer&/a&&br&&/p&&/li&&/ul&&p&降维算法经常用于减少在问题中所使用的变量。主成份分析法就是非监督降维算法的一个特殊形式:&br&&/p&&ul&&li&&p&降维算法:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2k5y2E& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&jakevdp/sklearn_pycon2015&/a&&br&&/p&&/li&&/ul&&p&在进入第七步之前,我们可以花一点时间考虑在相对较短的时间内取得的一些进展。&br&&/p&&p&首先使用 Python 及其机器学习库,我们不仅已经了解了一些最常见和知名的机器学习算法(k 近邻、k 均值聚类、支持向量机等),还研究了强大的集成技术(随机森林)和一些额外的机器学习任务(降维算法和模型验证技术)。除了一些基本的机器学习技巧,我们已经开始寻找一些有用的工具包。&br&&/p&&p&我们会进一步学习新的必要工具。&br&&/p&&p&&strong&第七步:Python 深度学习&/strong&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-a0f4bea20ffc7f_b.jpg& data-rawwidth=&490& data-rawheight=&294& class=&origin_image zh-lightbox-thumb& width=&490& data-original=&https://pic1.zhimg.com/v2-a0f4bea20ffc7f_r.jpg&&&/figure&&p&&em&神经网络包含很多层&/em&&br&&/p&&p&深度学习无处不在。深度学习建立在几十年前的神经网络的基础上,但是最近的进步始于几年前,并极大地提高了深度神经网络的认知能力,引起了人们的广泛兴趣。如果你对神经网络还不熟悉,KDnuggets 有很多文章详细介绍了最近深度学习大量的创新、成就和赞许。&br&&/p&&p&最后一步并不打算把所有类型的深度学习评论一遍,而是在 2 个先进的当代 Python 深度学习库中探究几个简单的网络实现。对于有兴趣深挖深度学习的读者,我建议从下面这些免费的在线书籍开始:&br&&/p&&ul&&li&&p&神经网络与深度学习,作者 Michael Nielsen:&a href=&https://link.zhihu.com/?target=http%3A//neuralnetworksanddeeplearning.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Neural networks and deep learning&/a&&br&&/p&&/li&&/ul&&p&1.Theano&br&&/p&&p&链接:&a href=&https://link.zhihu.com/?target=http%3A//deeplearning.net/software/theano/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Welcome - Theano 0.8.2 documentation&/a&&br&&/p&&p&Theano 是我们讲到的第一个 Python 深度学习库。看看 Theano 作者怎么说:&br&&/p&&blockquote&&p&&em&Theano 是一个 Python 库,它可以使你有效地定义、优化和评估包含多维数组的数学表达式。&/em&&br&&/p&&/blockquote&&p&下面关于运用 Theano 学习深度学习的入门教程有点长,但是足够好,描述生动,评价很高:&br&&/p&&ul&&li&&p&Theano 深度学习教程,作者 Colin Raffel:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/1mPGHe& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jupyter Notebook Viewer&/a&&br&&/p&&/li&&/ul&&p&2.Caffe &br&&/p&&p&链接:&a href=&https://link.zhihu.com/?target=http%3A//caffe.berkeleyvision.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Caffe | Deep Learning Framework&/a&&br&&/p&&p&另一个我们将测试驱动的库是 Caffe。再一次,让我们从作者开始:&br&&/p&&blockquote&&p&&em&Caffe 是一个深度学习框架,由表达、速度和模块性建构,Bwekeley 视觉与学习中心和社区工作者共同开发了 Caf fe。&/em&&br&&/p&&/blockquote&&p&这个教程是本篇文章中最好的一个。我们已经学习了上面几个有趣的样例,但没有一个可与下面这个样例相竞争,其可通过 Caffe 实现谷歌的 DeepDream。这个相当精彩!掌握教程之后,可以尝试使你的处理器自如运行,就当作是娱乐。&br&&/p&&ul&&li&&p&通过 Caffe 实现谷歌 DeepDream:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2cUSXS& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&google/deepdream&/a&&br&&/p&&/li&&/ul&&p&我并没有保证说这会很快或容易,但是如果你投入了时间并完成了上面的 7 个步骤,你将在理解大量机器学习算法以及通过流行的库(包括一些在目前深度学习研究领域最前沿的库)在 Python 中实现算法方面变得很擅长。&br&&/p&&p&&strong&进阶篇&/strong&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-7a4f6d3a3fb151df265247_b.jpg& data-rawwidth=&700& data-rawheight=&376& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic4.zhimg.com/v2-7a4f6d3a3fb151df265247_r.jpg&&&/figure&&p&&em&机器学习算法&/em&&br&&/p&&p&本篇是使用 Python 掌握机器学习的 7 个步骤系列文章的下篇,如果你已经学习了该系列的上篇,那么应该达到了令人满意的学习速度和熟练技能;如果没有的话,你也许应该回顾一下上篇,具体花费多少时间,取决于你当前的理解水平。我保证这样做是值得的。快速回顾之后,本篇文章会更明确地集中于几个机器学习相关的任务集上。由于安全地跳过了一些基础模块——Python 基础、机器学习基础等等——我们可以直接进入到不同的机器学习算法之中。这次我们可以根据功能更好地分类教程。&br&&/p&&p&&strong&第1步:机器学习基础回顾&一个新视角&/strong&&br&&/p&&p&上篇中包括以下几步:&br&&/p&&p&1. Python 基础技能&/p&&p&2. 机器学习基础技能&/p&&p&3. Python 包概述&/p&&p&4. 运用 Python 开始机器学习:介绍&模型评估&/p&&p&5. 关于 Python 的机器学习主题:k-均值聚类、决策树、线性回归&逻辑回归&/p&&p&6. 关于 Python 的高阶机器学习主题:支持向量机、随机森林、PCA 降维&/p&&p&7. Python 中的深度学习&br&&/p&&p&如上所述,如果你正准备从头开始,我建议你按顺序读完上篇。我也会列出所有适合新手的入门材料,安装说明包含在上篇文章中。&br&&/p&&p&然而,如果你已经读过,我会从下面最基础的开始:&br&&/p&&ul&&li&&p&机器学习关键术语解释,作者 Matthew Mayo。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2URQGm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Machine Learning Key Terms, Explained&/a&&/p&&/li&&li&&p&维基百科条目:统计学分类。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/mquen& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Statistical classification&/a&&/p&&/li&&li&&p&机器学习:一个完整而详细的概述,作者 Alex Castrounis。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/1yjSSq& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Machine Learning: A Complete and Detailed Overview&/a&&br&&/p&&/li&&/ul&&p&如果你正在寻找学习机器学习基础的替代或补充性方法,恰好我可以把正在看的 Shai Ben-David 的视频讲座和 Shai Shalev-Shwartz 的教科书推荐给你:&br&&/p&&ul&&li&&p&Shai Ben-David 的机器学习介绍视频讲座,滑铁卢大学。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/1TFlK6& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&suo.im/1TFlK6&/span&&span class=&invisible&&&/span&&/a&&/p&&/li&&li&&p&理解机器学习:从理论到算法,作者 Shai Ben-David & Shai Shalev-Shwartz。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/1NL0ix& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&suo.im/1NL0ix&/span&&span class=&invisible&&&/span&&/a&&br&&/p&&/li&&/ul&&p&记住,这些介绍性资料并不需要全部看完才能开始我写的系列文章。视频讲座、教科书及其他资源可在以下情况查阅:当使用机器学习算法实现模型时或者当合适的概念被实际应用在后续步骤之中时。具体情况自己判断。&br&&/p&&p&&strong&第2步:更多的分类&/strong&&br&&/p&&p&我们从新材料开始,首先巩固一下我们的分类技术并引入一些额外的算法。虽然本篇文章的第一部分涵盖决策树、支持向量机、逻辑回归以及合成分类随机森林,我们还是会添加 k-最近邻、朴素贝叶斯分类器和多层感知器。&figure&&img src=&https://pic1.zhimg.com/v2-a70e3a8af7f41c02d6f3a1_b.jpg& data-rawwidth=&800& data-rawheight=&266& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/v2-a70e3a8af7f41c02d6f3a1_r.jpg&&&/figure&&/p&&p&&em&Scikit-learn 分类器&/em&&br&&/p&&p& k-最近邻(kNN)是一个简单分类器和懒惰学习者的示例,其中所有计算都发生在分类时间上(而不是提前在训练步骤期间发生)。kNN 是非参数的,通过比较数据实例和 k 最近实例来决定如何分类。&br&&/p&&ul&&li&&p&使用 Python 进行 k-最近邻分类。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2zqW0t& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&K-Nearest Neighbor classification using python&/a&&br&&/p&&/li&&/ul&&p&朴素贝叶斯是基于贝叶斯定理的分类器。它假定特征之间存在独立性,并且一个类中任何特定特征的存在与任何其它特征在同一类中的存在无关。&br&&/p&&ul&&li&&p&使用 Scikit-learn 进行文档分类,作者 Zac Stewart。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2uwBm3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Document Classification with scikit-learn&/a&&br&&/p&&/li&&/ul&&p&多层感知器(MLP)是一个简单的前馈神经网络,由多层节点组成,其中每个层与随后的层完全连接。多层感知器在 Scikit-learn 版本 0.18 中作了介绍。&br&&/p&&p&首先从 Scikit-learn 文档中阅读 MLP 分类器的概述,然后使用教程练习实现。&br&&/p&&ul&&li&&p&神经网络模型(监督式),Scikit-learn 文档。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/3oR76l& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&1.17. Neural network models (supervised)&/a&&/p&&/li&&li&&p&Python 和 Scikit-learn 的神经网络初学者指南 0.18!作者 Jose Portilla。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2tX6rG& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A Beginner’s Guide to Neural Networks with Python and SciKit Learn 0.18!&/a&&br&&/p&&/li&&/ul&&p&&strong&第3步:更多聚类&/strong&&br&&/p&&p&我们现在接着讲聚类,一种无监督学习形式。上篇中,我们讨论了 k-means 算法; 我们在此介绍 DBSCAN 和期望最大化(EM)。&figure&&img src=&https://pic1.zhimg.com/v2-a2f4b0ceb5c10f01c5207_b.jpg& data-rawwidth=&600& data-rawheight=&300& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/v2-a2f4b0ceb5c10f01c5207_r.jpg&&&/figure&&/p&&p&&em&Scikit-learn聚类算法&/em&&br&&/p&&p&首先,阅读这些介绍性文章; 第一个是 k 均值和 EM 聚类技术的快速比较,是对新聚类形式的一个很好的继续,第二个是对 Scikit-learn 中可用的聚类技术的概述:&br&&/p&&ul&&li&&p&聚类技术比较:简明技术概述,作者 Matthew Mayo。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/4ctIvI& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Comparing Clustering Techniques: A Concise Technical Overview&/a&&/p&&/li&&li&&p&在玩具数据集中比较不同的聚类算法,Scikit-learn 文档。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/4uvbbM& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Comparing different clustering algorithms on toy datasets&/a&&br&&/p&&/li&&/ul&&p&期望最大化(EM)是概率聚类算法,并因此涉及确定实例属于特定聚类的概率。EM 接近统计模型中参数的最大似然性或最大后验估计(Han、Kamber 和 Pei)。EM 过程从一组参数开始迭代直到相对于 k 聚类的聚类最大化。&br&&/p&&p&首先阅读关于 EM 算法的教程。接下来,看看相关的 Scikit-learn 文档。最后,按照教程使用 Python 自己实现 EM 聚类。&br&&/p&&ul&&li&&p&期望最大化(EM)算法教程,作者 Elena Sharova。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/33ukYd& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A Tutorial on the Expectation Maximization (EM) Algorithm&/a&&/p&&/li&&li&&p&高斯混合模型,Scikit-learn 文档。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/20C2tZ& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2.1. Gaussian mixture models&/a&。&/p&&/li&&li&&p&使用 Python 构建高斯混合模型的快速介绍,作者 Tiago Ramalho。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/4oxFsj& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Quick introduction to gaussian mixture models with python&/a&&br&&/p&&/li&&/ul&&p&如果高斯混合模型初看起来令人困惑,那么来自 Scikit-learn 文档的这一相关部分应该可以减轻任何多余的担心:&br&&/p&&blockquote&&p&&em&高斯混合对象实现期望最大化(EM)算法以拟合高斯模型混合。&/em&&br&&/p&&/blockquote&&p&基于密度且具有噪声的空间聚类应用(DBSCAN)通过将密集数据点分组在一起,并将低密度数据点指定为异常值来进行操作。&/p&&p&首先从 Scikit-learn 的文档中阅读并遵循 DBSCAN 的示例实现,然后按照简明的教程学习:&br&&/p&&ul&&li&&p&DBSCAN 聚类算法演示,Scikit-learn 文档。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/1l9tvX& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Demo of DBSCAN clustering algorithm&/a&&/p&&/li&&li&&p&基于密度的聚类算法(DBSCAN)和实现。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/1LEoXC& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&suo.im/1LEoXC&/span&&span class=&invisible&&&/span&&/a&&br&&/p&&/li&&/ul&&p&&strong&第4步:更多的集成方法&/strong&&br&&/p&&p&上篇只涉及一个单一的集成方法:随机森林(RF)。RF 作为一个顶级的分类器,在过去几年中取得了巨大的成功,但它肯定不是唯一的集成分类器。我们将看看包装、提升和投票。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-f8b52a4a7bf476a61a4dd6d3d97ae2ba_b.jpg& data-rawwidth=&500& data-rawheight=&257& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-f8b52a4a7bf476a61a4dd6d3d97ae2ba_r.jpg&&&/figure&&p&&em&给我一个提升&/em&&br&&/p&&p&首先,阅读这些集成学习器的概述,第一个是通用性的;第二个是它们与 Scikit-learn 有关:&br&&/p&&ul&&li&&p&集成学习器介绍,作者 Matthew Mayo。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/cLESw& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Data Science Basics: An Introduction to Ensemble Learners&/a&&/p&&/li&&li&&p&Scikit-learn 中的集成方法,Scikit-learn 文档。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/yFuY9& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&1.11. Ensemble methods&/a&&br&&/p&&/li&&/ul&&p&然后,在继续使用新的集成方法之前,请通过一个新的教程快速学习随机森林:&br&&/p&&ul&&li&&p&Python 中的随机森林,来自 Yhat。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2eujI& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Random Forests in Python&/a&&br&&/p&&/li&&/ul&&p&包装、提升和投票都是不同形式的集成分类器,全部涉及建构多个模型; 然而,这些模型由什么算法构建,模型使用的数据,以及结果如何最终组合起来,这些都会随着方案而变化。&br&&/p&&ul&&li&&p&包装:从同一分类算法构建多个模型,同时使用来自训练集的不同(独立)数据样本——Scikit-learn 实现包装分类器&/p&&/li&&li&&p&提升:从同一分类算法构建多个模型,一个接一个地链接模型,以提高每个后续模型的学习——Scikit-learn 实现 AdaBoost&/p&&/li&&li&&p&投票:构建来自不同分类算法的多个模型,并且使用标准来确定模型如何最好地组合——Scikit-learn 实现投票分类器&br&&/p&&/li&&/ul&&p&那么,为什么要组合模型?为了从一个特定角度处理这个问题,这里是偏差-方差权衡的概述,具体涉及到提升,以下是 Scikit-learn 文档:&br&&/p&&ul&&li&&p&单一评估器 vs 包装:偏差-方差分解,Scikit-learn 文档。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/3izlRB& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&suo.im/3izlRB&/span&&span class=&invisible&&&/span&&/a&&br&&/p&&/li&&/ul&&p&现在你已经阅读了关于集成学习器的一些介绍性材料,并且对几个特定的集成分类器有了基本了解,下面介绍如何从 Machine Learning Mastery 中使用 Scikit-learn 在 Python 中实现集成分类器:&br&&/p&&ul&&li&&p&使用 Scikit-learn 在 Python 中实现集成机器学习算法,作者 Jason Brownlee。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/9WEAr& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ensemble Machine Learning Algorithms in Python with scikit-learn - Machine Learning Mastery&/a&&br&&/p&&/li&&/ul&&p&&strong&第5步:梯度提升&/strong&&br&&/p&&p&下一步我们继续学习集成分类器,探讨一个当代最流行的机器学习算法。梯度提升最近在机器学习中产生了显著的影响,成为了 Kaggle 竞赛中最受欢迎和成功的算法之一。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c8bbfe7429_b.jpg& data-rawwidth=&365& data-rawheight=&256& class=&content_image& width=&365&&&/figure&&p&&em&给我一个梯度提升&/em&&br&&/p&&p&首先,阅读梯度提升的概述:&br&&/p&&ul&&li&&p&维基百科条目:梯度提升。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/TslWi& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&suo.im/TslWi&/span&&span class=&invisible&&&/span&&/a&&br&&/p&&/li&&/ul&&p&接下来,了解为什么梯度提升是 Kaggle 竞赛中「最制胜」的方法:&br&&/p&&ul&&li&&p&为什么梯度提升完美解决了诸多 Kaggle 难题?Quora,地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/3rS6ZO& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Why does Gradient boosting work so well for so many Kaggle problems?&/a&&/p&&/li&&li&&p&Kaggle 大师解释什么是梯度提升,作者 Ben Gorman。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/3nXlWR& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A Kaggle Master Explains Gradient Boosting&/a&&br&&/p&&/li&&/ul&&p&虽然 Scikit-learn 有自己的梯度提升实现,我们将稍作改变,使用 XGBoost 库,我们提到过这是一个更快的实现。&br&&/p&&p&以下链接提供了 XGBoost 库的一些额外信息,以及梯度提升(出于必要):&br&&/p&&ul&&li&&p&维基百科条目:XGBoost。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2UlJ3V& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Xgboost - Wikipedia&/a&&/p&&/li&&li&&p&Ghub 上的 XGBoost 库。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2JeQI8& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&dmlc/xgboost&/a&&/p&&/li&&li&&p&XGBoost 文档。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/QRRrm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Introduction to Boosted Trees&/a&&br&&/p&&/li&&/ul&&p&现在,按照这个教程把所有汇聚起来:&br&&/p&&ul&&li&&p&Python 中 XGBoost 梯度提升树的实现指南,作者 Jesse Steinweg-Woods。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/4FTqD5& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A Guide to Gradient Boosted Trees with XGBoost in Python&/a&&br&&/p&&/li&&/ul&&p&你还可以按照这些更简洁的示例进行强化:&br&&/p&&ul&&li&&p&XGBoost 在 Kaggle 上的示例(Python)。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/4F9A1J& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Titanic: Machine Learning from Disaster&/a&&/p&&/li&&li&&p&Iris 数据集和 XGBoost 简单教程,作者 Ieva Zarina。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2Lyb1a& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Iris Dataset and Xgboost Simple Tutorial&/a&&br&&/p&&/li&&/ul&&p&&strong&第6步:更多的降维&/strong&&br&&/p&&p&降维是通过使用过程来获得一组主变量,将用于模型构建的变量从其初始数减少到一个减少数。&br&&/p&&p&有两种主要形式的降维:&br&&/p&&ul&&li&&p&1. 特征选择——选择相关特征的子集。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/4wlkrj& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Feature selection&/a&&/p&&/li&&li&&p&2. 特征提取——构建一个信息性和非冗余的衍生值特征集。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/3Gf0Yw& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Feature extraction&/a&&br&&/p&&/li&&/ul&&p&下面是一对常用的特征提取方法。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-5d9dedfe5_b.jpg& data-rawwidth=&600& data-rawheight=&481& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic2.zhimg.com/v2-5d9dedfe5_r.jpg&&&/figure&&blockquote&&p&&em&主成分分析(PCA)是一种统计步骤,它使用正交变换将可能相关变量的一组观测值转换为一组称为主成分的线性不相关变量值。主成分的数量小于或等于原始变量的数量。这种变换以这样的方式定义,即第一主成分具有最大可能的方差(即考虑数据中尽可能多的变率)&/em&&br&&/p&&/blockquote&&p&以上定义来自 PCA 维基百科条目,如果感兴趣可进一步阅读。但是,下面的概述/教程非常彻底:&br&&/p&&ul&&li&&p&主成分分析:3 个简单的步骤,作者 Sebastian Raschka。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/1ahFdW& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Principal Component Analysis&/a&&br&&/p&&/li&&/ul&&blockquote&&p&&em&线性判别分析(LDA)是 Fisher 线性判别的泛化,是统计学、模式识别和机器学习中使用的一种方法,用于发现线性组合特征或分离两个或多个类别的对象或事件的特征。所得到的组合可以用作线性分类器,或者更常见地,用作后续分类之前的降维。&/em&&br&&/p&&/blockquote&&p&LDA 与方差分析(ANOVA)和回归分析密切相关,它同样尝试将一个因变量表示为其他特征或测量的线性组合。然而,ANOVA 使用分类独立变量和连续因变量,而判别分析具有连续的独立变量和分类依赖变量(即类标签)。&br&&/p&&p&上面的定义也来自维基百科。下面是完整的阅读:&br&&/p&&ul&&li&&p&线性判别分析——直至比特,作者 Sebastian Raschka。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/gyDOb& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linear Discriminant Analysis&/a&&br&&/p&&/li&&/ul&&p&你对 PCA 和 LDA 对于降维的实际差异是否感到困惑?Sebastian Raschka 做了如下澄清:&br&&/p&&blockquote&&p&&em&线性判别分析(LDA)和主成分分析(PCA)都是通常用于降维的线性转换技术。PCA 可以被描述为「无监督」算法,因为它「忽略」类标签,并且其目标是找到使数据集中的方差最大化的方向(所谓的主成分)。与 PCA 相反,LDA 是「监督的」并且计算表示使多个类之间的间隔最大化的轴的方向(「线性判别式」)。&/em&&br&&/p&&/blockquote&&p&有关这方面的简要说明,请阅读以下内容:&br&&/p&&ul&&li&&p&LDA 和 PCA 之间的降维有什么区别?作者 Sebastian Raschka。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2IPt0U& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Machine Learning FAQ&/a&&br&&/p&&/li&&/ul&&p&&strong&第 7 步:更多的深度学习&/strong&&br&&/p&&p&上篇中提供了一个学习神经网络和深度学习的入口。如果你的学习到目前比较顺利并希望巩固对神经网络的理解,并练习实现几个常见的神经网络模型,那么请继续往下看。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c950d421c2bccb44b7a2c0d_b.jpg& data-rawwidth=&495& data-rawheight=&288& class=&origin_image zh-lightbox-thumb& width=&495& data-original=&https://pic4.zhimg.com/v2-c950d421c2bccb44b7a2c0d_r.jpg&&&/figure&&p&首先,看一些深度学习基础材料:&br&&/p&&ul&&li&&p&深度学习关键术语及解释,作者 Matthew Mayo&/p&&/li&&li&&p&理解深度学习的 7 个步骤,作者 Matthew Mayo。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/3QmEfV& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&7 Steps to Understanding Deep Learning&/a&&br&&/p&&/li&&/ul&&p&接下来,在 Google 的机器智能开源软件库 TensorFlow(一个有效的深度学习框架和现今几乎是最好的神经网络工具)尝试一些简明的概述/教程:&br&&/p&&ul&&li&&p&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D016f4d49dd4ce279d283cd%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器学习敲门砖:任何人都能看懂的 TensorFlow 介绍&/a&(第 1、2 部分)&/p&&/li&&li&&p&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3Ddef9dcaff01%26chksm%3D871b10beb06c99a8ccb990bb2c6b7bdcf2bed09c838f7ff03escene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&入门级解读:小白也能看懂的 TensorFlow 介绍&/a&(第 3、4 部分)&br&&/p&&/li&&/ul&&p&最后,直接从 TensorFlow 网站试用这些教程,它实现了一些最流行和常见的神经网络模型:&br&&/p&&ul&&li&&p&循环神经网络,谷歌 TensorFlow 教程。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2gtkze& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&suo.im/2gtkze&/span&&span class=&invisible&&&/span&&/a&&/p&&/li&&li&&p&卷积神经网络,谷歌 TensorFlow 教程。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/g8Lbg& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&suo.im/g8Lbg&/span&&span class=&invisible&&&/span&&/a&&br&&/p&&/li&&/ul&&p&此外,目前一篇关于 7 个步骤掌握深度学习的文章正在写作之中,重点介绍使用位于 TensorFlow 顶部的高级 API,以增模型实现的容易性和灵活性。我也将在完成后在这儿添加一个链接。&br&&/p&&p&相关的:&br&&/p&&ul&&li&&p&进入机器学习行业之前应该阅读的 5 本电子书。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/SlZKt& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&5 EBooks to Read Before Getting into A Machine Learning Career&/a&&/p&&/li&&li&&p&理解深度学习的 7 个步骤。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/3QmEfV& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&7 Steps to Understanding Deep Learning&/a&&/p&&/li&&li&&p&机器学习关键术语及解释。地址:&a href=&https://link.zhihu.com/?target=http%3A//suo.im/2URQGm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Machine Learning Key Terms, Explained&/a&&/p&&/li&&/ul&&p&选自kdnuggets(&a href=&https://link.zhihu.com/?target=http%3A//www.kdnuggets.com/2015/11/seven-steps-machine-learning-python.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&1&/a&)(&a href=&https://link.zhihu.com/?target=http%3A//www.kdnuggets.com/2017/03/seven-more-steps-machine-learning-python.html/2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2&/a&)
&b&机器之心编译&/b&&/p&&h2&只需十四步:从零开始掌握Python机器学习&/h2&
Python 可以说是现在最流行的机器学习语言,而且你也能在网上找到大量的资源。你现在也在考虑从 Python 入门机器学习吗?本教程或许能帮你成功上手,从 0 到 1 掌握 Python 机器学习,至于后面再从 1 到 100 变成机器学习专家,就要看你自己的努力了。本教… 和 。本教程的作者为 KDnuggets 副主编兼数据科学家 Matthew Mayo。
&figure&&img src=&https://pic2.zhimg.com/b74b8d7f4029ea5fcd94e92f481a659d_b.jpg& data-rawwidth=&900& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic2.zhimg.com/b74b8d7f4029ea5fcd94e92f481a659d_r.jpg&&&/figure&&p&更新:&/p&&p&评论里有不少同学从严谨、科学的角度提供了很多意见,非常感谢。然后我补充说明一下:&/p&&p&1.我的主业是产品运营,这是我在coursera学习machine learning课程以后、拿来练手的题目,所以从严谨的角度来看,一定有很多问题;&/p&&p&2.已经有无数前辈用这种方法或类似方法研究过,我肯定不是原创(别怂恿我搞科研);&/p&&p&3.非专业同学从零开始学习machine learning课程并且小露一手,是完全可能的,互勉;&/p&&p&===================================================&/p&&br&&p&前几天灯神给我发了一篇文章,讲的是用机器学习的方式来判定红楼梦后40回到底是不是曹雪芹写的。&br&&/p&&p&我这段时间也在自学Andrew Ng的机器学习课程,还差4周就能完成课程了。&/p&&p&计算机是一个很强调learning by doing的学科,于是我也来「学以致用」,用刚学到的SVM算法来分析下雪芹老师到底有没有写后面的40回。&/p&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&br&&p&作为一个从没看过红楼梦的人,我的大致思路是这样的:&/p&&ol&&li&&p&受到全职猎人里蚁王破解会长无敌招数的启发,每个人的写作都有些小习惯,虽然文章前后说的内容会有差别,但是这些用词的小习惯不容易改变;&/p&&/li&&li&&p&用开源的分词工具把全书分词(python的jieba分词),然后统计词频。把出现频次超过100次的词语找出来,人工去掉一些可能因为文章内容造成前后出现不一致的人名、地名;&/p&&/li&&li&&p&然后每一章按照2中的词频表,看这一章中出现这些词语的频次;&/p&&/li&&li&&p&前80回、后40回各选15回作为机器学习的数据,让机器学习这些章节的用词特点,然后推算其他章节的用词特点是属于前80回呢、还是后40回;&/p&&/li&&li&&p&如果机器根据这些用词特征推算的是否属于后40回的结果跟实际的结果吻合,那么就说明后40回的写作风格跟前80回有很大不同,很可能是两个人写的;&/p&&/li&&/ol&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&p&好了,下面我尽量少涉及数学跟编程的知识,来一步步解读机器学习是怎么完成这个问题的。&/p&&br&&br&&h2&&strong&生成全书的词频表&/strong&&/h2&&figure&&img src=&https://pic4.zhimg.com/86db71e47e3cbdc61ab967_b.png& data-rawwidth=&246& data-rawheight=&373& class=&content_image& width=&246&&&/figure&&br&&p&我截取了其中一段的词频表。像宝二爷、黛玉笑这种涉及人物的词语,可能前面戏份多、后面戏份少,所以就不选它们作为用词习惯的特征,而像忽然、故、只要、可不是这种承接性质的碎词,就不太容易会受情节的影响,所以适合选出来作为用词习惯的特征。&/p&&p&最终,我按照出现从多到少排序,选择了278个词作为机器学习的用词习惯。&/p&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&br&&h2&&strong&将120回的词频进行统计&/strong&&/h2&&p&接下来我把每一回出现这278个词的频次统计出来,得到我们给机器学习的样本。这个样本的样子大概是这样的:&/p&&figure&&img src=&https://pic1.zhimg.com/999d0b7e34e5df4f9f00a6bdffec245c_b.png& data-rawwidth=&618& data-rawheight=&214& class=&origin_image zh-lightbox-thumb& width=&618& data-original=&https://pic1.zhimg.com/999d0b7e34e5df4f9f00a6bdffec245c_r.jpg&&&/figure&&p&比如以B行2列举例,说明在第一回里面「道」这个动词,出现了36次。&/p&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&br&&p&通常我们在进行复杂的事情前,喜欢先简化问题,或者给自己一些直观的图表,以便了解问题。机器学习也是一样的。&/p&&p&我尝试着在图上把前80回和后40回习惯用词出现的频次画出来。以第一回为例,x1坐标代表「道」出现多少次,x2坐标代表「说」出现多少次,x3坐标代表「也」出现多少次......x280坐标代表「则」出现多少次。&/p&&br&&p&什么?超过三维了,那人类的大脑可是没办法理解的啊。&/p&&p&没关系,当我们用灯光照射一个立体的图时,平面会有它的影子。这个影子虽然没有立体图的信息这么丰富,不过我们看影子还是可以猜出来大致的样子。对于高纬度的问题,我们也可以用投影的方式来降低纬度。&/p&&br&&p&虽然信息损失了不少,不过能给我们一个直观的感受。&/p&&figure&&img src=&https://pic3.zhimg.com/dcfb2ea46e2fead27df7616e_b.png& data-rawwidth=&678& data-rawheight=&615& class=&origin_image zh-lightbox-thumb& width=&678& data-original=&https://pic3.zhimg.com/dcfb2ea46e2fead27df7616e_r.jpg&&&/figure&&p&这个是120个章节的用词习惯从278纬降到3维以后的图,红色+的点是前80回,蓝色o的点是后40回。&br&&/p&&p&从这个图可以直观地看到,确实在用词习惯上有明显的区别。就算我们没有机器学习工具的帮忙,也可以大胆猜测后40回是出自于另外一个人了。&/p&&p&下面我们用机器学习来看精确一点的判断。&/p&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&br&&h2&&strong&机器学习&/strong&&/h2&&p&通过课程我大致了解了SVM的原理和简化版问题的算法实现,不过对于复杂问题我还是没这个编码能力的。于是用python的scikit库来帮助我来完成这个预测。&/p&&p&算法的步骤很简单,前80回、后40回各选15个来喂给机器学习它们的特点,然后把剩下的章节输入给机器,问它们属于前80还是后40。&/p&&figure&&img src=&https://pic4.zhimg.com/44fa4ab1cc18be09d7af_b.png& data-rawwidth=&693& data-rawheight=&608& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&https://pic4.zhimg.com/44fa4ab1cc18be09d7af_r.jpg&&&/figure&&p&看out[44]的结果,代表了机器预测这120回的用词习惯到底属不属于后40回(0为不属于,1为属于)。&br&&/p&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&p&如果你看不懂上面的代码,没关系。我告诉你结果好了。&/p&&p&机器在学习以后告诉我,如果我把随便一章的用词习惯告诉它、但不告诉它到底是前80回还是后40回,那么机器有95%的把握能猜出它是不是后40回。&/p&&p&至此,我们可以很有信心地判断它们的写作风格不同。&/p&&br&&p&那么,问题来了,会不会因为是情节的需要所以导致写作风格不同了呢?&/p&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&br&&h2&&strong&情节不同会造成用词习惯多大的差别?&/strong&&/h2&&p&好吧,那我再来做一个旁证。我把另外一部四大名著「三国演义」拿来分析,看看上部跟下部的用词习惯会不会有比较明显的差别。&/p&&figure&&img src=&https://pic2.zhimg.com/83a849aba46a550bf5fb_b.png& data-rawwidth=&576& data-rawheight=&516& class=&origin_image zh-lightbox-thumb& width=&576& data-original=&https://pic2.zhimg.com/83a849aba46a550bf5fb_r.jpg&&&/figure&&p&这个是三国演义的用词习惯缩到三维以后的图,红色+代表前60部的用词习惯,蓝色o代表后60部的用词习惯。&/p&&p&你可能会说,虽然中间交叉的地方比较多,但是还是可以看出来是有区分的。&/p&&br&&p&可如果你比对一下跟红楼梦的图,你就会发现红楼梦的差别会明显得多。&/p&&p&&figure&&img src=&https://pic2.zhimg.com/c3117edef7f9f8a05672c37fac4a6f59_b.jpg& data-rawwidth=&900& data-rawheight=&405& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic2.zhimg.com/c3117edef7f9f8a05672c37fac4a6f59_r.jpg&&&/figure&(红色+为红楼梦前80回/三国前60回,蓝色o红楼梦后40回/三国后60回)&/p&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&br&&p&最后,用机器学习的方式来说,如果我把三国演义随便一章的用词习惯告诉它、但不告诉它到底是前60回还是后60回,那么机器有7成的把握猜对,这个准确度已经远远低于红楼梦的95%的预测水平。&/p&&p&所以,我们用「三国演义」这个旁证来分析,即便是因为情节需要导致的用词习惯差别也不应该这么大。&br&&/p&&p&所以,我们就更有信心说曹老先生没有写后40回了。&/p&&br&&p&更多的机器学习有趣的玩法,我会在学习的过程中慢慢尝试的。以上。&/p&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&br&&h2&&strong&臭不要脸的自我介绍&/strong&&/h2&&p&我叫黎晨,英文名LC,是我中文拼音的简称,跟LV并无关系;&/p&&p&性别男,遵纪守法,无不良前科。我的很多朋友都说我是「死变态」。所以我经常宅在家里不出去祸害社会。&/p&&p&为此,我向政府申请维护社会公序良俗的奖励,但还没有获得任何回复;&/p&&p&00年开始接触互联网,可是很年轻。在互联网牛市造福浪潮中连小小的牛尾巴都没沾到,不过,我会继续努力的;&/p&&p&我公众号的所有文章均为无版权声明。无须征求本人意见,可以随意修改转载。&/p&&figure&&img src=&https://pic1.zhimg.com/c9a038fcd78d7a314e10_b.png& data-rawwidth=&75& data-rawheight=&34& class=&content_image& width=&75&&&/figure&&p&如果觉得文章还行,欢迎关注公众号&strong&「xiaochenxiangtaiduo」(小晨想太多的拼音)&/strong&&/p&
更新:评论里有不少同学从严谨、科学的角度提供了很多意见,非常感谢。然后我补充说明一下:1.我的主业是产品运营,这是我在coursera学习machine learning课程以后、拿来练手的题目,所以从严谨的角度来看,一定有很多问题;2.已经有无数前辈用这…
我也谈谈自己的经验。&br&&br&机器学习说简单就简单,说难就难,但如果一个人不够聪明的话,他大概很难知道机器学习哪里难。基本上要学习机器学习,先修课程是algebra, calculus, probability theory, linear regression。这几门科学好了再学Machine learning是事半功倍的。此外近代数学的东西也要懂, functional analysis啥的。其实不懂也行,只是现在文献总是喜欢引用里面的概念,懂一些读起来方便。(我就很讨厌manifold learning这个名字,把许多人都吓跑了)real analysis最好用心学,对序列或函数的收敛性的理解很能帮助你了解这些模型的精髓。Optimization theory (ref. Convex optimization by Boyd)也是重中之重,在前面几门课学好并有一定python基础的时候可以仔细读一读。&br&&br&其实机器学习需要看的书不多,必读的是elements of statistical learning。这本书涵盖范围很广,且深入浅出,习题也有一定难度,适合自学。你看过这本之后就知道其他什么书可以看什么书不需要看了。&br&&br&再下来就是练习,这个是重中之重。我觉得做kaggle的比赛最有效。可以仿照别人写写code,也可以自己想想办法,但最主要的是要能够迅速完成编程并给出结果。我见过许多人光讨论就可以几天,但真正动起手来就萎了。&br&&br&最后就是读source code并自己实现几个model from scratch。这个比较难,但是确是最锻炼人的。具体语言应该是越基础越好,比如C/C++什么的。等你自己写完了一两个model,再去用别人的package就会觉得得心应手许多了。我真心觉得这个比上coursera那些课强多了。上coursera最大的缺点就是容易变得似懂非懂纸上谈兵。我自己program过ensemble trees(C++)和deep learning solver(Python),受益颇多。至于读source code,我觉得libsvm写得很好啊,不过算法对大一大二新生是难了点。此外,基于python的工具包scikit-learn的sourcecode很好读,建议大家多看看。&br&&br&我看回答中有提到Matlab,我觉的matlab处理字符很麻烦,现在很多dataset都需要处理字符,所以并不是好的选择。&br&&br&补充一点就是要学会发散思维,学会如何从data中找feature。关于这个的教程很缺,需要大量练习及一些天赋。&br&&br&说实话machine learning虽然门槛不高,但真心是聪明人的游戏。&br&&br&-------------------------------------------------------&br&&br&很久之前写的东西了,不过感觉文字打击了很多人的积极性。 &br&&br&-------------------------------------------------------&br&[日]没想到直到今天还有人点赞。我发几页自己之前写的notes吧。看起来是笨鸟笨着飞的办法,但是效果真的很好。(再加上投行那几年把MS Word能力练得很强,写起来比Latex快多了)&br&&br&&figure&&img data-rawwidth=&750& data-rawheight=&1334& src=&https://pic4.zhimg.com/v2-3e8ccae347e85cb4960b8cff091bbfcb_b.png& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic4.zhimg.com/v2-3e8ccae347e85cb4960b8cff091bbfcb_r.png&&&/figure&&br&&br&&br&&figure&&img data-rawwidth=&750& data-rawheight=&1334& src=&https://pic2.zhimg.com/v2-c00755cbff5e_b.png& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic2.zhimg.com/v2-c00755cbff5e_r.png&&&/figure&&br&&br&&br&&figure&&img data-rawwidth=&750& data-rawheight=&1334& src=&https://pic4.zhimg.com/v2-d388bbd7b358e63ac453256b_b.png& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic4.zhimg.com/v2-d388bbd7b358e63ac453256b_r.png&&&/figure&
我也谈谈自己的经验。 机器学习说简单就简单,说难就难,但如果一个人不够聪明的话,他大概很难知道机器学习哪里难。基本上要学习机器学习,先修课程是algebra, calculus, probability theory, linear regression。这几门科学好了再学Machine learning是事…
&figure&&img src=&https://pic1.zhimg.com/v2-31c0faabbd7101dbd24c89a_b.jpg& data-rawwidth=&724& data-rawheight=&571& class=&origin_image zh-lightbox-thumb& width=&724& data-original=&https://pic1.zhimg.com/v2-31c0faabbd7101dbd24c89a_r.jpg&&&/figure&&p&&b&转载请注明作者和出处:&/b& &a href=&https://zhuanlan.zhihu.com/ml-jack& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&zhuanlan.zhihu.com/ml-j&/span&&span class=&invisible&&ack&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&CSDN同步更新地址:&/b&&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/c/article/details/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&blog.csdn.net/c&/span&&span class=&invisible&&2/article/details/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&Github代码获取:&/b&&a href=&https://link.zhihu.com/?target=https%3A//github.com/Jack-Cherish/Machine-Learning/tree/master/kNN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&https://github.com/Jack-Cherish/Machine-Learning/&/a&&/p&&p&&b&&a href=&https://link.zhihu.com/?target=http%3A//lib.csdn.net/base/python& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python&/a&版本:&/b& Python3.x &/p&&p&&b&运行平台:&/b& Windows &/p&&p&&b&IDE:&/b& Sublime text3&/p&&p&&br&&/p&&h2&一、前言&/h2&&p&有读者反映,说我上篇文章&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/c/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python3《机器学习实战》学习笔记(一):k-近邻算法(史诗级干货长文)&/a&,太长了。一看那么长,读的欲望都降低了。既然如此,决策树的内容,我就分开讲好了。本篇讨论决策树的原理和决策树构建的准备工作,完整实例内容会在下一篇文章进行讲解。&/p&&p&本文出现的所有代码,均可在我的github上下载,欢迎Follow、Star:&a href=&https://link.zhihu.com/?target=https%3A//github.com/Jack-Cherish/Machine-Learning/tree/master/Decision%2520Tree& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/Jack-Cherish&/span&&span class=&invisible&&/Machine-Learning/tree/master/Decision%20Tree&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&如果对于代码理解不够的,可以结合本文,观看由南京航空航天大学硕士:&b&深度眸&/b&,为大家免费录制的&b&视频&/b&:&/p&&ul&&li&视频:&a href=&https://link.zhihu.com/?target=https%3A//pan.baidu.com/s/1hsnbhkS& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&pan.baidu.com/s/1hsnbhk&/span&&span class=&invisible&&S&/span&&span class=&ellipsis&&&/span&&/a& 密码:9ytv&/li&&li&视频交流群:ML与DL视频分享群(),欢迎提出宝贵意见。&/li&&/ul&&h2&二、决策树&/h2&&p&决策树是什么?决策树(decision tree)是一种基本的分类与回归方法。举个通俗易懂的例子,如下图所示的流程图就是一个决策树,长方形代表判断模块(decision block),椭圆形成代表终止模块(terminating block),表示已经得出结论,可以终止运行。从判断模块引出的左右箭头称作为分支(branch),它可以达到另一个判断模块或者终止模块。我们还可以这样理解,分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。蒙圈没??如下图所示的决策树,长方形和椭圆形都是结点。长方形的结点属于内部结点,椭圆形的结点属于叶结点,从结点引出的左右箭头就是有向边。而最上面的结点就是决策树的根结点(root node)。这样,结点说法就与模块说法对应上了,理解就好。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2e83ea7afbea_b.jpg& data-caption=&& data-rawwidth=&740& data-rawheight=&378& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic3.zhimg.com/v2-2e83ea7afbea_r.jpg&&&/figure&&p&我们回到这个流程图,对,你没看错,这就是一个假想的相亲对象分类系统。它首先检测相亲对方是否有房。如果有房,则对于这个相亲对象可以考虑进一步接触。如果没有房,则观察相亲对象是否有上进心,如果没有,直接Say Goodbye,此时可以说:&你人很好,但是我们不合适。&如果有,则可以把这个相亲对象列入候选名单,好听点叫候选名单,有点瑕疵地讲,那就是备胎。 &/p&&p&不过这只是个简单的相亲对象分类系统,只是做了简单的分类。真实情况可能要复杂得多,考虑因素也可以是五花八门。脾气好吗?会做饭吗?愿意做家务吗?家里几个孩子?父母是干什么的?天啊,我不想再说下去了,想想都可怕。 &/p&&p&我们可以把决策树看成一个if-then规则的集合,将决策树转换成if-then规则的过程是这样的:由决策树的根结点(root node)到叶结点(leaf node)的每一条路径构建一条规则;路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。决策树的路径或其对应的if-then规则集合具有一个重要的性质:互斥并且完备。这就是说,每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。这里所覆盖是指实例的特征与路径上的特征一致或实例满足规则的条件。 &/p&&p&使用决策树做预测需要以下过程: &/p&&ul&&li&收集数据:可以使用任何方法。比如想构建一个相亲系统,我们可以从媒婆那里,或者通过参访相亲对象获取数据。根据他们考虑的因素和最终的选择结果,就可以得到一些供我们利用的数据了。 &/li&&li&准备数据:收集完的数据,我们要进行整理,将这些所有收集的信息按照一定规则整理出来,并排版,方便我们进行后续处理。 &/li&&li&分析数据:可以使用任何方法,决策树构造完成之后,我们可以检查决策树图形是否符合预期。 &/li&&li&训练算法:这个过程也就是构造决策树,同样也可以说是决策树学习,就是构造一个决策树的数据结构。 &/li&&li&测试算法:使用经验树计算错误率。当错误率达到了可接收范围,这个决策树就可以投放使用了。 &/li&&li&使用算法:此步骤可以使用适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。 &/li&&/ul&&h2&三、决策树的构建的准备工作 &/h2&&p&使用决策树做预测的每一步骤都很重要,数据收集不到位,将会导致没有足够的特征让我们构建错误率低的决策树。数据特征充足,但是不知道用哪些特征好,将会导致无法构建出分类效果好的决策树模型。从算法方面看,决策树的构建是我们的核心内容。 &/p&&p&决策树要如何构建呢?通常,这一过程可以概括为3个步骤:特征选择、决策树的生成和决策树的修剪。 &/p&&h2&1、特征选择 &/h2&&p&特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率,如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的精度影响不大。通常特征选择的标准是信息增益(information gain)或信息增益比,为了简单,本文章使用信息增益作为选择特征的标准。那么,什么是信息增益?在讲解信息增益之前,让我们看一组实例,贷款申请样本数据表。 &/p&&figure&&img src=&https://pic1.zhimg.com/v2-d8d9b2ece674a42c83e40a2_b.jpg& data-caption=&& data-rawwidth=&948& data-rawheight=&595& class=&origin_image zh-lightbox-thumb& width=&948& data-original=&https://pic1.zhimg.com/v2-d8d9b2ece674a42c83e40a2_r.jpg&&&/figure&&p&希望通过所给的训练数据学习一个贷款申请的决策树,用以对未来的贷款申请进行分类,即当新的客户提出贷款申请时,根据申请人的特征利用决策树决定是否批准贷款申请。&/p&&p&特征选择就是决定用哪个特征来划分特征空间。比如,我们通过上述数据表得到两个可能的决策树,分别由两个不同特征的根结点构成。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-6a7cd085821_b.jpg& data-caption=&& data-rawwidth=&730& data-rawheight=&329& class=&origin_image zh-lightbox-thumb& width=&730& data-original=&https://pic4.zhimg.com/v2-6a7cd085821_r.jpg&&&/figure&&p&图(a)所示的根结点的特征是年龄,有3个取值,对应于不同的取值有不同的子结点。图(b)所示的根节点的特征是工作,有2个取值,对应于不同的取值有不同的子结点。两个决策树都可以从此延续下去。问题是:究竟选择哪个特征更好些?这就要求确定选择特征的准则。直观上,如果一个特征具有更好的分类能力,或者说,按照这一特征将训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就更应该选择这个特征。信息增益就能够很好地表示这一直观的准则。 &/p&&p&什么是信息增益呢?在划分数据集之前之后信息发生的变化成为信息增益,知道如何计算信息增益,我们就可以计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。 &/p&&h2&(1)香农熵&/h2&&p&在可以评测哪个数据划分方式是最好的数据划分之前,我们必须学习如何计算信息增益。集合信息的度量方式成为香农熵或者简称为熵(entropy),这个名字来源于信息论之父克劳德·香农。 &/p&&p&如果看不明白什么是信息增益和熵,请不要着急,因为他们自诞生的那一天起,就注定会令世人十分费解。克劳德·香农写完信息论之后,约翰·冯·诺依曼建议使用&熵&这个术语,因为大家都不知道它是什么意思。&/p&&p&熵定义为信息的期望值。在信息论与概率统计中,熵是表示随机变量不确定性的度量。如果待分类的事务可能划分在多个分类之中,则符号xi的信息定义为 :&/p&&figure&&img src=&https://pic3.zhimg.com/v2-1e233f577a28f501b9f8b961ae0e0321_b.jpg& data-caption=&& data-rawwidth=&245& data-rawheight=&42& class=&content_image& width=&245&&&/figure&&p&其中 &img src=&https://www.zhihu.com/equation?tex=p%28xi%29& alt=&p(xi)& eeimg=&1&& 是选择该分类的概率。有人可能会问,信息为啥这样定义啊?答曰:前辈得出的结论。这就跟1+1等于2一样,记住并且会用即可。上述式中的对数以2为底,也可以e为底(自然对数)。 &/p&&p&通过上式,我们可以得到所有类别的信息。为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值(数学期望),通过下面的公式得到: &/p&&figure&&img src=&https://pic1.zhimg.com/v2-dbdd31aeec077bf6d4f694f_b.jpg& data-caption=&& data-rawwidth=&320& data-rawheight=&104& class=&content_image& width=&320&&&/figure&&p&期中n是分类的数目。熵越大,随机变量的不确定性就越大。 &/p&&p&当熵中的概率由数据估计(特别是最大似然估计)得到时,所对应的熵称为经验熵(empirical entropy)。什么叫由数据估计?比如有10个数据,一共有两个类别,A类和B类。其中有7个数据属于A类,则该A类的概率即为十分之七。其中有3个数据属于B类,则该B类的概率即为十分之三。浅显的解释就是,这概率是我们根据数据数出来的。我们定义贷款申请样本数据表中的数据为训练数据集D,则训练数据集D的经验熵为 &img src=&https://www.zhihu.com/equation?tex=H%28D%29& alt=&H(D)& eeimg=&1&& , &img src=&https://www.zhihu.com/equation?tex=%7CD%7C& alt=&|D|& eeimg=&1&& 表示其样本容量,及样本个数。设有K个类 &img src=&https://www.zhihu.com/equation?tex=Ck%EF%BC%8Ck+%3D+1%2C2%2C3%2C%C2%B7%C2%B7%C2%B7%2CK%EF%BC%8C%7CC_%7Bk%7D%7C& alt=&Ck,k = 1,2,3,···,K,|C_{k}|& eeimg=&1&& 为属于类 &img src=&https://www.zhihu.com/equation?tex=C_%7Bk%7D& alt=&C_{k}& eeimg=&1&&的样本个数,这经验熵公式可以写为 :&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c98e7b603c92e1f9cee7d67fd1d34eeb_b.jpg& data-caption=&& data-rawwidth=&339& data-rawheight=&104& class=&content_image& width=&339&&&/figure&&p&根据此公式计算经验熵 &img src=&https://www.zhihu.com/equation?tex=H%28D%29& alt=&H(D)& eeimg=&1&& ,分析贷款申请样本数据表中的数据。最终分类结果只有两类,即放贷和不放贷。根据表中的数据统计可知,在15个数据中,9个数据的结果为放贷,6个数据的结果为不放贷。所以数据集D的经验熵 &img src=&https://www.zhihu.com/equation?tex=H%28D%29& alt=&H(D)& eeimg=&1&& 为:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-130d192e6967bfe870fa9bb_b.jpg& data-caption=&& data-rawwidth=&534& data-rawheight=&83& class=&origin_image zh-lightbox-thumb& width=&534& data-original=&https://pic1.zhimg.com/v2-130d192e6967bfe870fa9bb_r.jpg&&&/figure&&p&经过计算可知,数据集D的经验熵 &img src=&https://www.zhihu.com/equation?tex=H%28D%29& alt=&H(D)& eeimg=&1&& 的值为0.971。 &/p&&h2&(2)编写代码计算经验熵 &/h2&&p&在编写代码之前,我们先对数据集进行属性标注。 &/p&&ul&&li&年龄:0代表青年,1代表中年,2代表老年; &/li&&li&有工作:0代表否,1代表是; &/li&&li&有自己的房子:0代表否,1代表是; &/li&&li&信贷情况:0代表一般,1代表好,2代表非常好; &/li&&li&类别(是否给贷款):no代表否,yes代表是。 &/li&&/ul&&p&确定这些之后,我们就可以创建数据集,并计算经验熵了,代码编写如下: &/p&&div class=&highlight&&&pre&&code class=&language-python3&&&span&&/span&&span class=&c1&&# -*- coding: UTF-8 -*-&/span&
&span class=&kn&&from&/span& &span class=&nn&&math&/span& &span class=&k&&import&/span& &span class=&n&&log&/span&
&span class=&sd&&&&&&/span&
&span class=&sd&&函数说明:创建测试数据集&/span&
&span class=&sd&&Parameters:&/span&
&span class=&sd&&
&span class=&sd&&Returns:&/span&
&span class=&sd&&
dataSet - 数据集&/span&
&span class=&sd&&
labels - 分类属性&/span&
&span class=&sd&&Author:&/span&
&span class=&sd&&
Jack Cui&/span&
&span class=&sd&&Modify:&/span&
&span class=&sd&&
&span class=&sd&&&&&&/span&
&span class=&k&&def&/span& &span class=&nf&&createDataSet&/span&&span class=&p&&():&/span&
&span class=&n&&dataSet&/span& &span class=&o&&=&/span& &span class=&p&&[[&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&s1&&'no'&/span&&span class=&p&&],&/span&
&span class=&c1&&#数据集&/span&
&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'no'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'yes'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&s1&&'yes'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&s1&&'no'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&s1&&'no'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'no'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'yes'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&s1&&'yes'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&s1&&'yes'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&s1&&'yes'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'yes'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s1&&'yes'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&s1&&'yes'&/span&&span class=&p&&],&/span&
&span class=&p&&[&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&s1&&'no'&/span&&span class=&p&&]]&/span&
&span class=&n&&labels&/span& &span class=&o&&=&/span& &span class=&p&}

我要回帖

更多关于 400ai com情艺中心 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信