您正在使用较旧版本的浏览器。为了获得最佳 MSN 中文网体验,请使用受支持的版本

少侠,你的《机器学习宝典》修炼到第几层了?

Microsoft 徽标 Microsoft 2022/7/1 微软(亚洲)互联网工程院 · AI智汇学院

导语:机器学习现在热得一塌糊涂,码农要是不会点机器学习,都不好意在IT界混了。

机器学习难吗?一大堆公式,好像很难的样子。不过,看人家用起来,也不过就是下载几个软件包,调用几个算法函数。

干脆不理那些看着头晕的怪异符号和希腊字母,直接把那些算法当黑盒用是不是就可以了?

很不幸,这样做往往是不可以的。仅仅把机器学习算法当作黑盒使用的问题在于:黑盒能够解决问题的时候,使用方便,而一旦不能解决问题,或者对质量有所要求,就会感觉无所适从。

作为程序员、工程人员(算法使用者而非研究者),想用机器学习算法解决实际问题,至少需要三层功力:算法、数据和验证。快来跟着微软智汇学院的武功秘籍修炼吧。

想了解更多来自微软智汇学院的精彩内容,请戳这里~

-----------------------------------------正文分隔线----------------------------------------------

算法

算法是机器学习的核心。一般意义上的“学习‘机器学习’”,也是从算法开始。

仅从使用角度而言,掌握算法,大致可分为如下由浅入深的几步:

1.简单使用:了解某个算法基本原理,应用领域,功能和局限。

a) 该算法的应用问题域是什么?(e.g. 分类、回归、聚类……)

b) 该算法的应用目标是什么?(e.g. 判别算法、生成算法……)

c) 该算法适合应用在怎样的数据集,它能对数据造成怎样的影响?(e.g. 适用少量高维稀疏数据……)

d) 能够主动获取该算法的函数库,调用该算法生成模型。

2.算法优化:对所采用算法和对应模型的数学公式有所了解。

a) 知道调用函数中各个参数的意义(e.g. 迭代次数,对应到公式中参数的含义……),能够通过调节这些参数达到优化结果的目的。

b) 能够通过加约束条件(e.g. L0, L1, L2 ……)来优化算法。

c) 了解在当前问题域,目标和输入数据确定的情况下,还可以用哪些其他模型可替换现有模型,并进行尝试。

d) 能够将多个弱模型加权组成强模型(e.g. adaboost)。

3.运行效率优化:对模型本身的数学推导过程和模型最优化方法有所掌握,对于各种最优化方法的特点、资源占用及消耗情况有所了解。

a) 了解算法在当前数据集上的运行效率(e.g. 需要进行哪些运算,是否易于被分布式等)。

b) 了解在其他语言、平台、框架的工具包中有否同等或近似功能但在当前应用场景下效率更高的算法。

c) 能够针对具体场景,通过转换模型的最优化方法(optimizer)来改进运行效率。

数据

仅仅只有算法,并不能解决问题。算法和数据结合,才能获得有效的模型。

对于数据,需要从:i). 具有业务含义的信息,和ii).用于运算的数字,这两个角度来对其进行理解和掌握。

1.特征选取:从业务角度区分输入数据包含的特征,并认识到这些特征对结果的贡献。

a) 对数据本身和其对应的业务领域有所了解。

b) 能够根据需要标注数据。

c) 知道如何从全集中通过划分特征子集、加减特征等方法选取有效特征集。

2.向量空间模型(VSM)构建:了解如何将自然语言、图片等人类日常使用的信息转化成算法可以运算的数据。

a) 能够把文字、语音、图像等输入转化成算法所需输入格式(一般为实数空间的矩阵或向量)。

b) 能够根据信息熵等指标选取有效特征。

实例1

3.数据处理:运用统计学方法处理输入数据。

a) 能够对数据进行归一化(normalization), 正则化(regularization)等标准化操作。

b) 能够采用bootstrap等采样方法处理有限的训练/测试数据,以达到更好的运算效果。

验证

算法+数据就能够得到模型。但是这个模型的质量如何?这个模型和那个模型比较,哪个更适合解决当前问题?在做了如此这般的优化之后得出了一个新的模型,怎么能够确认它比旧的模型好?

为了解答这些问题,就需要掌握度量模型质量的方法。

1.了解bias,overfitting等基本概念,及针对这些情况的基本改进方法。

2.了解各种模型度量指标(e.g. Accuracy, Precision,Recall, F1Score……)的计算方法和含义,及其对模型质量的影响。

3.能够构建训练集、测试集,并进行交叉验证。

4.能够运用多种不同的验证方法(e.g. 2-Fold cross-validation,K-Fold cross-validation, Leave-One-Out cross-validation……)来适应不同的数据集。

注意

上面所说的全部都是针对基于统计的机器学习算法而言的(典型算法包括:线性回归,逻辑回归,朴素贝叶斯法、决策树、支持向量机、隐马尔可夫模型、条件随机场等等)。

当前比机器学习更热的深度学习(Deep Learning),玩法很不相同。

CNN, DNN, RNN, LSTM等一众神经网络,淡化甚至省略了特征筛选的部分,对标注数据量和运算能力的要求却极大。

在数据量不足的情况下,深度学习效果甚至还不如一般的统计学习方法。而如果运算能力不足,则可能导致不可容忍的训练时间。

而且相对于统计学习方法而言,深度学习的理论性相对不够成熟,试验的成分很高,许多方法还在探索之中。

因此,现阶段,人工智能领域的普通工程开发者(程序员),更有可能应用到的是没那么酷的基于统计的机器学习算法,而非深度学习。

--END--

阅读更多精彩内容,欢迎点击👇

科普 | 算法是啥?编程又是啥?5分钟给你讲明白!

科普 | 让人头晕的原理公式,想说爱你好难!想摆脱你更难!

职场浅谈 | 没有爱因斯坦的智商,不能做程序猿?

© 微软智汇学院

image beaconimage beaconimage beacon