信长之野望12fb刷大中怎么拉勾子

&img src=&/v2-b39bacec9b1a263b9a593a_b.jpg& data-rawwidth=&621& data-rawheight=&329& class=&origin_image zh-lightbox-thumb& width=&621& data-original=&/v2-b39bacec9b1a263b9a593a_r.jpg&&&p&个人认为这是一套非常不错的视频课程,因此放在这里跟大家分享。Ng出品,必属精品。&/p&&p&&br&&/p&&p&吴恩达主讲的机器学习-2017年秋季课程已经开课啦,今天跟大家分享这套课程。&/p&&p&&br&&/p&&p&&b&课程介绍 &/b&&/p&&p& 本课程主要介绍机器学习和统计模式识别相关的知识。内容主要包括:监督学习(生成/判别学习,参数/非参数学习,神经网络,支持向量机);无监督学习(聚类,维数规约,核方法);学习理论(偏差/方差权衡;VC理论;大边缘概率);强化学习和自适应控制。课程还将讨论机器学习在一些领域的最新应用,如机器人控制,数据挖掘,自主导航,生物信息学,语音识别,文本和网络数据处理等。&/p&&p&&b&课程大纲:&/b&&/p&&img src=&/v2-cbeeca99f4f59a4ab4d434b_b.jpg& data-rawwidth=&640& data-rawheight=&371& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-cbeeca99f4f59a4ab4d434b_r.jpg&&&img src=&/v2-3acf600c6b467cd7cafb8f2f_b.jpg& data-rawwidth=&640& data-rawheight=&341& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-3acf600c6b467cd7cafb8f2f_r.jpg&&&img src=&/v2-efb45dfac574ff56f3c2_b.jpg& data-rawwidth=&640& data-rawheight=&362& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-efb45dfac574ff56f3c2_r.jpg&&&p&&b&课程首页:&/b&&/p&&p&&a href=&///?target=http%3A//cs229.stanford.edu/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&cs229.stanford.edu/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&&b&课程ppt等资料下载地址:&/b&&/p&&p&链接: &a href=&///?target=https%3A///s/1bozLucJ& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/s/1bozLuc&/span&&span class=&invisible&&J&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& &/p&&p&密码: 公众号回复“mlwu”&/p&&p&&br&&/p&&p&&b&课程Preview视频地址:&/b&&/p&&p&&a href=&///?target=https%3A//mvideos.stanford.edu/Preview/LoadPreview/109& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&mvideos.stanford.edu/Pr&/span&&span class=&invisible&&eview/LoadPreview/109&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&&b&往期精彩内容推荐:&/b&&/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D13a70c4dd4c6fe90beb7%26chksm%3D97a0c8e1a0d741f7baeb3aabc3e976d17b8%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&VAST最佳论文推荐-Tensorflow中深度学习模型可视化的研究&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D34fda2ee9c43c77ad193%26chksm%3D97a0c8f5a0d741e3dbaea14e7ba02ba0c5bd9c3da3118cceed7b2df6b17d3b548%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&麻省理工学院-2017年-深度学习与自动驾驶视频课程分享&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Dbcbcff1a53fcb35fafd19d78%26chksm%3D97a0c8dfa0d741cc8f1d10aff7ddaf4f99101d79efdf59%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《纯干货16》调整学习速率以优化神经网络训练&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Da3f9d1d3ad8b01e6b35653%26chksm%3D97a0ca92a0de2a793fa145982aaa54f82ab66b3df3ea%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&模型汇总_3&神经翻译模型(NMT)新宠Adversarial-NMT&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D9c4ed2ccf65%26chksm%3D97a0cae4a0d743f2d83e13fac48cde27de1a904a6c7f%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&模型汇总_2&深度学习加速神器-BNN&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D8988adaddf8b048b50cbb0%26chksm%3D97a0ca80a0ddc3d1fa8b9dfa169f6c61ca750c15e7cbdd%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&深度学习优化策略-1&Batch Normalization(BN)&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Ddcdfd8be409f738%26chksm%3D97a0ca54a0d5cbb779b02a1375bfd743571dfba82c47ea3eeba83c90bc386a5d%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&模型汇总_5&生成对抗网络GAN及其变体SGAN_WGAN_CGAN_DCGAN_InfoGAN_StackGAN&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D0cfae19a315bbb7f3ca6d0%26chksm%3D97a0ca01a0d7e6bbf11cdbf16fc6cd05db077e22736%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&深度学习优化策略-4& 基于Gate Mechanism的激活单元GTU、GLU&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Db2d05adffb5282ee40dec44a22ddff62%26chksm%3D97a0c9d3a0d740c5d67bae9abfec6253cfe4b480c67742daf929cf2bef7cdf1642a%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&纯干货-5&Deep Reinforcement Learning深度强化学习_论文大集合&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Da05a27b35e18b99d3a85c344bbd45e4f%26chksm%3D97a0c9ffa0d740e9eea5005dcc1ae762fa4ecc138dedfb354d0658589cbf9fbef%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深度学习模型-13 迁移学习(Transfer Learning)技术概述&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Dd74f4284bcb%26chksm%3D97a0c97fa0d7e7fd2177e1ffc2699a0bac24c5b58162c2debeec6f33%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&纯干货12 2017年5月份-李宏毅-最新GAN中文视频教程分享&i class=&icon-external&&&/i&&/a& &/p&&p&&a href=&///?target=http%3A//mp./s%3F__biz%3DMzIxNDgzNDg3NQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Dfff812eeefbf7%26chksm%3D97a0c906a0d74010b9bef54fc38beb26cb229231cec34a5282cb3bcfaea3c130%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&模型汇总20-TACOTRON一种端到端的Text-to-Speech合成模型&i class=&icon-external&&&/i&&/a&&/p&&p&&br&&/p&&p&同时欢迎大家关注微信“深度学习与NLP”,获取更多深度学习、机器学习、强化学习等精品视频教程。&/p&&img src=&/v2-0e205fbd61c7dd4f329ec89_b.jpg& data-rawwidth=&430& data-rawheight=&430& class=&origin_image zh-lightbox-thumb& width=&430& data-original=&/v2-0e205fbd61c7dd4f329ec89_r.jpg&&
个人认为这是一套非常不错的视频课程,因此放在这里跟大家分享。Ng出品,必属精品。 吴恩达主讲的机器学习-2017年秋季课程已经开课啦,今天跟大家分享这套课程。 课程介绍
本课程主要介绍机器学习和统计模式识别相关的知识。内容主要包括:监督学习(生成/…
&img src=&/50/v2-de223a2ad8d980dd74b43e3aec688862_b.png& data-rawwidth=&1345& data-rawheight=&618& class=&origin_image zh-lightbox-thumb& width=&1345& data-original=&/50/v2-de223a2ad8d980dd74b43e3aec688862_r.png&&&p&机器之心整理&/p&&p&参与:机器之心编辑部&/p&&blockquote&机器学习日益广为人知,越来越多的计算机科学家和工程师投身其中。不幸的是,理论、算法、应用、论文、书籍、视频等信息如此之多,很容易让初学者迷失其中,不清楚如何才能提升技能。本文作者依据自身经验给出了一套快速上手的可行方法及学习资源的分类汇总,机器之心在其基础上做了增益,希望对读者有所帮助。&/blockquote&&p&先决条件&br&机器学习的基础是数学。数学并非是一个可选可不选的理论方法,而是不可或缺的支柱。如果你是一名计算机工程师,每天使用 UML、ORM、设计模式及其他软件工程工具/技术,那么请闭眼一秒钟,忘掉一切。这并不是说这些概念不重要,绝不是!但是机器学习需要一种不同的方法。如今 Python 如此流行的原因之一是其「原型设计速度」。在机器学习中,一种使用几行代码即可建模算法的语言绝对是必要的。&/p&&p&微积分、线性代数、概率论在机器学习几乎所有算法中不可或缺。如果你的数学背景很扎实,请跳过这一章节。如若不然,那么重新温习一下这些重要概念也不错。考虑到理论的数量,我并不建议大家从大部头开始。尽管一开始可以用它查询具体概念,但是初学者先关注简单的话题比较好。网上有很多好的在线资源(比如 Coursera、可汗学院或优达学城),实用且适合各种背景的人群。但是我建议从提纲之类的简明书籍上手,其中所有核心概念均被涉及,次要概念可在需要的时候自行查询。这种方法虽然不够系统,但却避免了这样的缺陷:大量晦涩概念使得没有扎实理论背景的人望而却步。&/p&&p&初学者最好先学习下列内容:&/p&&p&概率论&/p&&ul&&li&离散型和连续型随机变量&/li&&li&主要分布(伯努利分布、二项式分布、正态分布、 指数分布、 泊松分布、Beta 和 Gamma 分布)&/li&&li&矩估计和最大似然估计&/li&&li&贝叶斯统计&/li&&li&相关性系数和协方差(Correlation and Covariance)&/li&&/ul&&p&线性代数&/p&&ul&&li&向量和矩阵&/li&&li&矩阵的行列式&/li&&li&特征向量和特征值&/li&&li&矩阵分解(如 SVD)&/li&&/ul&&p&微积分&/p&&ul&&li&极限与导数&/li&&li&微分和积分&/li&&li&数值计算与最优化方法&/li&&/ul&&p&网上有很多免费资源,比如&/p&&ul&&li&《概率论入门》,Grinstead、Snell 著(&a href=&/?target=https%3A//www.dartmouth.edu/%7Echance/teaching_aids/books_articles/probability_book/amsbook.mac.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&dartmouth.edu/~chance/t&/span&&span class=&invisible&&eaching_aids/books_articles/probability_book/amsbook.mac.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&/li&&li&《线性代数入门》,Wise、Gallagher 著(&a href=&/?target=http%3A//www.stat.columbia.edu/%7Eliam/teaching/4315-spr06/LinAlg.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&stat.columbia.edu/~liam&/span&&span class=&invisible&&/teaching/4315-spr06/LinAlg.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&/li&&li&《微积分入门》,Heinbockel 著(&a href=&/?target=http%3A//www.math.odu.edu/%7Ejhh/Volume-1.PDF& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&math.odu.edu/~jhh/Volum&/span&&span class=&invisible&&e-1.PDF&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&/li&&/ul&&p&维基百科上也有很多好资源,对方程、定理等进行了清晰易懂的解释。&/p&&p&机器之心也介绍过许多数学基础与概念:&/p&&ul&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3D5ec882af34cc%26chksm%3D871b28a4b06ca1b2ffa71d2dbacffdecc2c2a2f3e02ecscene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&基础入门:深度学习矩阵运算的概念和代码实现&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D0c57ba70ec4ab61c996d44%26chksm%3D871b1ecfb06c97dd3e74a2b8c41254f0efc2dd88d2e89eec3bfac5da089f28c398%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&想了解概率图模型?你要先理解图论的基本定义与形式&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D2a4cf2be611cb32da5d245cbchksm%3D871b2e21b06cae2eddfba9b6b232efcd31a1f191eafd7%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深度神经网络中的数学,对你来说会不会太难?&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D4%26sn%3D947ac4fb6765797bac76ae6c6c395c14%26chksm%3D871b28d6b06ca1c02db2790f5dae76a27c45e06edfbeffa9b99e08fde%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reddit 热门话题:如何阅读并理解论文中的数学内容?&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&机器学习主要需要的数学基础就是微积分、线性代数、概率论,我们感觉只需要掌握大学中常见的高数、线性代数、概率论与数理统计三门课程,基本上概念的理解就没什么问题了。如果再学一点数值计算和最优化等,我们基本上就能理解机器学习的学习过程推导。&/p&&p&机器学习方法建议(面向初学者)&/p&&p&特征工程&/p&&p&开始机器学习的第一步是理解如何评估和改进数据集的质量。管理特征的类别和缺失、归一化和降维(PCA、ICA、NMF)是大幅提高算法性能的基本技术,而且还有助于研究如何将数据集分割成训练集和测试集、如何采取交叉验证来取代传统的测试方法。&/p&&p&机器之心也曾详解过特征工程如 PCA 降维算法的详细理论与推导,当然我们还介绍了其它有关特征的概念:&/p&&ul&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D4%26sn%3Dfabfchksm%3D871b2d6db06ca47b9b8eaf7e755a5e49e55f9b7dfa9fcae77f565%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从特征分解到协方差矩阵:详细剖析和实现PCA算法&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D8b9e10a0c%26chksm%3D871b2e7eb06ca7681edd3243adeb83c94b323f903aa925e3a7b8a53a17bb7e69238a%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&基于TensorFlow理解三大降维技术:PCA、t-SNE 和自编码器&i class=&icon-external&&&/i&&/a& &/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3Dcf78cd60c5df87bb20a1ed59%26chksm%3D871b2f5db06ca64b94a89bcfcd43a79fdaf045a94a00feabe54f0%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&似乎没区别,但你混淆过验证集和测试集吗?&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&Numpy:Python 数值计算之王!&/p&&p&使用 Python 时,Numpy 不仅仅是一个库。它是几乎所有机器学习实现的基础,因此了解它的工作原理、关注向量化和广播(broadcasting)是非常必要的。这些技术可以帮助加速大多数算法的学习过程,利用多线程和 SIMD、MIMD 架构的力量。&/p&&p&官方文档已经很完整了,不过,我还建议大家看一下以下资源:&/p&&ul&&li&《Python 数据科学手册:数据使用的核心工具》,VanderPlas J. 著&/li&&li&《Python 科学编程入门书》,LangTangen P. H. 著&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3D8aac55a04ca9aabd774c8b813ea50494%26chksm%3D871b288cb06ca19a424d929d32fd54e462dc62d3a25fafscene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&维度、广播操作与可视化:如何高效使用TensorFlow&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&数据可视化&/p&&p&Matplotlib 即使不是纯粹的机器学习话题,了解如何可视化数据集也很重要。Matplotlib 可能是最广泛使用的解决方案:Matplotlib 易用,允许绘制不同种类的图表。Bokeh 和 Seaborne 提供了有趣的替代方案。不必要彻底了解所有包,但是了解每一个包的优点和弱点还是很有用的,可以帮助你选择合适的包。&/p&&p&了解 Matplotlib 细节的资源:《掌握 Matplotlib》,McGreggor D. 著&/p&&p&线性回归&/p&&p&线性回归是最简单的模型之一,可以把它作为一个优化问题来研究,该问题可通过最小化均方误差而得到求解。该方法虽然有效,但是限制了可利用的可能性。我建议还可以把它当作贝叶斯问题,使用之前的可能性展示参数(比如,高斯分布),优化变成了最大似然估计(Maximum Likelihood Estimation,MLE)。即使这看起来更加复杂,但该方法提供了一个可供几十个其他复杂模型共享的新方法。&/p&&p&Coursera 上介绍贝叶斯统计的课程:&/p&&ul&&li&《贝叶斯统计:从概念到数据分析》(&a href=&/?target=https%3A//www.coursera.org/learn/bayesian-statistics/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&coursera.org/learn/baye&/span&&span class=&invisible&&sian-statistics/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&/li&&li&《贝叶斯统计:技术与模型》(&a href=&/?target=https%3A//www.coursera.org/learn/mcmc-bayesian-statistics& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&coursera.org/learn/mcmc&/span&&span class=&invisible&&-bayesian-statistics&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&)&/li&&/ul&&p&以及这两本书:&/p&&ul&&li&《思考贝叶斯》,Downey B. A. 著&/li&&li&《黑客的贝叶斯方法》Davidson-Pilon C. 著&/li&&/ul&&p&包括线性回归在内,机器之心曾介绍了一些解决回归问题的方法(后文提供了 CART 算法进行回归分析):&/p&&ul&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3Dc26b56e320e8abab053ad24bd73e52b6%26chksm%3D871b24b0b06cada6da34fd3a0240acbcbd9bebbscene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&初学TensorFlow机器学习:如何实现线性回归?&i class=&icon-external&&&/i&&/a& &/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D7b5efae26f862b286cfc462eae133c75%26chksm%3D871b25e0b06cacf68cf70b171e63fabee5bb%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&回归、分类与聚类:三大方向剖解机器学习算法的优缺点(附Python和R实现)&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&线性分类&/p&&p&通常情况下,Logistic 回归是最佳起始点,也是研究信息论进而了解信息熵、交叉熵和互信息的好机会。类别交叉熵(Categorical cross-entropy)是深度学习分类中最稳定、使用最广泛的代价函数,一个简单的 logistic 回归可以展示它是如何加速学习过程的(与均方差相比)。另一个重要的话题是正则化(Ridge、Lasso 和 ElasticNet)。很多情况下,人们认为它是一种提高模型准确率的深奥方式,但是它的真实意义是更准确,在具体实例的帮助下变得易于理解。我还建议刚开始的时候,把 logistic 回归当作一个简单的神经网络,可视化(以 2D 实例为例)权重向量在学习过程中的移动轨迹。&/p&&p&我还建议本节应包括超参数网格搜索。网格搜索不在没有完整了解的情况下尝试不同的值,而是评估不同的超参数集的性能。因此,工程师可以将注意力集中在可达到最高准确率的组合上。当然还有更加强大的贝叶斯优化方法,即利用先验知识逼近未知目标函数的后验分布从而调节超参数的方法。&/p&&ul&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3D557c6978fa2cdf1afedbf7%26chksm%3D871b2a73b06cabb49feffaea1ac5aabaca34a%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从头开始:用Python实现带随机梯度下降的Logistic回归&i class=&icon-external&&&/i&&/a& &/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3D842cdf4afb9c1c6c8b0fa935b576ff41%26chksm%3D871b55bee87dcd09faef6b89088acfccd8aa10a404ad572e63ded%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何通过牛顿法解决Logistic回归问题&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3D5da6789719cdc3785cae%26chksm%3D871b29c5b06ca0d3e09f00691c0eff7f9c64fd9ef08266a78eedf19b8fc0d739%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&拟合目标函数后验分布的调参利器:贝叶斯优化&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&支持向量机(SVM)&/p&&p&支持向量机提供了不同的分类方法(包括线性和非线性方法)。该算法非常简单,具备基础几何知识的人也可以学会。不过,了解核支持向量机的工作原理非常有用,因为它会在线性方法失败的时候展示出其真正实力。&/p&&p&一些有用的免费资源:&/p&&ul&&li&《支持向量机简明教程》,Law 著&/li&&li&核函数方法,维基百科词条&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3Ddadc2ac166249dbb77ae87%26chksm%3D871b23f4b06caae2c1eaf4c2b81af316bb194d153d3bcb8fafb768bd04daba2efd95%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&详解支持向量机SVM:快速可靠的分类算法&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3D328ba8aadbc6%26chksm%3D871bf155faf0f1e6d6a62f9d014bcaa85f57abc9f0f9ff0ab0ac608b%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&详解支持向量机(附学习资源)&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&决策树&/p&&p&决策树提供了另一种分类和回归的方法。通常,它们不是解决复杂问题的首选,但它们提供了完全不同的方法,即使是非技术人员也可以很容易理解,该方法还可以在会议或演示中可视化。&/p&&ul&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D4%26sn%3Dcfafe08ac3ccddd%26chksm%3D871bad6279bccdaa9bca%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&教程 | 从头开始:用Python实现决策树算法&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D7d78fbddbd79cb864e12%26chksm%3D871b2fb1b06ca6a7dbc4f8f057f17e737d7dbc7d7ced78a2e12dcefcddscene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从决策树到随机森林:树型算法的原理与实现&i class=&icon-external&&&/i&&/a& &/li&&/ul&&p&集成学习一览&/p&&p&在理解了决策树的动态特性以后,研究集成训练树的集(集成)来提高整体准确率的方法很有用。随机森林、梯度树提升和 AdaBoost 都是强大的算法,且复杂度较低。对比简单的树和提升方法与 bagging 方法采用的树的学习过程挺有趣的。Scikit-Learn 提供了最常见的实现方法,但是如果你想更好地驾驭这些方法,我还是建议你在 XGBoost 上多花些时间,XGBoost 是一个既适用于 CPU 又适用于 GPU 的分布式框架,即使在较大的数据集上也能加速学习过程。&/p&&ul&&li&&a href=&/?target=http%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3Dde70c939d704f3fchksm%3D871b2a80b06ca396e3a71fdfdfef9e818ca337c6e1cd14b%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从Boosting到Stacking,概览集成学习的方法与性能&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&聚类&/p&&p&当开始聚类方法的学习时,我的建议是从高斯混合算法(基于期望最大化/EM)学起。虽然 K-均值聚类要更加简单易懂(也是必须要学习的),但是高斯混合算法为我们提供了纯粹的贝叶斯方法,在其他类似任务中也十分实用。其它必学的算法还有层次聚类(Hierarchical Clustering)、谱聚类(Spectral Clustering)和 DBSCAN。这对你了解基于实例的学习或研究 K-近邻算法(既适用于有监督又适用于无监督任务)也是有帮助的。谱聚类的一个有用的免费资源是:&/p&&ul&&li&《谱聚类教程》,Von Luxburg U 著&/li&&/ul&&p&聚类算法是无监督学习中的代表,机器之心也曾详细地介绍过各种聚类方法与实现:&/p&&ul&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3Ddb7b6f92466bdf146ac9bc%26chksm%3D871b1ea8b06c97beec50c7ac984bdab44bd11cfa411fab0e%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器理解大数据的秘密:聚类算法深度详解&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D4%26sn%3Dd7bdbffa22e553ad47f0233a%26chksm%3D871b2fc0b06ca6d6a3ff662ea3a7e5fcd35d989b90e%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&综述分类、聚类和信息提取算法在文本挖掘领域内的应用&i class=&icon-external&&&/i&&/a& &/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3D7df9c0cb6abddb724e7e589ad5d0ea96%26chksm%3D871b2c98b06ca58ec4bbe31c68edbff446%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何用Python和机器学习炒股赚钱?&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&神经网络入门&/p&&p&神经网络是深度学习的基础,你可以在单独的课程中学习神经网络。但是,我认为理解感知机、多层感知机以及反向传播算法的概念也很有帮助。Scikit-Learn 提供了一个实现神经网络的简单方法,但是,开始探索 Keras 也是一个好主意,Keras 是一个基于 Tensorflow、Theano 或 CNTK 的高级架构,允许使用最少的努力对神经网络进行建模和训练。开始神经网络学习的一些好资源:&/p&&ul&&li&《人工神经网络基础》Hassoun M 著&/li&&li&《Keras 深度学习》Gulli A.、 Pal S. 著&/li&&/ul&&p&目前最好的深度学习书籍可能就是:&/p&&ul&&li&《深度学习》,Goodfellow I.、 Bengio Y.、Courville A. 著&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D4b6fba618d2aead27306%26chksm%3D871b34f4b06cbde2e0af7a8ffbd35792dd3eaa719e94de67a581b906%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&最全的DNN概述论文:详解前馈、卷积和循环神经网络技术&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D1ac201e15b43339efab9%26chksm%3D871b2b51b06ca247ac1fdc939e39cfc44cbc2ee25e1b105cf9a582395ddbcdd43cfe18fecd40%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器之心GitHub项目:从零开始用TensorFlow搭建卷积神经网络&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3Dbd8bbf9ead95fd%26chksm%3D871b1e0ab06c971c0bf6accb6f9d108d42f01%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深度神经网络全面概述:从基本概念到实际模型和硬件基础&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D8f78edc716bbdf62a93298%26chksm%3D871b2f3bb06ca62d60632da0faebbee1934ebec300dc4bbace4b5e6f79daaeed%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&训练的神经网络不工作?一文带你跨过这37个坑&i class=&icon-external&&&/i&&/a& &/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3Da5e37e1d653bbcce3920%26chksm%3D871b2fc0b06ca6dc5ae3dfde3fd3bfdbb7b09fb9b%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TensorFlow从基础到实战:一步步教你创建交通标志分类神经网络&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3Dd427fbed31d%26chksm%3D871b0d88b06c849eed54e5febbbc04c48c034%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&神经网络快速入门:什么是多层感知器和反向传播?&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3D7c6db64c4b865b304a94e%26chksm%3D871b2ab3b06ca3a55d4dd6f3fddd6f93be392ffe1c2a5%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&教程 | 如何用30行JavaScript代码编写神经网络异或运算器&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D4%26sn%3D274c6be3b4%26chksm%3D871b2be7b06ca2f198d34f526b7dc5b50ee4ece24f820b52c86d183d42c2a469c3%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&神经网络调试手册:从数据集与神经网络说起&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3Deb2e1fe80f890e59bdefb7%26chksm%3D871b22feb06cabec52efdfb93ddf89f9b0b1a496a5e7a45b6%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&神经网络基础:七种网络单元,四种层连接方式&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D3%26sn%3Dbedfceccefe1%26chksm%3D871b1a93b06cc5ed362ebb8b4b6d321e9bc7132bd24cb%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何从信号分析角度理解卷积神经网络的复杂机制?&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3Dca1bfc37deae%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&神经网络架构演进史:全面回顾从LeNet5到ENet十余种架构(附论文)&i class=&icon-external&&&/i&&/a& &/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D9f5d969b3f9eac2aedc95%26chksm%3D871b18cdb06c91db52ace594dcfd8ff1dcd952dd8dcfaeb95415cb%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&麻省理工解读神经网络历史,三篇论文剖析基础理论&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&最后,我们将介绍部分机器之心曾发过的综述性技术文章或论文,并希望这些文章能对大家全面理解各种方法有所帮助:&/p&&ul&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3Dedd5cf01d2be07b435eb312%26chksm%3D871b19d5b06c90c366c2a873ca1156ae61cef284c52c6bbfbb8a0f%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&自动驾驶计算机视觉研究综述:难题、数据集与前沿成果&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3D6faa5fd55fc39dchksm%3D871b1ddfb06c94c9e11d3afce06a4e021fcd8eaab858c7f08ab9c939c4ad130e4b2%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一文帮你发现各种出色的GAN变体&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D9d1ba02a410e409echksm%3D871b15a8b06c9cbe00ac088a504de0bab859e4ebfbc43%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深度强化学习综述:从AlphaGo背后的力量到学习资源分享&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D3f013ab2f42624ebc9b85ba%26chksm%3D871b2bbcb06ca2aa5b43f9a7665597bbd2bee712dd5186%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从FPS到RTS,一文概述游戏人工智能中的深度学习算法&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D4%26sn%3Ded659a17aa2%26chksm%3D871b272cb06cae3a7e8fdbe1add87d65afcf2ed55f0eaec57aa7c9aa8%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&视觉问答全景概述:从数据集到技术方法&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3Dbb9e6eedba961cad5ef379e1%26chksm%3D871b2496b06cad80a12b178e7ca24eb2aa2f13bf2ec45%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&神经风格迁移研究概述:从当前研究到未来方向&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D1f2e64ae2baefd82fd6dcac86d2cc77e%26chksm%3D871b07fdc335b8f79f0c15ccad93d3c9a899c0b097%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从语言学到深度学习NLP,一文概述自然语言处理&i class=&icon-external&&&/i&&/a& &/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3D0d5e47e071c346eb4a485980deee5744%26chksm%3D871b1dbeb06c94a81b74afcde32d759bbd6cf53fbe2a9badaed44c5f05%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&迁移学习全面概述:从基本概念到相关研究&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D5%26sn%3D2c36cca9b5d26f52a0ccdeda1f848e8f%26chksm%3D871b2f98b06ca68e2a09d7e807b0dffcd0ebba0d39de4d3f1%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一文综述所有用于推荐系统的深度学习方法&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D7d68cc7a009dafd983ee9c63%26chksm%3D871b6eaf8236cdeb8a3e56ca72ad45a7c2c06cbddecf%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一文读懂遗传算法工作原理(附Python实现)&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&/?target=https%3A//mp./s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D1%26sn%3D784d7a9e7bc2f4c66d6a8%26chksm%3D871b1ba8b06c92be00d52e5fd891bad281f07baa381bee%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从自编码器到生成对抗网络:一文纵览无监督学习研究现状&i class=&icon-external&&&/i&&/a& &/li&&/ul&&p&&/p&&p&&/p&&p&&/p&
机器之心整理参与:机器之心编辑部机器学习日益广为人知,越来越多的计算机科学家和工程师投身其中。不幸的是,理论、算法、应用、论文、书籍、视频等信息如此之多,很容易让初学者迷失其中,不清楚如何才能提升技能。本文作者依据自身经验给出了一套快速上…
&p&题主的问题主要是两个方向,一是如何系统学习Python中跟数据分析&数据挖掘相关的库,二是对本科生从事数据挖掘行业的疑问。&/p&&h2&先来讲讲如何系统地学习Python中有关数据分析&挖掘相关的库&/h2&&p&什么是系统地学习?可能有人会觉得这是个伪命题,个人觉得,系统地学习就是一个&b&先搭知识框架体系&/b&,&b&然后不断填充知识,不断更新迭代&/b&的过程。类似于盖楼房,先做地基,再往上一层一层走。&/p&&p&既然要系统地学习Python中有关数据分析&挖掘相关的库,那么&b&pandas&/b&, &b&numpy&/b&, &b&scipy&/b&, &b&matplotlib&/b&, 以及&b&scikit-learn&/b&就是知识框架体系中的必备部分: pandas用来做&b&数据处理&/b&,numpy用来做&b&高维度矩阵运算&/b&,scipy用来做&b&科学计算&/b&,matplotlib用来做&b&数据可视化&/b&,scikit-learn用来做&b&机器学习与数据挖掘&/b&。&/p&&p&&b&上面这几个库也就搭建了做数据分析&挖掘的经典workflow&/b&:拿到数据之后先要做一个数据的&b&预处理&/b&(pandas+numpy+scipy),接着会要对数据包含的特征做一些&b&可视化输出&/b&(matplotlib),之后需要&b&提取特征&建模调参&/b&(numpy+scikit-learn),有了&b&模型与结果&/b&,最后&b&归纳整理&/b&做presentation & report.
&/p&&p&在明确了知识框架体系和workflow之后,&b&the next step is to&/b& &b&get your hands dirty&/b&。找一找网上的开源数据集,选一个感兴趣的,自己动手做数据分析&挖掘项目。用一种&b&project-driven&/b&的视角去熟悉使用Python关于数据方面的这几个库。在遇到问题的时候,网上搜一搜(知乎,谷歌,&a href=&///?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&StackOverflow&i class=&icon-external&&&/i&&/a&),或者直接看Python这几个库的documentation(&a href=&///?target=https%3A//pandas.pydata.org/pandas-docs/stable/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&pandas&i class=&icon-external&&&/i&&/a&, &a href=&///?target=https%3A//docs.scipy.org/doc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&numpy&scipy&i class=&icon-external&&&/i&&/a&, &a href=&///?target=https%3A//matplotlib.org/api/pyplot_summary.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&matplotlib&i class=&icon-external&&&/i&&/a&, &a href=&///?target=http%3A//scikit-learn.org/stable/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&scikit-learn&i class=&icon-external&&&/i&&/a&),或者翻一翻&a href=&///?target=https%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《利用Python做数据分析》&i class=&icon-external&&&/i&&/a&。&/p&&p&除了学习Python的这几个库之外&b&,做数据挖掘,对于数学&统计方面还是有很高的要求&/b&,至少对于线性代数,概率论与数理统计,机器学习都要有一定程度的掌握。比如:在做数据挖掘项目的时候,scikit-learn库里面已经涵盖了基本的算法。对于特征、模型与算法的选择,一方面是书本知识的累积,你要掌握解决哪一类问题用什么类型的算法,而在具体问题时如何调用算法,则是要反复实践的。&b&这就是不断填充知识 & 不断更新迭代,让自己从小白变成老司机。&/b&
&/p&&p&&b&简言之,学习数据挖掘,入门很容易,进门之后放弃,更容易。&/b&&/p&&p&&b&所以,多动手实践,多积累知识,重在平时,贵在坚持。&/b&&/p&&h2&再来尝试回答本科生能否从事数据挖掘?&/h2&&p&冷静思考现实:如果不是特别优秀的本科生,可能用人单位更倾向于去招一个学历更高的人。因为做数据挖掘是理论与实践相结合的过程,需要对算法进行深入的研究,更高学历的求职者,意味着他们在读取学位的过程中会有更多的时间与精力去做这累积。比如你是一家公司的老板,想要招聘一个数据挖掘岗位,可能你会更愿意跟拥有研究生学历的求职者先聊聊,普通的本科生可能会被打上&不靠谱&的标签。&/p&&p&&b&难道本科生就真的没有机会了么&/b&?&/p&&p&It depends. &b&学历只是相对,个人的努力与能力才决定了上限&/b&。多在读书的时候修一点相关课程,多积累一些个人项目,多参与一些数据挖掘比赛,这都是不断完善自己数据挖掘素养的过程。而且现在这样的平台也有很多,美国的kaggle算是数据科学社区的世界NO.1, 上面有很多用户分享了自己的成果,你也可以组队参加比赛。&/p&&p&&b&当然,国内也有很棒的平台社区 --- &a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Kesci&i class=&icon-external&&&/i&&/a&&/b&, Kesci是目前&b&国内唯一一个可以让你在线运行计算&/b&的数据科学平台,并将自己的成果在社区做分享交流。What's more,&b&这里也有众多互联网公司,电商平台,以及Fintech企业通过在Kesci举办数据算法比赛的方式为自己招募人才。是不是又多了一个思路?哈哈。&/b&&/p&&p&&b&学知识,做项目,打比赛,你的努力与坚持,会让你在数据挖掘的道路上有所斩获。&/b&&/p&
题主的问题主要是两个方向,一是如何系统学习Python中跟数据分析&数据挖掘相关的库,二是对本科生从事数据挖掘行业的疑问。先来讲讲如何系统地学习Python中有关数据分析&挖掘相关的库什么是系统地学习?可能有人会觉得这是个伪命题,个人觉得,系统地学习就…
&img src=&/50/v2-57d6db88bab63f92bcbfe_b.jpg& data-rawwidth=&1012& data-rawheight=&683& class=&origin_image zh-lightbox-thumb& width=&1012& data-original=&/50/v2-57d6db88bab63f92bcbfe_r.jpg&&&p&本文章选自与&a href=&/?target=http%3A//Github.io& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Github.io&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,作者:Sadanand Singh,由机器之心编译团队整理编译。&a href=&/?target=https%3A//sadanand-singh.github.io/posts/treebasedmodels/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&原文链接点这里即可跳转。&i class=&icon-external&&&/i&&/a&&/p&&blockquote&基于树(Tree based)的学习算法在数据科学竞赛中是相当常见的。这些算法给预测模型赋予了准确性、稳定性以及易解释性。和线性模型不同,它们对非线性关系也能进行很好的映射。常见的基于树的模型有:决策树(decision trees)、随机森林(random forest)和提升树(boosted trees)。 &/blockquote&&p&在本篇文章中,我们将会介绍决策树的数学细节(以及各种 Python 示例)及其优缺点。你们将会发现它们很简单,并且这些内容有助于理解。然而,与最好的监督学习方法相比,它们通常是没有竞争力的。为了克服决策树的各种缺点,我们将会聚焦于各种概念(附有 Python 实例),比如自助聚集或袋装(Bootstrap Aggregating or Bagging),还有随机森林(Random Forests)。另一种广泛使用的提升方法会在以后进行单独讨论。每种方法都包括生成多种树,这些树被联合起来,生成一个单一的一致性预测结果,并且经常带来预测精度的显著提升。&/p&&p&&br&&/p&&p&在本篇文章中,我们将会介绍决策树的数学细节(以及各种 Python 示例)及其优缺点。你们将会发现它们很简单,并且这些内容有助于理解。然而,与最好的监督学习方法相比,它们通常是没有竞争力的。为了克服决策树的各种缺点,我们将会聚焦于各种概念(附有 Python 实例),比如自助聚集或袋装(Bootstrap Aggregating or Bagging),还有随机森林(Random Forests)。另一种广泛使用的提升方法会在以后进行单独讨论。每种方法都包括生成多种树,这些树被联合起来,生成一个单一的一致性预测结果,并且经常带来预测精度的显著提升。&/p&&p&&br&&/p&&h2&&b&决策树&/b&&/h2&&p&决策树是一种监督学习算法。它适用于类别和连续输入(特征)和输出(预测)变量。基于树的方法把特征空间划分成一系列矩形,然后给每一个矩形安置一个简单的模型(像一个常数)。从概念上来讲,它们是简单且有效的。首先我们通过一个例子来理解决策树。然后用一种正规分析方法来分析创建决策树的过程。考虑一个简单的借贷公司顾客的数据集合。我们给定了所有客户的查询账户余额、信用记录、任职年限和先前贷款状况。相关任务是预测顾客的风险等级是否可信。该问题可以使用下列决策树来解决:&/p&&p&&br&&/p&&img src=&/v2-49257fda48fc0c62324ddb5_b.png& data-rawwidth=&640& data-rawheight=&312& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-49257fda48fc0c62324ddb5_r.png&&&p&&br&&/p&&p&分类和回归树(简称 CART)是 Leo Breiman 引入的术语,指用来解决分类或回归预测建模问题的决策树算法。它常使用 scikit 生成并实现决策树: sklearn.tree.DecisionTreeClassifier 和 sklearn.tree.DecisionTreeRegressor 分别构建分类和回归树。&/p&&p&&br&&/p&&p&&b&CART 模型&/b&&/p&&p&CART 模型包括选择输入变量和那些变量上的分割点,直到创建出适当的树。使用贪婪算法(greedy algorithm)选择使用哪个输入变量和分割点,以使成本函数(cost function)最小化。&/p&&p&树建造的结尾使用了一个预定义的停止准则,比如分配到树上每一个叶结点的训练样本达到最小数量。&/p&&p&&br&&/p&&p&其他决策树算法:&/p&&ul&&li&ID3:Iterative Dichotomiser 3&/li&&li&C4.5:ID3 算法的改进&/li&&li&CHAID:Chi-squared Automatic Interaction Detector&/li&&li&MARS:决策树的扩展式,以更好地解决数值型预测。&/li&&li&条件推断树&/li&&/ul&&p&&br&&/p&&p&&b&回归树&/b&&/p&&p&我们现在关注一下回归树的 CART 算法的细节。简要来说,创建一个决策树包含两步:&/p&&p&1. 把预测器空间,即一系列可能值 X_1,X_2,...,X_p 分成 J 个不同的且非重叠的区域 R_1,R_2,...,R_J。&/p&&p&2. 对进入区域 R_J 的每一个样本观测值都进行相同的预测,该预测就是 R_J 中训练样本预测值的均值。&/p&&p&&br&&/p&&p&为了创建 J 个区域 R_1,R_2,...,R_J,预测器区域被分为高维度的矩形或盒形。其目的在于通过下列式子找到能够使 RSS 最小化的盒形区域 R_1,R_2,...,R_J,&/p&&img src=&/v2-98e5ff2adb5f65631a92_b.png& data-rawwidth=&269& data-rawheight=&105& class=&content_image& width=&269&&&p&其中,yhat_Rj 即是第 j 个盒形中训练观测的平均预测值。&/p&&p&&br&&/p&&p&鉴于这种空间分割在计算上是不可行的,因此我们常使用贪婪方法(greedy approach)来划分区域,叫做递归二元分割(recursive binary splitting)。&/p&&p&&br&&/p&&p&它是贪婪的(greedy),这是因为在创建树过程中的每一步骤,最佳分割都会在每个特定步骤选定,而不是对未来进行预测,并选取一个将会在未来步骤中出现且有助于创建更好的树的分隔。注意所有的划分区域 R_j 都是矩形。为了进行递归二元分割,首先选取预测器 X_j 和切割点 s &/p&&p&&br&&/p&&img src=&/v2-5ce7cc83_b.png& data-rawwidth=&563& data-rawheight=&95& class=&origin_image zh-lightbox-thumb& width=&563& data-original=&/v2-5ce7cc83_r.png&&&p&其中 yhat_R1 为区域 R_1(j,s) 中观察样本的平均预测值,yhat_R2 为区域 R_2(j,s) 的观察样本预测均值。这一过程不断重复以搜寻最好的预测器和切分点,并进一步分隔数据以使每一个子区域内的 RSS 最小化。然而,我们不会分割整个预测器空间,我们只会分割一个或两个前面已经认定的区域。这一过程会一直持续,直到达到停止准则,例如我们可以设定停止准则为每一个区域最多包含 m 个观察样本。一旦我们创建了区域 R_1、R_2、...、R_J,给定一个测试样本,我们就可以用该区域所有训练样本的平均预测值来预测该测试样本的值。&/p&&p&&br&&/p&&p&&b&分类树&/b&&/p&&p&分类树和回归树十分相似,只不过它是定性地预测响应值而非定量预测。从上文可知,回归树对一个观察值所预测的连续型数值就是属于同一叶结点训练样本观察值的均值。但是对于分类树来说,我们所预测的类别是训练样本观察值在某区域下最常见的类别,即训练观察值的模式响应(mode response)。为了达到分类目的,很多时候系统并不会只预测一个类别,它常常预测一组类别及其出现的概率。&/p&&p&&br&&/p&&p&分类树的生成和回归树的生成十分相似。正如在回归树中那样,我们一般使用递归性的二元分割来生成分类树。然而在分类树中,RSS 不能作为二元分割的标准。我们需要定义叶结点的不纯度量 Q_m 来替代 RSS,即一种可以在子集区域 R_1,R_2,...,R_j 度量目标变量同质性的方法。在结点 m 中,我们可以通过 N_m 个样本观察值表示一个区域 R_m 所出现类别的频率,第 k 个类别在第 m 个区域下训练所出现的频率可表示为:&/p&&img src=&/v2-d74fc128ecef_b.png& data-rawwidth=&342& data-rawheight=&106& class=&content_image& width=&342&&&p&其中,I(y_i=k) 为指示函数,即如果 y_i = k,则取 1,否则取零。&/p&&p&&br&&/p&&p&不纯性度量 Q_m 一个比较自然的方法是分类误差率。分类误差率描述的是训练观察值在某个区域内不属于最常见类别的概率:&/p&&img src=&/v2-ed29c3a44bd1c49cf90bf_b.png& data-rawwidth=&234& data-rawheight=&60& class=&content_image& width=&234&&&p&考虑到该函数不可微,因此它不能实现数值优化。此外,该函数在结点概率改变上并不敏感,因此这种分类误差率对于生成树十分低效。我们一般使用 Gini 指数和交叉熵函数来衡量结点的误差度量。&/p&&p&&br&&/p&&p&Gini 指数可以衡量 k 个类别的总方差,它一般定义为:&/p&&img src=&/v2-049f650cbc26b70c7595c0_b.png& data-rawwidth=&296& data-rawheight=&107& class=&content_image& width=&296&&&p&较小的 Gini 指数值表示结点包含了某个类别大多数样本观察值。&/p&&p&&br&&/p&&p&在信息论里面,交叉熵函数用来衡量系统的混乱度。对于二元系统来说,如果系统包含了一个类别的所有内容,那么它的值为零,而如果两个类别的数量一样多,那么交叉熵达到最大为 1。因此,和 Gini 指数一样,交叉熵函数同样能用于度量结点的不纯度:&/p&&img src=&/v2-2f94b01e260e7f910b47af_b.png& data-rawwidth=&312& data-rawheight=&99& class=&content_image& width=&312&&&p&和 G 一样,较小的 S 值表示区域内结点包含了单个类别中的大多数观察值。&/p&&p&&br&&/p&&p&&b&决策树常见参数和概念&/b&&/p&&p&如果我们希望以数学的方式理解决策树,我们首先需要了解决策树和树型学习算法的一般概念。理解以下的术语同样能帮助我们调整模型。&/p&&p&&br&&/p&&ul&&li&根结点:表示所有数据样本并可以进一步划分为两个或多个子结点的父结点。&/li&&li&分裂(Splitting):将一个结点划分为两个或多个子结点的过程。&/li&&li&决策结点:当一个子结点可进一步分裂为多个子结点,那么该结点就称之为决策结点。&/li&&li&叶/终止结点:不会往下进一步分裂的结点,在分类树中代表类别。&/li&&li&分枝/子树:整棵决策树的一部分。&/li&&li&父结点和子结点:如果一个结点往下分裂,该结点称之为父结点而父结点所分裂出来的结点称之为子结点。&/li&&li&结点分裂的最小样本数:在结点分裂中所要求的最小样本数量(或观察值数量)。这种方法通常可以用来防止过拟合,较大的最小样本数可以防止模型对特定的样本学习过于具体的关系,该超参数应该需要使用验证集来调整。&/li&&li&叶结点最小样本数:叶结点所要求的最小样本数。和结点分裂的最小样本数一样,该超参数同样也可以用来控制过拟合。对于不平衡类别问题来说,我们应该取较小的值,因为属于较少类别的样本可能数量上非常少。&/li&&li&树的最大深度(垂直深度):该超参数同样可以用来控制过拟合问题,较小的深度可以防止模型对特定的样本学习过于具体的关系,该超参数同样需要在验证集中调整。&/li&&li&叶结点的最大数量:叶结点的最大个数可以替代数的最大深度这一设定。因为生成一棵深度为 n 的二叉树,它所能产生的最大叶结点个数为 2^n。&/li&&li&分裂所需要考虑的最大特征数:即当我们搜索更好分离方案时所需要考虑的特征数量,我们常用的方法是取可用特征总数的平方根为最大特征数。&/li&&/ul&&p&&br&&/p&&p&&b&分类树的实现&/b&&/p&&p&为了展示不同的前文所述的决策树模型,我们将使用 Kaggle 上的美国收入数据集,我们都可以在 &a href=&/?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 上下载该数据集。下面的代码可以展示该数据集的导入过程和部分内容:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import pandas as pdimport numpy as npfrom plotnine import *import matplotlib.pyplot as pltfrom sklearn.preprocessing import LabelEncoderfrom sklearn_pandas import DataFrameMapperfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import RandomForestClassifier
training_data = './adult-training.csv'test_data = './adult-test.csv'columns = ['Age','Workclass','fnlgwt','Education','EdNum','MaritalStatus','Occupation','Relationship','Race','Sex','CapitalGain','CapitalLoss','HoursPerWeek','Country','Income']
df_train_set = pd.read_csv(training_data, names=columns)
df_test_set = pd.read_csv(test_data, names=columns, skiprows=1)
df_train_set.drop('fnlgwt', axis=1, inplace=True)
df_test_set.drop('fnlgwt', axis=1, inplace=True)
&/code&&/pre&&/div&&p&在上面的代码中,我们首先需要导入所有需要的库和模块,然后再读取数据和结构到训练数据和验证数据中。我们同样去除 fnlgwt 列,因为该数据行对于模型的训练并不重要。&/p&&p&&br&&/p&&p&输入以下语句可以看到训练数据的前五行:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&df_train_set.head()
&/code&&/pre&&/div&&p&&br&&/p&&p&如下所示,我们还需要做一些数据清洗。我们需要将所有列的的特殊字符移除,此外任何空格或者「.」都需要移除。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#replace the special character to &Unknown&for i in df_train_set.columns:
df_train_set[i].replace(' ?', 'Unknown', inplace=True)
df_test_set[i].replace(' ?', 'Unknown', inplace=True)for col in df_train_set.columns:if df_train_set[col].dtype != 'int64':
df_train_set[col] = df_train_set[col].apply(lambda val: val.replace(& &, &&))
df_train_set[col] = df_train_set[col].apply(lambda val: val.replace(&.&, &&))
df_test_set[col] = df_test_set[col].apply(lambda val: val.replace(& &, &&))
df_test_set[col] = df_test_set[col].apply(lambda val: val.replace(&.&, &&))
&/code&&/pre&&/div&&p&&br&&/p&&p&正如上图所示,有两行描述了个人的教育:Eduction 和 EdNum。我们假设这两个特征十分相关,因此我们可以移除 Education 列。Country 列对预测收入并不会起到什么作用,所以我们需要移除它。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&df_train_set.drop([&Country&, &Education&], axis=1, inplace=True)
df_test_set.drop([&Country&, &Education&], axis=1, inplace=True)
&/code&&/pre&&/div&&p&&br&&/p&&p&Age 和 EdNum 列是数值型的,我们可以将连续数值型转化为更高效的方式,例如将年龄换为 10 年的整数倍,教育年限换为 5 年的整数倍,实现的代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&colnames = list(df_train_set.columns)
colnames.remove('Age')
colnames.remove('EdNum')
colnames = ['AgeGroup', 'Education'] + colnames
labels = [&{0}-{1}&.format(i, i + 9) for i in range(0, 100, 10)]
df_train_set['AgeGroup'] = pd.cut(df_train_set.Age, range(0, 101, 10), right=False, labels=labels)
df_test_set['AgeGroup'] = pd.cut(df_test_set.Age, range(0, 101, 10), right=False, labels=labels)
labels = [&{0}-{1}&.format(i, i + 4) for i in range(0, 20, 5)]
df_train_set['Education'] = pd.cut(df_train_set.EdNum, range(0, 21, 5), right=False, labels=labels)
df_test_set['Education'] = pd.cut(df_test_set.EdNum, range(0, 21, 5), right=False, labels=labels)
df_train_set = df_train_set[colnames]
df_test_set = df_test_set[colnames]
&/code&&/pre&&/div&&p&&br&&/p&&p&现在我们已经清理了数据,下面语句可以展示我们数据的概况:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&df_train_set.Income.value_counts()
Name: Income, dtype: int64
df_test_set.Income.value_counts()
Name: Income, dtype: int64
&/code&&/pre&&/div&&p&&br&&/p&&p&在训练集和测试集中,我们发现 &=50K 的类别要比&50K 的多 3 倍。从这里我们就可以看出来样本数据并不是均衡的数据,但是在这里为了简化问题,我们在这里将该数据集看作常规问题。&/p&&p&&br&&/p&&h2&&b&EDA&/b&&/h2&&p&现在,让我们以图像的形式看一下训练数据中的不同特征的分布和相互依存(inter-dependence)关系。首先看一下关系(Relationships)和婚姻状况(MaritalStatus)特征是如何相互关联的。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(ggplot(df_train_set, aes(x = &Relationship&, fill = &MaritalStatus&))+ geom_bar(position=&fill&)+ theme(axis_text_x = element_text(angle = 60, hjust = 1)))
&/code&&/pre&&/div&&img src=&/v2-6aafdeb8d7ae0f573c35e_b.png& data-rawwidth=&640& data-rawheight=&410& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-6aafdeb8d7ae0f573c35e_r.png&&&p&&br&&/p&&p&让我们首先看一下不同年龄组中,教育对收入的影响(用受教育的年数进行衡量)。&/p&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(ggplot(df_train_set, aes(x = &Education&, fill = &Income&))+ geom_bar(position=&fill&)+ theme(axis_text_x = element_text(angle = 60, hjust = 1))+ facet_wrap('~AgeGroup'))
&/code&&/pre&&/div&&p&&br&&/p&&img src=&/v2-26c04112c_b.png& data-rawwidth=&640& data-rawheight=&443& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-26c04112c_r.png&&&p&&br&&/p&&p&最近,有很多关于性别对收入差距的影响的相关说法。我们可以分别看见男性和女性的教育程度和种族间的影响。&/p&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(ggplot(df_train_set, aes(x = &Education&, fill = &Income&))+ geom_bar(position=&fill&)+ theme(axis_text_x = element_text(angle = -90, hjust = 1))+ facet_wrap('~Sex'))
&/code&&/pre&&/div&&p&&br&&/p&&img src=&/v2-6c9d78f4a0c74944bff5dfd_b.png& data-rawwidth=&640& data-rawheight=&442& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-6c9d78f4a0c74944bff5dfd_r.png&&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(ggplot(df_train_set, aes(x = &Race&, fill = &Income&))+ geom_bar(position=&fill&)+ theme(axis_text_x = element_text(angle = -90, hjust = 1))+ facet_wrap('~Sex'))
&/code&&/pre&&/div&&img src=&/v2-b02e4b51f2f_b.png& data-rawwidth=&640& data-rawheight=&525& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-b02e4b51f2f_r.png&&&p&&br&&/p&&p&直到现在,我们仅关注了非数值特征(non-numeric)的相互关系。现在我们看一下资本收益(CapitalGain)和资本损失(CapitalLoss)对收入的影响。&/p&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(ggplot(df_train_set, aes(x=&Income&, y=&CapitalGain&))+ geom_jitter(position=position_jitter(0.1)))
&/code&&/pre&&/div&&img src=&/v2-fd58eeccd7c_b.png& data-rawwidth=&592& data-rawheight=&433& class=&origin_image zh-lightbox-thumb& width=&592& data-original=&/v2-fd58eeccd7c_r.png&&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(ggplot(df_train_set, aes(x=&Income&, y=&CapitalLoss&))+ geom_jitter(position=position_jitter(0.1)))
&/code&&/pre&&/div&&p&&br&&/p&&img src=&/v2-0d8fe373b8fab6b9dcd1c_b.png& data-rawwidth=&577& data-rawheight=&433& class=&origin_image zh-lightbox-thumb& width=&577& data-original=&/v2-0d8fe373b8fab6b9dcd1c_r.png&&&p&&br&&/p&&h2&&b&树分类器&/b&&/h2&&p&现在我们理解了我们数据中的一些关系,所以就可以使用 sklearn.tree.DecisionTreeClassifier 创建一个简单的树分类器模型。然而,为了使用这一模型,我们需要把所有我们的非数值数据转化成数值型数据。我们可以直接在 Pandas 数据框架中使用sklearn.preprocessing.LabeEncoder 模块和 sklearn_pandas 模块就可以轻松地完成这一步骤。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&mapper = DataFrameMapper([('AgeGroup', LabelEncoder()),('Education', LabelEncoder()),('Workclass', LabelEncoder()),('MaritalStatus', LabelEncoder()),('Occupation', LabelEncoder()),('Relationship', LabelEncoder()),('Race', LabelEncoder()),('Sex', LabelEncoder()),('Income', LabelEncoder())], df_out=True, default=None)
cols = list(df_train_set.columns)
cols.remove(&Income&)
cols = cols[:-3] + [&Income&] + cols[-3:]
df_train = mapper.fit_transform(df_train_set.copy())
df_train.columns = cols
df_test = mapper.transform(df_test_set.copy())
df_test.columns = cols
cols.remove(&Income&)
x_train, y_train = df_train[cols].values, df_train[&Income&].values
x_test, y_test = df_test[cols].values, df_test[&Income&].values
&/code&&/pre&&/div&&p&&br&&/p&&p&现在我们用正确的形式对数据进行了训练和测试,已创建了我们的第一个模型!&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&treeClassifier = DecisionTreeClassifier()
treeClassifier.fit(x_train, y_train)
treeClassifier.score(x_test, y_test)
&/code&&/pre&&/div&&p&&br&&/p&&p&最简单的且没有优化的概率分类器模型可以达到 83.5% 的精度。在分类问题中,混淆矩阵(confusion matrix)是衡量模型精度的好方法。使用下列代码我们可以绘制任意基于树的模型的混淆矩阵。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import itertoolsfrom sklearn.metrics import confusion_matrixdef plot_confusion_matrix(cm, classes, normalize=False):&&&
This function prints and plots the confusion matrix.
Normalization can be applied by setting `normalize=True`.
cmap = plt.cm.Blues
title = &Confusion Matrix&if normalize:
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
cm = np.around(cm, decimals=3)
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)
thresh = cm.max() / 2.for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, cm[i, j],
horizontalalignment=&center&,
color=&white& if cm[i, j] & thresh else &black&)
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
&/code&&/pre&&/div&&p&&br&&/p&&p&现在,我们可以看到第一个模型的混淆矩阵:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&y_pred = treeClassifier.predict(x_test)
cfm = confusion_matrix(y_test, y_pred, labels=[0, 1])
plt.figure(figsize=(10,6))
plot_confusion_matrix(cfm, classes=[&&=50K&, &&50K&], normalize=True)
&/code&&/pre&&/div&&p&&br&&/p&&img src=&/v2-19bb93ce9ebd629c1093_b.png& data-rawwidth=&501& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&501& data-original=&/v2-19bb93ce9ebd629c1093_r.png&&&p&我们发现多数类别(&=50K)的精度为 90.5%,少数类别(&50K)的精度只有 60.8%。&/p&&p&&br&&/p&&p&让我们看一下调校此简单分类器的方法。我们能使用带有 5 折交叉验证的 GridSearchCV() 来调校树分类器的各种重要参数。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from sklearn.model_selection import GridSearchCV
parameters = {'max_features':(None, 9, 6),'max_depth':(None, 24, 16),'min_samples_split': (2, 4, 8),'min_samples_leaf': (16, 4, 12)}
clf = GridSearchCV(treeClassifier, parameters, cv=5, n_jobs=4)
clf.fit(x_train, y_train)
clf.best_score_, clf.score(x_test, y_test), clf.best_params_
{'max_depth': 16,
'max_features': 9,
'min_samples_leaf': 16,
'min_samples_split': 8})
&/code&&/pre&&/div&&p&&br&&/p&&p&经过优化,我们发现精度上升到了 85.9%。在上方,我们也可以看见最优模型的参数。现在,让我们看一下 已优化模型的混淆矩阵(confusion matrix):&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&y_pred = clf.predict(x_test)
cfm = confusion_matrix(y_test, y_pred, labels=[0, 1])
plt.figure(figsize=(10,6))
plot_confusion_matrix(cfm, classes=[&&=50K&, &&50K&], normalize=True)
&/code&&/pre&&/div&&p&&br&&/p&&img src=&/v2-7d4f2c1bae_b.png& data-rawwidth=&501& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&501& data-original=&/v2-7d4f2c1bae_r.png&&&p&&br&&/p&&p&经过优化,我们发现在两种类别下,预测精度都有所提升。&/p&&p&&br&&/p&&p&&b&决策树的局限性&/b&&/p&&p&决策树有很多优点,比如:&/p&&ul&&li&易于理解、易于解释&/li&&li&可视化&/li&&li&无需大量数据准备。不过要注意,sklearn.tree 模块不支持缺失值。&/li&&li&使用决策树(预测数据)的成本是训练决策时所用数据的对数量级。&br&&/li&&/ul&&p&但这些模型往往不直接使用,决策树一些常见的缺陷是:&/p&&ul&&li&构建的树过于复杂,无法很好地在数据上实现泛化。&/li&&li&数据的微小变动可能导致生成的树完全不同,因此决策树不够稳定。&/li&&li&决策树学习算法在实践中通常基于启发式算法,如贪婪算法,在每一个结点作出局部最优决策。此类算法无法确保返回全局最优决策树。&/li&&li&如果某些类别占据主导地位,则决策树学习器构建的决策树会有偏差。因此推荐做法是在数据集与决策树拟合之前先使数据集保持均衡。&/li&&li&某些类别的函数很难使用决策树模型来建模,如 XOR、奇偶校验函数(parity)和数据选择器函数(multiplexer)。&/li&&/ul&&p&大部分限制可以通过改善决策树轻易解决。在下面的内容中,我们将介绍相关的几个概念,重点介绍袋装和随机森林。&/p&&p&&br&&/p&&p&&b&剪枝&/b&&/p&&p&由于决策树容易对数据产生过拟合,因此分支更少(即减少区域 R_1, … ,R_J)的小树虽然偏差略微高一点,但其产生的方差更低,可解释性更强。处理上述问题的一种方法是构建一棵树,每个分支超过某个(高)阈值造成叶结点误差率 Qm 下降,则结束构建。但是,由于分裂算法的贪婪本质,它其实很短视。决策树早期看似无用的一次分裂有可能会导致之后一次优秀的分裂,并使得 Qm 大幅下降。&/p&&p&因此,更好的策略是构建一个非常大的树 T_0,然后再剪枝,得到一棵子树。剪枝可以使用多种策略。代价复杂度剪枝(Cost complexity pruning),又叫最弱连接剪枝(weakest link pruning),就是其中一种行之有效的策略。除了考虑每一个可能的子树之外,还需要考虑由非负调参(nonnegative tuning parameter)α 索引的树序列。每一个 α 值都对应一个尽可能小的子树 T?T_0。&/p&&img src=&/v2-6de2c02f3af828d0616f_b.png& data-rawwidth=&388& data-rawheight=&116& class=&content_image& width=&388&&&p&这里∣T∣代表树 T 中叶结点的数量,R_m 代表第 m 个叶结点对应的矩形(预测器空间的子集),yhat_Rm 是 Rm 的预测值,即 Rm 中训练样本预测值的均值(或分类树中的模式响应)。调整参数 α 控制子树复杂度之间的权衡,对训练数据进行拟合。当 α= 0 的时候,子树 T 等同于 T_0。当α的值增长时,构建具备多个子结点的树需要付出代价,这样,要想得到更小的子树,上述公式将达到最小化。我们可以使用某种交叉验证方法选择剪枝参数 α 。&/p&&p&&br&&/p&&p&注意,目前 sklearn.tree 决策树分类器(和回归器)不支持剪枝。&/p&&p&&br&&/p&&h2&&b&袋装(Bootstrap Aggregating——Bagging)&/b&&/h2&&p&&br&&/p&&p&在统计学中,Bootstrap 是依靠替换随机采样的任意试验或度量。我们从上文可以看见,决策树会受到高方差的困扰。这意味着如果我们把训练数据随机分成两部分,并且给二者都安置一个决策树,我们得到的结果可能就会相当不同。Bootstrap 聚集,或者叫做袋装,是减少统计学习方法的方差的通用过程。&/p&&p&&br&&/p&&p&给定一组 n 个独立的样本观测值 Z_1,Z_2,...,Z_n,每一个值的方差均为 *σ^*2,样本观测值的均值方差为 *σ^*2/*n*。换句话说,对一组观测值取平均会减小方差。因此一种减小方差的自然方式,也就是增加统计学习方法预测精度的方式,就是从总体中取出很多训练集,使用每一个训练集创建一个分离的预测模型,并且对预测结果求取平均值。&/p&&p&&br&&/p&&p&这里有一个问题,即我们不能获取多个训练数据集。相反,我们可以通过从(单一)训练数据集提取重复样本进行自助法(bootstrap)操作。在这种方法中,我们生成了 B 个不同的自助训练数据集。我们随后在第 b 个自助训练数据集得到了一个预测结果&/p&&p&,从而获得一个聚集预测(aggregate prediction)。&/p&&p&&br&&/p&&img src=&/v2-6964cca0d33e595bfde829ea1f4a9b95_b.png& data-rawwidth=&640& data-rawheight=&170& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-6964cca0d33e595bfde829ea1f4a9b95_r.png&&&p&&br&&/p&&p&这就叫做袋装(bagging)。注意,聚集(aggregating)在回归和分类问题中可能有不同的均值。当平均预测值在回归问题中的效果很好时,我们将会需要使用多数票决(majority vote):由于分类问题中的聚集机制,整体预测就是在 B 个预测值中最常出现的那个主要类别。&/p&&p&&br&&/p&&p&&b&Out-of-Bag(OOB)误差&/b&&/p&&p&Bagging 方法最大的优势是我们可以不通过交叉验证而求得测试误差。回想一下,Bagging 方法的精髓是多棵树可以重复地拟合观察样本的自助子集。平均而言,每一个袋装树可以利用 2/3 的观察样本。而剩下的 1/3 观察样本就可以称为 out-of-bag (OOB) 观察样本,它们并不会拟合一一棵给定袋装树。我们可以使用每一棵树的 OOB 观察样本而计算第 i 个观察样本的预测值,这将会导致大约有 B/3 的预测值可以预测第 i 个观察样本。现在我们可以使用和 Bagging(平均回归和大多数投票分类)类似的聚集技术,我们能获得第 i 个观察样本的单一预测值。我们可以用这种方式获得 n 个观察样本的 OOB 预测,因此总体的 OOB MSE(回归问题)和分类误差率(分类问题)就能计算出来。OOB 误差结果是 Bagging 模型测试误差的有效估计,因为每一个样本的预测值都是仅仅使用不会进行拟合训练模型的样本。&/p&&p&&br&&/p&&p&&b&特征重要性度量&/b&&/p&&p&通过使用单一树,Bagging 通常会提升预测的精确度。但是,解释最终的模型可能很困难。当我们袋装大量的树时,就不再可能使用单一的树表征最终的统计学习流程,因此,Bagging 是以牺牲阐释性能力为代价来提升预测精确度的。有趣的是,一个人可使用 RSS(用于 bagging 回归树)或者基尼指数(用于 bagging 分类树)得到每一个预测器的整体总结。在 bagging 回归树的情况中,我们可以记录由于所有的 B 树上平均的给定预测分子分裂而造成的 RSS 减少的所有数量。一个大的值表示一个重要的预测器。相似地,在 bagging 分类树的情况下,我们可以添加由于所有的 B 树上平均的给定预测分子分裂而造成的基尼系数降低的所有数量。一旦训练完成,sklearn 模块的不同袋装树(bagged tree)学习方法可直接访问特征的重要性数据作为属性。&/p&&p&&br&&/p&&h2&&b&随机森林模型&/b&&/h2&&p&虽然袋装技术(Bagging)通过降低方差而提高了一般决策树的预测性能,但它还遇到了其他缺点:Bagging 要求我们在自助样本上生成整棵树,这就增加了 B 倍计算复杂度。此外,因为基于 Bagging 的树是相关联的,预测精度会根据 B 而饱和。&/p&&p&&br&&/p&&p&随机森林通过随机扰动而令所有的树去相关,因此随机森林要比 Bagging 性能更好。随机森林不像 Bagging,在构建每一棵树时,每一个结点分割前都是采用随机样本预测器。因为在核心思想上,随机森林还是和 Bagging 树一样,因此其在方差上有所减少。此外,随机森林可以考虑使用大量预测器,不仅因为这种方法减少了偏差,同时局部特征预测器在树型结构中充当重要的决策。&/p&&p&&br&&/p&&p&随机森林可以使用巨量的预测器,甚至预测器的数量比观察样本的数量还多。采用随机森林方法最显著的优势是它能获得更多的信息以减少拟合数值和估计分割的偏差。&/p&&p&&br&&/p&&p&通常我们会有一些预测器能主导决策树的拟合过程,因为它们的平均性能始终要比其他一些竞争预测器更好。因此,其它许多对局部数据特征有用的预测器并不会选定作为分割变量。随着随机森林计算了足够多的决策树模型,每一个预测器都至少有几次机会能成为定义分割的预测器。大多数情况下,我们不仅仅只有主导预测器,特征预测器也有机会定义数据集的分割。&/p&&p&&br&&/p&&p&随机森林有三个主要的超参数调整:&/p&&ul&&li&结点规模:随机森林不像决策树,每一棵树叶结点所包含的观察样本数量可能十分少。该超参数的目标是生成树的时候尽可能保持小偏差。&/li&&li&树的数量:在实践中选择数百棵树一般是比较好的选择。&/li&&li&预测器采样的数量:一般来说,如果我们一共有 D 个预测器,那么我们可以在回归任务中使用 D/3 个预测器数作为采样数,在分类任务中使用 D^(1/2) 个预测器作为抽样。 &br&&/li&&/ul&&p&&b&随机森林模型案例&/b&&/p&&p&使用和上文一样的收入数据,现在我们构建一个包含 500 棵树的简单随机森林分类器模型:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&rclf = RandomForestClassifier(n_estimators=500)
rclf.fit(x_train, y_train)
rclf.score(x_test, y_test)
&/code&&/pre&&/div&&p&&br&&/p&&p&即使没有任何优化,我们仍然发现模型性能可以和已优化决策树分类器相媲美,并且测试分达到了 85.1%。按照下面的混淆矩阵,我们发现简单的随机森林和经过优化的树型分类器表现差不多,其在主要类别(&=50K 收入)的预测精度达到了 92.1%,而在少数类别(&50K 收入)上达到了 62.6%。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&rclf = RandomForestClassifier(n_estimators=500)
rclf.fit(x_train, y_train)
rclf.score(x_test, y_test)
&/code&&/pre&&/div&&p&&br&&/p&&img src=&/v2-bcd7fe5ab73dbcb0204eabc_b.png& data-rawwidth=&501& data-rawheight=&438& class=&origin_image zh-lightbox-thumb& width=&501& data-original=&/v2-bcd7fe5ab73dbcb0204eabc_r.png&&&p&&br&&/p&&p&正如前面所探讨的,随机森林模型还提供了特征重要性的度量方法。我}

我要回帖

更多关于 信长之野望15 的文章

更多推荐

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

点击添加站长微信