本文仅供学习使用
机器学习概述Ch01
1. 机器学习的定义
Machine Learning(ML) is a scientific discipline that deals with the construction and study of algorithms that can learn from data.
• 机器学习是一门从数据中研究算法的科学学科。
• 机器学习直白来讲,是根据已有的数据,进行算法选择,并基于算法和数据构建模型,最终对未来进行预测;
• 备注:机器学习就是一个模拟人决策过程的一种程序结构。
1.1 机器学习/人工智能的理性认识
基本概念:
• 输入:
x
∈
X
x\in X
x∈X(属性值,特征属性)
• 输出:
y
∈
Y
y\in Y
y∈Y(目标值)
• 目标函数(target function):
f
:
X
→
Y
f:X\to Y
f:X→Y(理想公式)
• 输入数据:
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
n
,
y
n
)
}
D=\{({{x}_{1}},{{y}_{1}}),({{x}_{2}},{{y}_{2}}),...,({{x}_{n}},{{y}_{n}})\}
D={(x1,y1),(x2,y2),...,(xn,yn)}(历史记录信息)
• 最终具有最有性能的假设公式:
g
:
X
→
Y
g:X\to Y
g:X→Y(学习得到的最终公式)
• 拟合:构建的算法模型符合给定数据的特征
•
x
i
{{x}_{i}}
xi:x向量的第i维度的值
•
x
(
i
)
{{x}^{(i)}}
x(i):表示第i个样本的x向量
• 鲁棒性:也就是健壮性、稳健性、强健性,是系统的健壮性;当存在异常数据的时候,算法也会拟合数据
• 过拟合:算法太符合样本数据的特征,对于实际生产中的数据特征无法拟合
• 欠拟合:算法不太符合样本的数据特征
• 向量/特征向量:
x
(
1
)
=
[
x
1
(
1
)
x
2
(
1
)
.
.
.
x
n
(
1
)
]
{{x}^{(1)}}=\left[ \begin{matrix}x_{1}^{(1)} & x_{2}^{(1)} & ... & x_{n}^{(1)} \\\end{matrix} \right]
x(1)=[x1(1)x2(1)...xn(1)]
• 矩阵/特征矩阵:
[
x
1
(
1
)
x
2
(
1
)
.
.
.
x
n
(
1
)
x
1
(
2
)
x
2
(
2
)
.
.
.
x
n
(
2
)
⋮
⋮
⋱
⋮
x
1
(
m
)
x
2
(
m
)
.
.
.
x
n
(
m
)
]
\left[ \begin{matrix}x_{1}^{(1)} & x_{2}^{(1)} & ... & x_{n}^{(1)} \\x_{1}^{(2)} & x_{2}^{(2)} & ... & x_{n}^{(2)} \\\vdots & \vdots & \ddots & \vdots \\ x_{1}^{(m)} & x_{2}^{(m)} & ... & x_{n}^{(m)} \\\end{matrix} \right]
⎣
⎡x1(1)x1(2)⋮x1(m)x2(1)x2(2)⋮x2(m)......⋱...xn(1)xn(2)⋮xn(m)⎦
⎤
• 标量/目标属性:
[
x
1
(
1
)
x
2
(
1
)
.
.
.
x
n
(
1
)
x
1
(
2
)
x
2
(
2
)
.
.
.
x
n
(
2
)
⋮
⋮
⋱
⋮
x
1
(
m
)
x
2
(
m
)
.
.
.
x
n
(
m
)
]
[
y
(
1
)
y
(
2
)
⋮
y
(
m
)
]
\left[ \begin{matrix} x_{1}^{(1)} & x_{2}^{(1)} & ... & x_{n}^{(1)} \\x_{1}^{(2)} & x_{2}^{(2)} & ... & x_{n}^{(2)} \\ \vdots & \vdots & \ddots & \vdots \\ x_{1}^{(m)} & x_{2}^{(m)} & ... & x_{n}^{(m)} \\\end{matrix} \right]\left[ \begin{matrix} y_{{}}^{(1)} \\ y_{{}}^{(2)} \\ \vdots \\ y_{{}}^{(m)} \\\end{matrix} \right]
⎣
⎡x1(1)x1(2)⋮x1(m)x2(1)x2(2)⋮x2(m)......⋱...xn(1)xn(2)⋮xn(m)⎦
⎤⎣
⎡y(1)y(2)⋮y(m)⎦
⎤
目标函数f未知(无法得到)
假设函数g类似函数f,但是可能和函数f不同
机器学习中是无法找到一个完美的函数f机器学习 从数据中获得一个假设的函数g,使其非常接近目标函数f的效果。
1.2 机器学习概念
A program can be said to learn from experience E
with respect to some class of tasks T
and performance measure P
, If its performance at tasks in T, as measured by P, improves with experience E.
对于某给定的任务T,在合理的性能度量方案P的前提下,某计算机程序可以自主学习任务T的经验E;随着提供合适、优质、大量的经验E,该程序对于任务T的性能逐步提高。——美国卡内基梅隆大学(Carnegie Mellon University)机器学习研究领域的著名教授Tom Mitchell对机器学习的经典定义
其中重要的机器学习对象:
任务Task T,一个或多个、经验Experience E、度量性能Performance P
即:随着任务的不断执行,经验的累积会带来计算机性能的提升。
• 算法 T:根据业务需要和数据特征选择的相关算法, 也就是一个数学公式
• 模型 E:基于数据和算法构建出来的模型
• 评估/测试 P:对模型进行评估的策略
机器学习是人工智能的一个分支。我们使用计算机设计一个系统,使它能够根据提供的训练数据按照一定的方式来学习;随着训练次数的增加,该系统可以在性能上不断学习和改进;通过参数优化的学习模型,能够用于预测相关问题的输出。
上图介绍了人工智能的四个重要应用功能:分类、回归、聚类、降维
1.3 机器学习、数据分析、数据挖掘区别与联系
• 数据分析: 数据分析是指用适当的统计分析方法对收集的大量数据进行分析, 并提取有用的信息,以及形成结论,从而对数据进行详细的研究和概括过程。 在实际工作中,数据分析可帮助人们做出判断;数据分析一般而言可以分为 统计分析、探索性数据分析和验证性数据分析
三大类。
• 数据挖掘: 一般指从大量的数据中通过算法搜索隐藏于其中的信息的过程。 通常通过统计、检索、机器学习、模式匹配等诸多方法来实现这个过程。
• 机器学习: 是数据分析和数据挖掘的一种比较常用、比较好的手段。
1.4 机器学习、人工智能和深度学习的关系
深度学习是机器学习的子类;深度学习是基于传统的神经网络算法发展到多隐层的一种算法体现。 机器学习是人工智能的一个子类;
2. 机器学习分类
- 有监督学习
• 用已知某种或某些特性的样本作为训练集,以建立一个数学模型,再用已建立的模型来预测未知样本,此种方法被称为有监督学习,是最常用的一种机器学习方法。是从标签化训练数据集中推断出模型的机器学习任务。 - 无监督学习
• 与监督学习相比,无监督学习的训练集中没有人为的标注的结果,在非监督的学习过程中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。 - 半监督学习
• 考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题,是有监督学习和无监督学习的结合
2.1 有监督学习(分类类型的算法)
- 判别式模型(Discriminative Model): 直接对
条件概率p(y|x)
进行建模,常见判别模型有:Logistic回归、决策树、支持向量机SVM、k近邻、神经网络
等; - 生成式模型(Generative Model): 对
联合分布概率p(x,y)
进行建模,常见生成式模型有:隐马尔可夫模型HMM、朴素贝叶斯模型、高斯混合模型GMM、LDA
等;
• 生成式模型更普适;判别式模型更直接,目标性更强
• 生成式模型关注数据是如何产生的,寻找的是数据分布模型;判别式模型关注的数据的差异性,寻找的是分类面
• 由生成式模型可以产生判别式模型,但是由判别式模式没法形成生成式模型
2.2 无监督学习
• 无监督学习试图学习或者提取数据背后的数据特征,或者从数据中抽取出重要的特征信息,常见的算法有聚类、降维、文本处理(特征抽取)
等。
• 无监督学习一般是作为有监督学习的前期数据处理,功能是从原始数据中抽取出必要的标签信息。
2.3 半监督学习(SSL)
• 主要考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题。 半监督学习对于减少标注代价,提高学习机器性能具有非常重大的实际意义。
• SSL的成立依赖于模型假设
,主要分为三大类:平滑假设、聚类假设、流行假设
; 其中流行假设更具有普片性。
• SSL类型的算法主要分为四大类:半监督分类、半监督回归、半监督聚类、半监督降维
。
• 缺点:抗干扰能力弱,仅适合于实验室环境,其现实意义还没有体现出来;未来的发展主要是聚焦于新模型假设的产生。
2.4 机器学习分类2
- 分类
通过分类模型,将样本数据集中的样本映射到某个给定的类别中(在模型构建之前,类别信息已经确定了。) - 聚类
通过聚类模型,将样本数据集中的样本分为几个类别,属于同一类别的样本相似性比较大 - 回归
反映了样本数据集中样本的属性值的特性,通过函数表达样本映射的关系来发现属性值之间的依赖关系 - 关联规则
获取隐藏在数据项之间的关联或相互关系,即可以根据一个数据项的出现推导出其他数据项的出现频率。
3. 机器学习开发流程
• 数据收集
• 数据预处理
• 特征提取
• 模型构建
• 模型测试评估
• 投入使用(模型部署与整合)
• 迭代优化
3.1 数据收集与存储
- 数据来源:
• 用户访问行为数据
• 业务数据
• 外部第三方数据 - 数据存储:
• 需要存储的数据:原始数据、预处理后数据、模型结果
• 存储设施:磁盘、mysql、HDFS、HBase、Solr、Elasticsearch、Kafka、Redis等 - 数据收集方式:
• Flume & Kafka
3.2 机器学习可用公开数据集
在实际工作中,我们可以使用业务数据进行机器学习开发,但是在学习过程中,没有业务数据,此时可以使用公开的数据集进行开发,常用数据集如下:
• http://archive.ics.uci.edu/ml/datasets.html
• https://aws.amazon.com/cn/public-datasets/
• https://www.kaggle.com/competitions
• http://www.kdnuggets.com/datasets/index.html
• http://www.sogou.com/labs/resource/list_pingce.php
• https://tianchi.aliyun.com/datalab/index.htm
• http://www.pkbigdata.com/common/cmptIndex.html
3.3 数据清洗和转换
• 实际生产环境中机器学习比较耗时的一部分
• 大部分的机器学习模型所处理的都是特征,特征通常是输入变量所对应的可用于模型的数值表示
• 大部分情况下 ,收集得到的数据需要经过预处理后才能够为算法所使用,预处理的操作主要包括以下几个部分:
• 数据过滤
• 处理数据缺失
• 处理可能的异常、错误或者异常值
• 合并多个数据源数据
• 数据汇总
• 对数据进行初步的预处理,需要将其转换为一种适合机器学习模型的表示形式,对许多模型类型来说,这种表示就是包含数值数据的向量或者矩阵
• 将类别数据编码成为对应的数值表示(一般使用1-of-k\哑编码方法)
• 从文本数据中提取有用的数据(一般使用词袋法或者TF-IDF)
• 处理图像或者音频数据(像素、声波、音频、振幅等<傅里叶变换>)
• 对特征进行正则化、标准化,以保证同一模型的不同输入变量的取值范围相同
• 数值数据转换为类别数据以减少变量的值,比如年龄分段
• 对数值数据进行转换,比如对数转换
• 对现有变量进行组合或转换以生成新特征(基于对数据以及对业务的理解),比如平均数 (做虚拟变量),需要不断尝试才可以确定具体使用什么虚拟变量。
3.3.1 类型特征转换之1-of-k(哑编码)
功能: 将非数值型的特征值转换为数值型的数据
描述: 假设变量的取值有 k 个,如果对这些值用 1 到 k 编序,则可用维度为 k 的向量来表示一个变量的值。在这样的向量里,该取值所对应的序号所在的元素为1,其他元素均为0.
3.3.2 文本数据抽取
- 词袋法:
将文本当作一个无序的数据集合,文本特征
可以采用文本中的词条/单词T
进行体现,那么文本中出现的所有词条及其出现的次数/频率
就可以体现文档的特征 - TF-IDF:
词条的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降;也就是说词条在当前文本中出现的次数越多,表示该词条对当前文本的重要性越高
,词条在所有文本(语料库/训练数据集)中出现的次数越少,说明这个词条对文本的重要性越高
。TF(词频) 指某个词条在文本中出现的次数,一般会将其进行归一化处理(该词条数量/该文档中所有词条数量);IDF(逆向文件频率) 指一个词条重要性的度量,一般计算方式为语料库中总文件数目除以包含该词语的文件数目,再将得到的商取对数得到。TF-IDF实际上是:TF * IDF
3.4 模型训练及测试
• 模型选择:对特定任务最优建模方法的选择或者对特定模型最佳参数的选择。
• 在训练数据集上运行模型(算法)并在测试数据集中测试效果,迭代进行数据模型的修改,这种方式被称为交叉验证(将数据分为训练集和测试集,使用训练集构建模型,并使用测试集评估模型提供修改建议)
• 模型的选择会尽可能多的选择算法进行执行,并比较执行结果
• 模型的测试一般以下几个方面来进行比较,在分类算法中常见的指标分别是准确率/召回率/精准率/F值(F1指标)
• 准确率(Accuracy) = 提取出的正确样本数/总样本数
• 召回率(Recall) = 正确的正例样本数/样本中的正例样本数——覆盖率
• 精准率(Precision) = 正确的正例样本数/预测为正例的样本数
• F值 = Precision * Recall * 2 / (Precision+Recall) (即F值为正确率和召回率的调和平均值)
A c c u r a c y = T P + T N T P + F N + F P + T N Accuracy=\frac{TP+TN}{TP+FN+FP+TN} Accuracy=TP+FN+FP+TNTP+TN
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
F = 2 ⋅ R e c a l l ⋅ P r e c i s i o n R e c a l l + P r e c i s i o n F=\frac{2\cdot Recall\cdot Precision}{Recall+Precision} F=Recall+Precision2⋅Recall⋅Precision
准确率达到100%——不存在假正例与假负例——Recall = Precision = 0%
严重传染病——识别出真正感染的患者 + 假正例(降低假负例)——找出所有的——召回率高+精准率低
判断题(识别出正确的加分,识别出错误的不加分)——识别出尽量多的正确例子——召回率低+精准率高
F值——权衡召回率与精准率——召回率与精准率较高时,F值较高
3.4.1 混淆矩阵
3.4.2 ROC
• ROC(Receiver Operating Characteristic)
最初源于20世纪70年代的信号检测理论,描述的是分类混淆矩阵中FPR
-TPR
两个量之间的相对变化情况,ROC曲线的纵轴是 “真正例率”(True Positive Rate 简称TPR)
,横轴是“假正例率” (False Positive Rate 简称FPR)
。
• 如果二元分类器输出的是对正样本的一个分类概率值,当取不同阈值时会得到不同的混淆矩阵,对应于ROC曲线上的一个点。那么ROC曲线就反映了FPR与TPR之间权衡的情况,通俗地来说,即在TPR随着FPR递增的情况下,谁增长得更快,快多少的问题。TPR增长得越快,曲线越往上屈,AUC
就越大,反映了模型的分类性能就越好。当正负样本不平衡时,这种模型评价方式比起一般的精确度评价方式的好处尤其显著。
真正例率—— T P T P + F N \frac{TP}{TP+FN} TP+FNTP(相当于召回率);假正例率—— F P F P + T N \frac{FP}{FP+TN} FP+TNFP(负例中被预测为正例)
(0,0)——TP = FP = 0——预测结果全为负例,准确率为实际负例涵盖比例
(0,1)——FP = FN = 0——预测结果完全正确,准确率 = 召回率 = 精准率 = 100%
(1,0)——TP = TN = 0——预测结果全部错误
(1,1)——FP = TN = 0——预测结果全为正例,准确率为实际正例涵盖比例
(0.2,0.8) vs (0.3,0.7)——越靠近M越好
3.4.3 AUC
• AUC的值越大表达模型越好
• AUC(Area Under Curve)
被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1 之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而AUC作为数值可以直观的评价分类器的好坏,值越大越好。
• AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
• 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
• AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
• AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。
3.4.4 模型评估
回归结果度量:
• explained_variance_score
:可解释方差的回归评分函数
e
x
p
l
a
i
n
_
v
a
r
i
a
n
c
e
(
y
i
,
y
^
i
)
=
1
−
var
(
y
−
y
^
)
var
(
y
)
explain\_variance({{y}_{i}},{{{\hat{y}}}_{i}})=1-\frac{\operatorname{var}(y-\hat{y})}{\operatorname{var}(y)}
explain_variance(yi,y^i)=1−var(y)var(y−y^)
• mean_absolute_error
:平均绝对误差
M
A
E
=
1
m
∑
i
=
1
m
∣
y
i
−
y
^
i
∣
MAE = \frac{1}{m}\sum\limits_{i=1}^{m}{\left| {{y}_{i}}-{{{\hat{y}}}_{i}} \right|}
MAE=m1i=1∑m∣yi−y^i∣
• mean_squred_error
:平均平方误差
M
S
E
=
1
m
∑
i
=
1
m
(
y
i
−
y
^
i
)
2
MSE=\frac{1}{m}\sum\limits_{i=1}^{m}{{{\left( {{y}_{i}}-{{{\hat{y}}}_{i}} \right)}^{2}}}
MSE=m1i=1∑m(yi−y^i)2
• r2_score
:r^2值
R
2
=
1
−
R
S
S
T
S
S
=
1
−
∑
i
=
1
m
(
y
i
−
y
^
i
)
2
∑
i
=
1
m
(
y
i
−
y
ˉ
i
)
2
{{R}^{2}}=1-\frac{RSS}{TSS}=1-\frac{\sum\limits_{i=1}^{m}{{{\left( {{y}_{i}}-{{{\hat{y}}}_{i}} \right)}^{2}}}}{\sum\limits_{i=1}^{m}{{{\left( {{y}_{i}}-{{{\bar{y}}}_{i}} \right)}^{2}}}}
R2=1−TSSRSS=1−i=1∑m(yi−yˉi)2i=1∑m(yi−y^i)2 其中:
y
ˉ
i
=
1
m
∑
i
=
1
m
y
i
{{{\bar{y}}}_{i}}=\frac{1}{m}\sum\limits_{i=1}^{m}{{{y}_{i}}}
yˉi=m1i=1∑myi
模型评估总结——分类算法评估方式
指标 | 描述 | scikit-learn函数 |
---|---|---|
Precision | 精确度 | from sklearn.metrics import precision_score |
Recall | 召回率 | from sklearn.metrics import recall_score |
F1 | F1指标 | from sklearn.metrics import f1_score |
Confusion Matrix | 混淆矩阵 | from sklearn.metrics import confusion_matrix |
ROC | ROC曲线 | from sklearn.metrics import roc |
AUC | ROC曲线下的面积 | from sklearn.metrics import auc |
Mean Square Error (MSE, RMSE) | 平均方差 | from sklearn.metrics import mean_squared_error |
Absolute Error (MAE, RAE) | 绝对误差 | from sklearn.metrics import mean_absolute_error, median_absolute_error |
R-Squared | R平方值 | from sklearn.metrics import r2_score |
3.5 模型部署和整合
- 当模型构建好后,将训练好的模型进行部署
• 方式一:直接使用训练好的模型对数据做一个预测,然后将预测结果保存数据库中。
• 方式二:直接将模型持久化为磁盘文件的形式,在需要的代码处从磁盘中恢复模型对象,然后使用恢复的模型对象对数据做一个预测。
• 方式三:直接将模型参数保存到数据库中,然后在需要的代码处直接从数据库把模型参数加载到代码中,然后根据模型算法原理使用模型参数对数据做一个预测。 - 模型需要周期性的进行修改、调优:
• 一个月、一周
3.6 模型的监控与反馈
• 当模型一旦投入到实际生产环境中,模型的效果监控是非常重要的,往往需要关注业务效果和用户体验,所以有时候会进行测试
• 模型需要对用户的反馈进行响应操作,即进行模型修改,但是要注意异常反馈信息对模型的影响,故需要进行必要的数据预处理操作
4. 一些术语
- 观察值(observarion):观察到的单个单位
- 学习算法(learning algorithm):用来学习模型的最佳参数的算法
- 模型(model):学习算法的输出,学习算法训练出的模型可以用来做预测
- 参数(parameter):一个模型在训练过程中学习到的权重或系数
- 超参数(hypermesh):一个学习算法在训练器前需要设置的一组参数
- 性能(performance):用来评估模型的指标
- 损失(loss):一个需要在训练中最小化或最大化的指标
- 训练(train):使用类似梯度下降之类的数学方法将一个学习算法应用到数据上
- 拟合(fit):使用分析方法将一个机器学习算法应用到数据上
- 数据(data):一组观察值