机器学习入门方法

机器学习看似学习难度大,曲线陡,但对大多数入门者也有一个比较通用的学习路径,也有一些优秀的入门资料可以降低大家的学习门槛,同时激发我们的学习乐趣。

简单说来,大概的一个学习路径如下:

路径图


路径图
简单说一点,之所以最左边写了『数学基础』『典型机器学习算法』『编程基础』三个并行的部分,是因为机器学习是一个将数学/算法理论和工程实践紧密结合的领域,需要扎实的理论基础帮助引导数据分析与模型调优,同时也需要精湛的工程开发能力去高效化地训练和部署模型和服务。

需要多说一句的是,在互联网领域从事机器学习的人,有2类背景的人比较多,其中一部分(很大一部分)是程序员出身,这类同学工程经验相对会多一些,另一部分是学数学统计领域的同学,这部分同学理论基础相对扎实一些。因此对比上图,2类同学入门机器学习,所欠缺和需要加强的部分是不一样的。

下面就上述图中的部分,展开来分别扯几句:
1.1 数学基础

有无数激情满满大步向前,誓要在机器学习领域有一番作为的同学,在看到公式的一刻突然就觉得自己狗带了。是啊,机器学习之所以相对于其他开发工作,更有门槛的根本原因就是数学。每一个算法,要在训练集上最大程度拟合同时又保证泛化能力,需要不断分析结果和数据,调优参数,这需要我们对数据分布和模型底层的数学原理有一定的理解。所幸的是如果只是想合理应用机器学习,而不是做相关方向高精尖的research,需要的数学知识啃一啃还是基本能理解下来的。至于更高深的部分,恩,博主非常愿意承认自己是『数学渣』。

基本所有常见机器学习算法需要的数学基础,都集中在微积分、线性代数和概率与统计当中。下面我们先过一过知识重点,文章的后部分会介绍一些帮助学习和巩固这些知识的资料。
1.1.1 微积分

微分的计算及其几何、物理含义,是机器学习中大多数算法的求解过程的核心。比如算法中运用到梯度下降法、牛顿法等。如果对其几何意义有充分的理解,就能理解“梯度下降是用平面来逼近局部,牛顿法是用曲面逼近局部”,能够更好地理解运用这样的方法。
凸优化和条件最优化 的相关知识在算法中的应用随处可见,如果能有系统的学习将使得你对算法的认识达到一个新高度。

1.1.2 线性代数

大多数机器学习的算法要应用起来,依赖于高效的计算,这种场景下,程序员GG们习惯的多层for循环通常就行不通了,而大多数的循环操作可转化成矩阵之间的乘法运算,这就和线性代数有莫大的关系了
向量的内积运算更是随处可见。
矩阵乘法与分解在机器学习的主成分分析(PCA)和奇异值分解(SVD) 等部分呈现刷屏状地出现。

1.1.3 概率与统计

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

极大似然思想、贝叶斯模型是理论基础,朴素贝叶斯(Naïve Bayes )、语言模型(N-gram)、隐马尔科夫(HMM)、隐变量混合概率模型是他们的高级形态。
常见分布如高斯分布是混合高斯模型(GMM)等的基础。

1.2 典型算法

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

处理分类问题的常用算法包括:逻辑回归(工业界最常用),支持向量机,随机森林,朴素贝叶斯(NLP中常用),深度神经网络(视频、图片、语音等多媒体数据中使用)。
处理回归问题的常用算法包括:线性回归,普通最小二乘回归(Ordinary Least Squares Regression),逐步回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)
处理聚类问题的常用算法包括:K均值(K-means),基于密度聚类,LDA等等。
降维的常用算法包括:主成分分析(PCA),奇异值分解(SVD) 等。
推荐系统的常用算法:协同过滤算法
模型融合(model ensemble)和提升(boosting)的算法包括:bagging,adaboost,GBDT,GBRT
其他很重要的算法包括:EM算法等等。

我们多插一句,机器学习里所说的“算法”与程序员所说的“数据结构与算法分析”里的“算法”略有区别。前者更关注结果数据的召回率、精确度、准确性等方面,后者更关注执行过程的时间复杂度、空间复杂度等方面。 。当然,实际机器学习问题中,对效率和资源占用的考量是不可或缺的。
1.3 编程语言、工具和环境

看了无数的理论与知识,总归要落到实际动手实现和解决问题上。而没有工具所有的材料和框架、逻辑、思路都给你,也寸步难行。因此我们还是得需要合适的编程语言、工具和环境帮助自己在数据集上应用机器学习算法,或者实现自己的想法。对初学者而言,Python和R语言是很好的入门语言,很容易上手,同时又活跃的社区支持,丰富的工具包帮助我们完成想法。相对而言,似乎计算机相关的同学用Python多一些,而数学统计出身的同学更喜欢R一些。我们对编程语言、工具和环境稍加介绍:
1.3.1 python

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

网页爬虫: scrapy
数据挖掘:
pandas:模拟R,进行数据浏览与预处理。
numpy:数组运算。
scipy:高效的科学计算。
matplotlib:非常方便的数据可视化工具。
机器学习:
scikit-learn:远近闻名的机器学习package。未必是最高效的,但是接口真心封装得好,几乎所有的机器学习算法输入输出部分格式都一致。而它的支持文档甚至可以直接当做教程来学习,非常用心。对于不是非常高纬度、高量级的数据,scikit-learn胜任得非常好(有兴趣可以看看sklearn的源码,也很有意思)。
libsvm:高效率的svm模型实现(了解一下很有好处,libsvm的系数数据输入格式,在各处都非常常见)
keras/TensorFlow:对深度学习感兴趣的同学,也能很方便地搭建自己的神经网络了。
自然语言处理:
nltk:自然语言处理的相关功能做得非常全面,有典型语料库,而且上手也非常容易。
交互式环境:
ipython notebook:能直接打通数据到结果的通道,方便至极。强力推荐。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机网络》文档包含了70个关于计算机网络基础知识的单项选择题,内容涉及互联网起源、网络协议、IP地址、DNS服务、电子邮件、网络拓扑结构、网络设备、网络连接方式、网络速度等多个方面。每个问题后面都提供了正确答案,适合作为学习和测试材料。 ### 适用人群 本文档适合以下人群: - 计算机科学与技术、信息技术、网络工程等专业的在校学生。 - 准备计算机网络相关考试或认证的专业人士。 - 对计算机网络基础知识感兴趣的自学者。 - 信息技术教师,作为教学资源或测试材料。 ### 使用场景及目标 1. **学习测试**:作为学生学习计算机网络理论知识后的测试工具,检验学习效果。 2. **教学辅助**:教师可以用于课堂教学,作为课后作业或课堂小测验,增强学生的理解和记忆。 3. **自学检验**:个人自学者可以通过这些题目检验自己对计算机网络基础知识的掌握程度。 4. **职业发展**:职场人士可以通过学习和测试,提升自己在计算机网络领域的专业能力。 5. **竞赛准备**:适合准备计算机网络相关竞赛的学生,作为强化训练材料。 文档的目标是通过这些精心设计的题目,帮助读者全面了解和掌握计算机网络的基本概念、原理和应用,提高解决实际问题的能力。通过学习和练习,读者将能够更加深入地理解计算机网络的工作原理,为进一步的专业学习或职业发展打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值