机器学习学习路线weihuchao

机器学习研究的是计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构使之不断改善自身。

简单一点说,就是计算机从数据中学习出规律和模式,以应用在新数据上做预测的任务。

从功能的角度分类,机器学习在一定量级的数据上,可以解决下列问题:

1)分类问题

根据数据样本上抽取出的特征,判定其属于有限个类别中的哪一个。

比如:垃圾邮件识别(结果类别:1垃圾邮件2正常邮件

文本情感褒贬分析(结果类别:1褒2贬

图像内容识别识别(结果类别:1喵星人2汪星人3人类4草泥马5都不是

2)回归问题

根据数据样本上抽取出的特征,预测一个连续值的结果。

比如:

星爷《美人鱼》票房

大帝都2个月后的房价

隔壁熊孩子一天来你家几次,宠幸你多少玩具

3)聚类等问题

比如:google的新闻分类

用户群体划分

从是否使用标签处理数据可以分为:

1)监督学习

分类与回归问题需要用已知结果的数据做训练

2)无监督学习

聚类的问题不需要已知标签

1)计算机视觉

典型的应用包括:人脸识别、车牌识别、扫描文字识别、图片内容识别、图片搜索等等。

2)自然语言处理

典型的应用包括:搜索引擎智能匹配、文本内容理解、文本情绪判断,语音识别、输入法、机器翻译等等。

3)社会网络分析

典型的应用包括:用户画像、网络关联分析、欺诈作弊发现、热点发现等等。

4)推荐

机器学习是一个将数学/算法理论和工程实践紧密结合的领域

需要扎实的理论基础帮助引导数据分析与模型调优

同时也需要精湛的工程开发能力去高效化地训练和部署模型和服务

每一个算法,要在训练集上最大程度拟合同时又保证泛化能力,需要不断分析结果和数据,调优参数,这需要我们对数据分布和模型底层的数学原理有一定的理解

1)微积分

微分的计算及其几何、物理含义,是机器学习中大多数算法的求解过程的核心。比如算法中运用到梯度下降法、牛顿法等

如果对其几何意义有充分的理解,就能理解“梯度下降是用平面来逼近局部,牛顿法是用曲面逼近局部”,能够更好地理解运用这样的方法。

2)线性代数

大多数机器学习的算法要应用起来,依赖于高效的计算,通过转化成矩阵之间的乘法运算,这就和线性代数有莫大的关系了\

向量的内积运算更是随处可见。

矩阵乘法与分解在机器学习的主成分分析(PCA)和奇异值分解(SVD)等部分呈现刷屏状地出现。

3)概率论

从广义来说,机器学习在做的很多事情,和统计层面数据分析和发掘隐藏的模式,是非常类似的。

极大似然思想、贝叶斯模型是理论基础,朴素贝叶斯(NaveBayes)、语言模型(N-gram)、隐马尔科夫(HMM)、隐变量混合概率模型是他们的高级形态

常见分布如高斯分布是混合高斯模型(GMM)等的基础。

绝大多数问题用典型机器学习的算法都能解决,粗略地列举一下这些方法如下

处理分类问题的常用算法包括:逻辑回归(工业界最常用),支持向量机,随机森林,朴素贝叶斯(NLP中常用),深度神经网络(视频、图片、语音等多媒体数据中使用)。

处理回归问题的常用算法包括:线性回归,普通最小二乘回归(OrdinaryLeastSquaresRegression),逐步回归(StepwiseRegression),多元自适应回归样条(MultivariateAdaptiveRegressionSplines)

处理聚类问题的常用算法包括:K均值(K-means),基于密度聚类,LDA等等。

降维的常用算法包括:主成分分析(PCA),奇异值分解(SVD)等。

推荐系统的常用算法:协同过滤算法

模型融合(modelensemble)和提升(boosting)的算法包括:bagging,adaboost,GBDT,GBRT

其他很重要的算法包括:EM算法等等。

Python和R语言是常用的机器学习的语言

1)python

python有着全品类的数据科学工具,从数据获取、数据清洗到整合各种算法都做得非常全面。

网页爬虫:

scrapy

数据挖掘:

pandas:模拟R,进行数据浏览与预处理

numpy:数组运算

scipy:高效的科学计算

matplotlib:非常方便的数据可视化工具

机器学习:

scikit-learn:几乎所有的机器学习算法输入输出部分格式都一致,对于不是非常高纬度、高量级的数据,scikit-learn胜任得非常好

