0. 相关文章链接
1. 什么是机器学习(Machine Learing)
1.1. 机器学习是人工智能的一个分支
使用计算机设计一个系统,使它能够根据提供的训练数据按照一定的方式来学习; 随着训练次数的增加,该系统可以在性能上不断学习和改进 ;通过参数优化的学习模型,能够用于预测相关问题的输出。 【训练】 -> 【调优】 -> 【预测】
1.2. 机器学习的分类
1.2.1. 机器学习根据应用场景的分类
1.2.2. 机器学习根据算法驱动的分类
- 监督学习:用已知某种或某些特性的样本作为训练集,以建立一个数学模型,再用已建立的模型来预测未知样本,此种方法称为有监督学习,是最常见的机器学习方法,是从标签化训练数据集中推断出函数的机器学习任务。
- 数据集:特征features + 标签label/目标target
- 其一、分类:将数据映射到预先定义的群组或类。算法要求基于数据属性值来定义类别,把具有某些特征的数据项映射到给定的某个类别上。 【标签label:离散值,类别值】
- 其二、回归:用属性的历史数据预测未来趋势。算法首先假设一些已知类型的函数可以拟合目标数据,然后利用某种误差分析确定一个与目标数据拟合程度最好的函数。
- 【标签label:连续值】分类模型处理表示类别的离散变量,而回归模型则处理可以取任意实数的目标变量,都是通过确定一个模型,将输入特征映射到预测的输出。
- 无监督学习:与监督学习相比,无监督学习的训练集没有人为标注的结果。在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。
- 数据集:只有特征features
- 实际应用中,无监督的例子非常常见,原因是 在许多真实场景中,标注数据的获取非常困难,代价非常大(比如,人工为分类模型标注训练数据) 。通常无监督学习会和监督模型相结合,比如使用无监督技术为监督模型生成输入数据,无监督学习方法发挥作用的情形。
- 在很多情况下,聚类模型等价于分类模型的无监督形式。在聚类中,把数据进行分
割,这样每个数据样本就会属于某个部分,称为类簇。类簇相当于类别,只不过不知道真实的类别。
1.3. 机器学习的使用
机器学习是 数据通过算法构建出模型并对模型进行评估 ,评估的性能如果达到要求就拿这个模型来测试其他的数据,如果达不到要求就要调整算法来重新建立模型,再次进行评估,如此循环往复,最终获得满意的经验来处理其他的数据。机器学习更多的表现是,根据【已有的数据】,选用【合适的算法】,【训练模型】,【预测未来】
1.4. AI、ML及DL关系
1956 年提出 AI 概念,短短3年后(1959) Arthur Samuel 就提出了机器学习的概念:
机器学习不是某种具体的算法,而是很多算法的统称。机器学习包含了很多种不同的算法,深度学习就是其中之一,其他方法包括决策树,聚类,贝叶斯等。
1.5. 机器学习(Machine Learning)的基础概念
通过训练集(历史数据),不断识别特征(features,数据类型Double),不断建模(将数据代入算法中获取模型:训练模型),最后形成有效的模型(最佳模型),这个过程就叫“机器学习”!
机器学习根据训练方法大致可以分为3大类:
2. 监督学习和无监督学习
2.1. 监督学习(Supervised Learning)
监督学习是指我们给算法一个数据集,并且给定正确答案。 机器通过数据来学习正确答案的计算方法。
准备了一大堆猫和狗的照片,想让机器学会如何识别猫和狗。当使用监督学习的时候,需要给这些照片打上标签。
给照片打的标签就是“正确答案”,机器通过大量学习,就可以学会在新照片中认出猫和狗。
这种通过大量人工打标签来帮助机器学习的方式就是监督学习,这种学习方式效果非常好,但是成本也非常高。监督学习有2个主要的任务:
1、回归:
预测连续的、具体的数值。比如:支付宝里的芝麻信用分数。
2、分类:
对各种事物分门别类,用于离散型(什么是离散?)预测。
主流的监督学习算法:
2.2. 非监督学习(Unsupervised Learning)
非监督学习中,给定的数据集没有“正确答案”,所有的数据都是一样的。无监督学习的任务是从给定的数据集中,挖掘出潜在的结构。
把一堆猫和狗的照片给机器,不给这些照片打任何标签,但是希望机器能够将这些照片分类
通过学习,机器会把这些照片分为2类,一类都是猫的照片,一类都是狗的照片。虽然跟上面的监督学习看上去结果差不多,但是有着本质的差别:
非监督学习中,虽然照片分为了猫和狗,但是机器并不知道哪个是猫,哪个是狗。对于机器来说,相当于分成了 A、B 两类。
2.2.1. 无监督学习的使用场景一:发现异常
- 有很多违法行为都需要”洗钱”,这些洗钱行为跟普通用户的行为是不一样的,到底哪里不一样?
- 通过无监督学习,可以快速把行为进行分类,虽然不知道这些分类意味着什么,但是通过这种分类,可以快速排出正常的用户,更有针对性的对异常行为进行深入分析。
2.2.2. 无监督学习的使用场景二:用户细分
- 对于广告平台很有意义,不仅把用户按照性别、年龄、地理位置等维度进行用户细分,还可以通过用户行为对用户进行分类。
- 通过很多维度的用户细分,广告投放可以更有针对性,效果也会更好
2.2.3. 无监督学习的使用场景三:推荐系统
- 大家在淘宝、天猫、京东上逛的时候,总会根据你的浏览行为推荐一些相关的商品,有些商品就是无监督学习通过聚类来推荐出来的。
- 系统会发现一些购买行为相似的用户,推荐这类用户最”喜欢”的商品。
2.2.4. 常见的2类无监督学习算法
(1)聚类:简单说就是一种自动分类的方法,在监督学习中,你很清楚每一个分类是什么,但是聚类则不是,你并不清楚聚类后的几个分类每个代表什么意思。
(2)降维:降维看上去很像压缩。这是为了在尽可能保存相关的结构的同时降低数据的复杂度。
2.3. 监督学习和无监督学习的对比
- 监督学习是一种目的明确的训练方式,知道得到的是什么;而无监督学习则是没有明确目的的训练方式,无法提前知道结果是什么。
- 监督学习需要给数据打标签;而无监督学习不需要给数据打标签。
- 监督学习由于目标明确,所以可以衡量效果;而无监督学习几乎无法量化效果何。
无监督学习是一种机器学习的训练方式,它本质上是一个统计手段,在没有标签的数据里可以发现潜在的一些结构的一种训练方式。主要具备3个特点:
- 无监督学习没有明确的目的
- 无监督学习不需要给数据打标签
- 无监督学习无法量化效果
3. 什么是算法(Algorithm)
简单说,算法就是:解决问题的手段,并且是批量化解决问题的手段。比如你想要木头桌子,那么制造桌子的工厂就是“一套算法”。提供(输入)木头,就会得到(输出)桌子。
关于算法,有3点需要注意:
- 解决不同的问题可能会用到不同的算法,也可能用相同的算法。没有某种算法是万能的,只是适用的范围不同而已。
- 算法没有高级和低级之分,快速便宜的解决问题才是目的,一味追求复杂的算法(例如:深度学习),相当于“用大炮打蚊子”。
- 有时候有多种算法可以解决同一个问题,用最低的成本和最短的时间解决问题才是目的。根据不同环境选择合适的算法很重要。
4. 机器学习的基本思路
机器学习的基本思路,如下三个步骤:
- 把现实⽣活中的问题抽象成数学模型,并且很清楚模型中不同参数的作⽤
- 利⽤数学⽅法对这个数学模型进⾏求解,从⽽解决现实⽣活中的问题
- 评估这个数学模型,是否真正的解决了现实⽣活中的问题,解决的如何?
⽆论使⽤什么算法,使⽤什么样的数据,最根本的思路都逃不出上⾯的3步!
机器学习在实际操作层⾯⼀共分为7步:
1)、收集数据
2)、数据准备【特征工程】
3)、选择⼀个模型
4)、训练
5)、评估
6)、参数调整
7)、预测(开始使⽤)
5. 机器学习核心
机器学习核心:数据+算法,两者缺一不可
6. 机器学习三要素
使用机器学习库时,三要素为:算法、模型、策略。
机器学习调优:
1)、数据集(特征处理如何)
2)、算法参数
3)、集成算法(RF、GBT)
7. Spark ML机器学习库
在Spark MLlib机器学习库提供两套算法实现的API:基于RDD API和基于DataFrame API。
用户画像标签模型开发中,均使用基于DataFrame API开发的算法库,其中一些概念如下:
1)、DataFrame: This ML API uses DataFrame from Spark SQL as an ML dataset,which can hold a variety of data types. E.g., a DataFrame could have different columns storing text, feature vectors, true labels, and predictions.
一种数据结构,来源于SparkSQL中,DataFrame = Dataset[Row],存储要训练的和测试的数据集;2)、Transformer: A Transformer is an algorithm which can transform one DataFrame into another DataFrame. E.g., an ML model is a Transformer which transforms a DataFrame with features into a DataFrame with predictions.
转换器,一种算法Algorithm,必须实现transform方法。比如:模型Model就是一个转换器,将 输入的数据集DataFrame,转换为预测结果的数据集DataFrame;3)、Estimator: An Estimator is an algorithm which can be fit on a DataFrame to produce a Transformer. E.g., a learning algorithm is an Estimator which trains on a DataFrame and produces a model.
估计器或者模型学习器,将数据集DataFrame转换为一个Transformer,实现 fit() 方法,输入一个 DataFrame 并产生一个 Model,即一个 Transformer(转换器);4)、Parameter: All Transformers and Estimators now share a common API for specifying parameters.
参数,无论是转换器Transformer 还是模型学习器Estimator都是一个算法,使用算法的时候必然有参数。
数据转换为特征features,过程称之为特征工程(特征提取、特征转换、特征选择),以DataFrame API。
1)、特征转换
http://spark.apache.org/docs/2.2.0/ml-features.html#featuretransformers2)、特征选择
http://spark.apache.org/docs/2.2.0/ml-features.html#feature-selectors3)、特征提取
主要针对文本数据特征的提取(NLP)
http://spark.apache.org/docs/2.2.0/ml-features.html#feature-extractors
在Spark 2.4版本中提供针对图像数据特征的提取
http://spark.apache.org/docs/2.4.0/ml-datasource
spark.read
.format("image")
.option("dropInvalid", true)
.load("data/mllib/images/origin/kittens")
8. 机器学习模型开发
机器学习模型开发时,存在两个循环:
1)、第一个循环:特征工程(80%)不断对数据进行处理,获取特征值
2)、第二个循环:最佳模型(程序自己完成)不断调整算法参数,获取模型并评估,得到最佳模型
特征工程:数据预处理,主要包含如下操作
Preprocessing data to avoid "garbage in, garbage out"
模型开发完成流程图如下:
9. 训练集、验证集、测试集
数据在人工智能技术里是非常重要的!机器学习中数据集分为3种数据集:训练集、验证集、测试集。先用一个不恰当的比喻来说明3种数据集之间的关系:
1、训练集相当于上课学知识
2、验证集相当于课后的的练习题,用来纠正和强化学到的知识
3、测试集相当于期末考试,用来最终评估学习效果
9.1. 什么是训练集
训练集(Training Dataset)是用来训练模型使用的,训练集(Training Dataset)主要在训练阶段使用。
9.2. 什么是验证集
当模型训练好之后,并不知道它的表现如何。可以使用验证集(Validation Dataset)来看看模型在新数据(验证集和测试集是不同的数据)上的表现如何。同时通过调整超参数,让模型处于最好的状态。
验证集有2个主要的作用:
- 评估模型效果,为了调整超参数而服务
- 调整超参数,使得模型在验证集上的效果最好
说明:
- 验证集不像训练集和测试集,它是非必需的。如果不需要调整超参数,就可以不使用验证集,直接用测试集来评估效果。
- 验证集评估出来的效果并非模型的最终效果,主要是用来调整超参数的,模型最终效果以测试集的评估结果为准。
9.3. 什么是测试集
当调好超参数后,就要开始「最终考试」了,通过测试集(Test Dataset)来做最终的评估。
9.4. 如何合理的划分数据集
数据划分的方法并没有明确的规定,不过可以参考3个原则:
1、对于小规模样本集(几万量级)
常用的分配比例是 60% 训练集、20% 验证集、20% 测试集。
2、对于大规模样本集(百万级以上)
只要验证集和测试集的数量足够即可
例如有 100w 条数据,那么留 1w 验证集,1w 测试集即可。
例如有1000w 的数据,同样留 1w 验证集和 1w 测试集。
3、超参数越少,或者超参数很容易调整
那么可以减少验证集的比例,更多的分配给训练集。评估模型是否学会了「某项技能」时,也需要用新的数据来评估,而不是用训练集里的数据来评估。这种「训练集」和「测试集」完全不同的验证方法就是交叉验证法。
10. 三种主流的交叉验证法
10.1. 留出法(Holdout cross validation)
按照固定比例将数据集静态的划分为训练集、验证集、测试集的方式就是留出法。
10.2. 留一法(Leave one out cross validation)
每次的测试集都只有一个样本,要进行 m 次训练和预测。 这个方法用于训练的数据只比整体数据集少了一个样本,因此最接近原始样本的分布。但是训练复杂度增加了,因为模型的数量与原始数据样本数量相同。 一般在数据缺乏时使用。
10.3. k 折交叉验证(k-fold cross validation)
静态的「留出法」对数据的划分方式比较敏感,有可能不同的划分方式得到了不同的模型。「k 折交叉验证」是一种动态验证的方式,这种方式可以降低数据划分带来的影响。具体步骤如下:
1. 将数据集分为训练集和测试集,将测试集放在一边
2. 将训练集分为 k 份
3. 每次使用 k 份中的 1 份作为验证集,其他全部作为训练集。
4. 通过 k 次训练后,我们得到了 k 个不同的模型。
5. 评估 k 个模型的效果,从中挑选效果最好的超参数
6. 使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终模型。k 一般取 10 ,数据量小的时候,k 可以设大一点,这样训练集占整体比例就比较大,不过同时训练的模型个数也增多。 数据量大的时候,k 可以设小一点。