libsvm:高效率的svm模型实现(了解一下很有好处,libsvm的系数数据输入格式,在各处都非常常见)

keras/TensorFlow:对深度学习感兴趣的同学,也能很方便地搭建自己的神经网络了

自然语言处理:

交互式环境:ipythonnotebook:能直接打通数据到结果的通道,方便至极。强力推荐

2)R

R最大的优势是开源社区,聚集了非常多功能强大可直接使用的包

常见的package包括:RGtk2,pmml,colorspace,ada,amap,arules,biclust,cba,descr,doBy,e1071,ellipse

R的可视化效果做得非常不错,而这对于机器学习是非常有帮助的。

3)Java

WEKAMachineLearningWorkbench相当于java中的scikit-learn

其他的工具如MassiveOnlineAnalysis(MOA)、MEKA、Mallet等也非常有名

4)C++

mlpack,高效同时可扩充性非常好的机器学习库。

Shark:文档齐全的老牌C++机器学习库。

Spark:提供了MLlib这样的大数据机器学习平台,实现了很多常用算法。但可靠性、稳定性上有待提高

6)操作系统

mac和Linux会方便一些,mac和linux在下载安装软件、配置环境更快

在Windows系统上,推荐anaconda,一步到位安装完python的全品类数据科学工具包。

以上我们基本具备了机器学习的必要条件,剩下的就是怎么运用它们去做一个完整的机器学习项目。其工作流程如下:

1)抽象成数学问题

明确我们可以获得什么样的数据,目标是一个分类还是回归或者是聚类的问题,如果都不是的话,如果划归为其中的某类问题。

2)获取数据

数据决定了机器学习结果的上限,而算法只是尽可能逼近这个上限。

数据要有代表性,否则必然会过拟合。

而且对于分类问题,数据偏斜不能过于严重,不同类别的数据数量不要有数个数量级的差距

而且还要对数据的量级有一个评估,多少个样本,多少个特征,可以估算出其对内存的消耗程度,判断训练过程中内存是否能够放得下。

如果放不下就得考虑改进算法或者使用一些降维的技巧了。如果数据量实在太大,那就要考虑分布式了。

3)特征预处理和特征选择

良好的数据要能够提取出良好的特征才能真正发挥效力。

特征预处理、数据清洗是很关键的步骤,往往能够使得算法的效果和性能得到显著提高。

筛选出显著特征、摒弃非显著特征,需要机器学习工程师反复理解业务。

4)训练模型并调优

真正考验水平的是调整这些算法的(超)参数,使得结果变得更加优良。

这需要我们对算法的原理有深入的理解。理解越深入,就越能发现问题的症结,提出良好的调优方案。

5)模型诊断

如何确定模型调优的方向与思路呢?这就需要对模型进行诊断的技术。

过拟合、欠拟合判断是模型诊断中至关重要的一步。常见的方法如交叉验证,绘制学习曲线等。

过拟合的基本调优思路是增加数据量,降低模型复杂度。欠拟合的基本调优思路是提高特征数量和质量,增加模型复杂度。

误差分析也是机器学习至关重要的步骤。通过观察误差样本,全面分析误差产生误差的原因:是参数的问题还是算法选择的问题,是特征的问题还是数据本身的问题

诊断后的模型需要进行调优,调优后的新模型需要重新进行诊断,这是一个反复迭代不断逼近的过程,需要不断地尝试,进而达到最优状态。

6)模型融合

一般来说,模型融合后都能使得效果有一定提升。而且效果很好。

工程上,主要提升算法准确度的方法是分别在模型的前端(特征清洗和预处理,不同的采样模式)与后端(模型融合)上下功夫。

因为他们比较标准可复制,效果比较稳定。而直接调参的工作不会很多,毕竟大量数据训练起来太慢了,而且效果难以保证。

7)上线运行

这些工作流程主要是工程实践上总结出的一些经验。并不是每个项目都包含完整的一个流程。这里的部分只是一个指导性的说明,只有大家自己多实践,多积累项目经验,才会有自己更深刻的认识。

在学习机器学习当中,需要持有一个观点:脱离业务和数据的算法讨论是毫无意义的

先完整地走完机器学习的整个工作流程,不断尝试各种算法深挖这些数据的价值,在运用过程中把数据、特征和算法搞透,真正积累出项目经验才是最快、最靠谱的学习路径。

那如何获取数据和项目呢?一个捷径就是积极参加国内外各种数据挖掘竞赛,数据直接下载下来,按照竞赛的要求去不断优化,积累经验。

国外的Kaggle和国内的DataCastle以及阿里天池比赛都是很好的平台

自主学习的能力对于任何一种新知识和技能的学习来说都是至关重要的。自主学习能力提升后,意味着你能够跟据自己的情况,找到最合适的学习资料和最快学习成长路径。

1)信息检索并过滤和整合

一般绝大多数信息都能够在网络上找到

google搜索引擎技巧:组合替换搜索关键词、站内搜索、学术文献搜索、PDF搜索等

一个比较好的习惯是找到信息的原始出处,如个人站、公众号、博客、专业网站、书籍等等。这样就能够找到系统化、不失真的高质量信息

百度搜到的技术类信息不够好,建议只作为补充搜索来用。各种搜索引擎都可以交叉着使用效果更好

将搜集到的网页放到分类齐全的云端收藏夹里,并经常整理。这样无论在公司还是在家里,在电脑前还是在手机上,都能够找到自己喜欢的东西。

搜集到的文件、代码、电子书等等也放到云端网盘里,并经常整理

2)提炼和总结

经常作笔记,并总结自己学到的知识是成长的不二法门。发现知识的共性,就能少记一些东西,掌握得更多。

3)提问和求助

为了让回答者最快明白你的问题,最好该学会正确的问问题的方式:陈述清楚你的业务场景和业务需求是什么,有什么已知条件,在哪个具体的节点上遇到困难了,并做过哪些努力。

证明自己真的透彻理解一个知识,最好的方法,是给一个想了解这个内容的人,讲清楚这个内容

首先coursera是一个非常好的学习网站,集中了全球的精品课程。

Calculus:SingleVariableMultivariableCalculus线性代数

LinearAlgebra概率统计

IntroductiontoStatistics:DescriptiveStatisticsProbabilisticSystemsAnalysisandAppliedProbability编程语言

ProgrammingforEverybody:PythonDataCamp:LearnRwithRtutorialsandcodingchallenges:R机器学习方法

StatisticalLearning(R)machinelearning:强烈推荐,AndrewNg老师的课程机器学习基石

机器学习技术:林轩田老师的课相对更有深度一些,把作业做完会对提升对机器学习的认识。自然语言处理:斯坦福大学课程日常阅读的资源@爱可可-爱生活的微博机器学习日报的邮件订阅等。4.2进阶资源有源代码的教程

scikit-learn中各个算法的例子《机器学习实战》有中文版,并附有python源代码。《TheElementsofStatisticalLearning(豆瓣)》这本书有对应的中文版:《统计学习基础(豆瓣)》。书中配有R包。可以参照着代码学习算法。网盘中有中文版。《NaturalLanguageProcessingwithPython(豆瓣)》NLP经典,其实主要是讲python的NLTK这个包。网盘中有中文版。《NeuralNetworksandDeepLearning》MichaelNielsen的神经网络教材,浅显易懂。国内有部分翻译,不全,建议直接看原版。图书与教材

《数学之美》:入门读起来很不错。《统计学习方法(豆瓣)》:李航经典教材。《PatternRecognitionAndMachineLearning(豆瓣)》:经典中教材。《统计自然语言处理》自然语言处理经典教材《Appliedpredictivemodeling》:英文版,注重工程实践的机器学习教材《UFLDL教程》:神经网络经典教材《deeplearningbook》:深度学习经典教材。工具书

《SciPyandNumPy(豆瓣)》《PythonforDataAnalysis(豆瓣)》作者是Pandas这个包的作者

THE END
1.BAT算法工程师的成长之路,超详细的学习路线算法工程师的成长路径写文章以来,被问到最多的问题就是「算法的学习路线」。 今天,它来了。 我会带着大家看看,我们需要学些啥,利用这个假期,我甚至还收集整理了配套视频和资料,暖男石锤啊,这期文章有用的话,别忘三连哦! 二、学习路线 主要分为 4 个部分:数学基础、编程能力、算法基础、实战。 https://blog.csdn.net/c406495762/article/details/108976931
2.人工智能学习指南选择一门强大的编程语言作为工具是至关重要的。在Python中,它被广泛认为是最适合初学者的原因之一,因为它易于上手,并且有大量库支持各种复杂任务,包括机器学习和深度学习。这意味着你可以更快地进行实验和测试,从而加速你的学习过程。 机器学习 介绍 当你对基础算法有了充分掌握后,可以逐步迈向更高级别的人工智能领域https://www.fmovhaqkz.com/xing-ye-zi-xun/530954.html
3.从入门到深造人工智能学习路径指南在人工智能领域,扎实的数学理论和计算机科学知识是不可或缺的。对于想学人工智能的人来说,首先应该掌握线性代数、概率论、统计学以及计算机编程等基础课程。这不仅能够为后续学习提供坚实的数学工具,也有助于理解更高级别的人工智能算法。 编程语言与数据结构 https://www.jvahvb5c.cn/shou-ji/527192.html
4.干货浅谈强化学习的方法及学习路线腾讯云开发者社区目前,有关强化学习的研究正在快速增长,人们为不同的应用程序生成各种各样的学习算法。因此,熟悉强化学习的技术就变得尤其重要了。如果你还不是很熟悉强化学习,那么我建议你可以去看看我以前有关强化学习文章和一些开源的强化学习平台。 一旦你已经掌握和理解了强化学习的基础知识,那么请继续阅读这篇文章。读完本文之后,https://cloud.tencent.com/developer/article/1084511
5.适合普通大学生的前端学习路线当然,如果你想更加系统着学习算法,可以看我之前写的算法学习路线: 谈一谈算法学习之路 另外就是强烈推荐这份 GitHub 80+K 的刷题笔记: 两个月斩获 70k star,前字节大神刷题笔记 四、计算机网络 无论是前端开发还是后端开发,说到底都是数据通过网络在多台主机之间的交互,而且对于前端,计算机网络的知识,用的可能https://www.51cto.com/article/674444.html
6.C/C++服务器开发/架构师学习面试总结经验整理学历、院校固然重要,但互联网大多公司更看重个人实力。当你权衡好自我学习和笔经面经的tradeoff后,Offer掐指可算。 学习路线 基础 数据结构与算法 设计模式 C++新特性 Linux工程管理 高性能网络 网络编程 网络原理 协程框架 用户态协议栈 基础组件 池式组件(线程池、内存池等) https://maimai.cn/article/detail?fid=1671908038&efid=UjVl5vs6LpWX_y_6UQ9i0g
7.人工智能学习路线(学+测)人工智能学习路线,算法原理、框架精讲、机器学习实战、图像识别实战、自然语言处理实战,人工智能技术一站式学习https://developer.aliyun.com/learning/roadmap/ai
8.程序员还不知道简历怎么写?教你如何写简历!简历写得好,offer不会一定要学会分配自己时间,要学的东西很多,真的很多,搞清楚哪些东西是重点,哪些东西仅仅了解就够了。一定不要把精力都花在了学各种框架上,算法、数据结构还有计算机网络真的很重要! (三). Java学习路线和方法推荐 下面的学习路线以及方法是笔主根据个人学习经历总结改进后得出,我相信照着这条学习路线来你的学习效率会https://www.jianshu.com/p/1f6eb45c47db
9.年薪50万!北航合肥创新研究院招募研究员!澎湃号·政务岗位名称:深度学习算法高级工程师 需求人数:1人 岗位职责: 1、负责设计深度学习算法总体技术路线; 2、负责基于卫星影像、SAR图像、视频、图片等要素识别的算法研究及实现; 3、能够独立完成深度学习算法模型的研究与开发; 4、协助深度学习算法在分布式和嵌入式平台部署与实现。 https://www.thepaper.cn/newsDetail_forward_4985535
10.科学网—[转载]强化学习在资源优化领域的应用基于这种行业趋势,本文针对强化学习算法在资源优化领域的应用展开调研,帮助读者了解该领域最新的进展,学习如何利用数据驱动的方式解决资源优化问题。鉴于资源优化问题场景众多、设定繁杂,划分出3类应用广泛的资源优化问题,即资源平衡问题、资源分配问题、装箱问题,集中进行调研。在每个领域阐述问题的特性,并根据具体的问题特性https://blog.sciencenet.cn/blog-3472670-1312677.html
11.史上最强Java学习路线图(6大必学阶段)–mikechenJava学习路线的第一阶段,我认为需要打好坚实的基础。 1.编程基础 常量与变量 数据类型 运算符 流程控制语句 方法 数组 2.面向对象 继承 多态 重写(Override) 重载(Overload) 封装 接口 java包 package 3.泛型(Generic ) 泛型的使用场景 泛型类型 泛型方法 https://youzhixueyuan.com/java-programmers-learn-route.html