文章目录
基本概念
样本、特征、标签、数据集
以下引自西瓜书。
要进行机器学习,先要有数据.假定我们收集了一批关于西瓜的数据,例如(色泽=青绿;根蒂=蜷缩;敲声=浊响), (色泽=乌黑;根蒂=稍蜷;敲声=沉闷), (色泽=浅自;根蒂=硬挺;敲声=清脆),……,每对括号内是一条记录,"=" 的意思是"取值为"。
这组记录的集合称为一个"数据集" (data set) ,其中每条记录是关于一 个事件或对象(这里是一个西瓜)的描述,称为一个"示例" (instance) 或"样本" (sample).
反映事件或对象在某方面的表现或性质的事项,例如"色泽" “根蒂” “敲声”,称为"属性" (attribute) 或"特征" (feature);
属性上的取值,例如"青绿" “乌黑”,称为"属性值" (attribute value).
属性组成的空间称为"属性空间" (attribute space) 、“样本空间” (sample space)或"输入空间". 例如我们把"色泽" “根蒂” "敲声"作为三个坐标轴,则它们张成 一个用于描述西瓜的三维空间,每个西瓜都可在这个空间中找到自己的坐标位置.由于空间中的每个点对应一个坐标向量,因此我们也把一个示例称为一个 “特征向量” (feature vector).
一般地,令D = { x 1 x_{1} x1, x 2 x_{2} x2 ,…, x m x_{m} xm } 表示包含 m 个示例的数据集,每个示例由 d 个属性描述(例如上面的西瓜数据使用了3 个属性),则每个示例 x i x_{i} xi = ( x i 1 x_{i1} xi1; x i 2 x_{i2} xi2; . . . ; x i d x_{id} xid) 是 d 维样本空间X 中的一个向量, x i ∈ X x_i \in X xi∈X ,其中 x i j x_{ij} xij 是 x i x_{i} xi 在第 j 个属性上的取值(例如上述第3 个西瓜在第2个属性上的值是"硬挺" ), d 称为样本 x i x_{i} xi 的"维数" (dimensionality).
在上面的例子中,我们需要获得训练样本的“结果”信息,例如“((色泽=青绿;根蒂=蜷缩;敲声=浊响),好瓜)”。这里关于示例结果的信息,比如“好瓜”成为标签。
测试集和训练集(Training and Test Sets)
将数据集分为两个子集:
- 训练集(Training Set):用于训练模型的子集。帮助我们训练模型,简单的说就是通过训练集的数据让我们确定拟合曲线的参数。
- 测试集(Test Set): 用于测试训练后模型的子集。当然,test set这并不能保证模型的正确性,他只是说相似的数据用此模型会得出相似的结果。因为我们在训练模型的时候,参数全是根据现有训练集里的数据进行修正、拟合,有可能会出现过拟合的情况,即这个参数仅对训练集里的数据拟合比较准确,这个时候再有一个数据需要利用模型预测结果,准确率可能就会很差。
此外还有:
- 验证集(Validation Set):用来做模型选择(model selection),即做模型的最终优化及确定的,用来辅助我们的模型的构建,可选,通常为训练集的子集。
有监督与无监督
根据训练数据集有无标签
,可以分为监督、无监督、半监督三类。
- 监督
所有样本都有标签,则称为监督学习。
有监督学习的结果可分为两个大类:
1.回归分析(Regression Analysis):回归分析,其数据集是给定一个函数和它的一些坐标点,然后通过回归分析的算法,来估计原函数的模型,求出一个最符合这些已知数据集的函数解析式。然后它就可以用来预估其它未知输出的数据了,你输入一个自变量它就会根据这个模型解析式输出一个因变量,这些自变量就是特征向量,因变量就是标签。 而且标签的值是建立在连续范围的。
2.分类(Classification):其数据集,由特征向量和它们的标签组成,当你学习了这些数据之后,给你一个只知道特征向量不知道标签的数据,让你求它的标签是哪一个?其和回归的主要区别就是输出结果是离散的还是连续的。 - 无监督
所有样本都无标签,则称为无监督学习。
无监督学习主要算法是聚类,聚类目的在于把相似的东西聚在一起,主要通过计算样本间和群体间距离得到,主要算法包括Kmeans、层次聚类、EM算法。 - 半监督
部分样本有标签,部分样本无标签,则称为半监督学习。
分类和回归
回归和分类的区别主要在于标签的类型,离散的预测就是分类问题,连续的预测就是回归问题。
-
分类
分类问题往往是预测几个离散的值,比如预测一个人是亚洲人、非洲人、欧洲人、美洲人。
分类是一种定性输出,也叫离散
变量预测。
要注意常用的回归模型之一:逻辑回归虽然名为回归,但其实是用sigmoid函数做的分类模型。 -
回归
回归问题往往是预测一个特定的值,比如经典的用线性回归模型通过房子参数预测房价的例子,就是一个典型的回归问题。
回归是一种定量输出,也叫连续
变量预测。
注意,回归是对真实值的一种逼近式的预测。
模型、策略、学习算法
摘自知乎:https://zhuanlan.zhihu.com/p/23099921
-
模型(Model)
模型就是那个用来描述客观世界的数学模型,模型是从数据里抽象出来的。在进行数据分析时,我们通常手上只有数据,然后看着数据找规律,找到的规律就是模型。就跟小时候做猜数字游戏似的,1,4,16…()…256…,括号里是什么?只有把这串数抽象成模型,我们才能知道括号里是什么。其实我们很小的时候就接触到机器学习,只是那时候只顾考试,没有这些深入思考罢了。
再举个例子,购买产品的顾客到达服务台的时间是什么模型?也许是一个泊松分布。文本中某个此项出现的概率是什么模型?也许隐狄雷科雷分布。股票的价格随时间的变化是什么关系?是基于布朗运动的二项随机分布…
模型可以是确定性的,也可以是随机的,无所谓,总之用数学可以描述,只要数学可以描述的,就可以进行预测分析。所以,我们的根本目的,是找一个模型去描述我们已经观测到的数据。
常见的包括:线性模型、人工神经网、自动编码器、SVM等等。
-
策略(Strategy)
例如我们相用一个正态分布去描述一组数据,我们就要去构造这个正态分布,实际上就是预测这个分布的参数,例如:均值?方差?… 但是,我们需要有一系列的标准去选择合适的模型,模型不是拍脑袋来的。我想用正态分布,理由呢?我相用二项分布,凭啥不能用三角分布?我想让正态分布的均值为0.5,凭啥0.5比选0.2好?做研究不能任性,别人会质疑你,所以,就需要有一系列的标准来证明一个模型比另一个模型好,这就是策略。
不同的策略,对应不同的模型的比较标准和选择标准。就跟选班干部一样,选帅的,好,那就让吴彦祖当班长,选逗比的,也许选出来的就是王宝强,选会唱歌的,没准是周杰伦…好,所以最终确定的模型是什么,实际上就跟两件事儿有关,1)我们拿到的数据是什么?2)我们选择模型的策略是什么?
说到策略,一般会讲到,经验风险最小化作为常用的标准。经验风险最小是指,用这个模型,套到已有的观测数据上,基本上是靠谱的。但在已有观测数据不足的情况下,我们也可以采用结构风险最小化作为标准。这也是大多数时候我们在机器学习时候有意或无意就用到的准侧。经验风险和结构最小化是一个参数优化的过程,我们需要构造一个损失函数来描述经验风险,损失函数可以理解为我们预测一个数据错了给我们带来的代价。每个人对损失函数的定义都不同,所以优化出来的结果也不同,这也导致最终我们学习到的模型会各种各样,解决一个问题的方案有多种多样…
经验风险最小化:
R e m p = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) R_{emp} =\frac{1} {N}\sum_{i=1}^{N}L(y_i,f(x_i)) Remp=N1i=1∑NL(yi,f(xi))
结构风险最小化:
R e m p = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) R_{emp} =\frac{1} {N}\sum_{i=1}^{N}L(y_i,f(x_i)) + \lambda J(f) Remp=N1i=1∑NL(yi,f(xi))+λJ(f)
其中的添加的随机项 λ J ( f ) \lambda J(f) λJ(f) 是为了防止过拟合发生。
-
算法(Algorithm)
我们有了数据,有了学习模型的策略,然后就要开始去构造模型了,如果模型的基本形式有了,就是一个优化模型参数的问题了。如果学习过确定性模型的朋友,优化并不陌生,但是优化过程往往是复杂的,面对复杂的数学优化问题我们通常难以通过简单的求导获得最终的结果,所以就要构造一系列的算法。我们的目标是让算法尽量高效,更少的计算机内存代价,更快的运算速度,更有效的参数优化结果…
具体的算法,例如:牛顿法、最小二乘法、梯度下降法等。
其中梯度下降法中又包含:随机梯度下降、批量梯度下降、AdaGrad、RMSprop、Adam。
梯度下降的原理如下图(来自维基百科):
梯度下降法的具体内容可参照这里:https://zhuanlan.zhihu.com/p/31630368
经典的梯度下降方法在训练深度模型的时候会遇到梯度弥散的问题,因而会有改进算法,而在深度神经网络模型上常用的方法还有BP算法。
过拟合与欠拟合
我们实际希望的,是在新样本上能表现得很好的学习器。为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的"普遍规律",这样才能在遇到新样本时做出正确的判别。然而,当学习器把训练样本学得"太好"了的时候,很可能巳经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降这种现象在机器学习中称为"过拟合" (overfitting)。 与"过拟合"相对的是"欠拟合" (underfitting) ,这是指对训练样本的一般性质尚未学好。给出了关于过拟合与欠拟含的一个便于直观理解的类比。
有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。欠拟合比较容易克服,例如在决策树学习中扩展分支、在神经网络学习中增加训练轮数等,而过拟合则很麻烦。在后面的学习中我们将看到,过拟合是机器学习面临的关键障碍,各类学习算法都必然带有一些针对过拟合的措施;然而必须认识到,过拟合是无法彻底避免的,我们所能做的只是"缓解’,或者说减小其风险。
参数
-
训练参数:指的是模型可以根据所输入的数据自动学习出来的变量。常见的模型参数有神经网络中的权重、支持向量机中的支持向量等。
-
超参数:就是用来确定模型的一些参数,超参数不同,模型是不同的。这个模型不同的意思就是有微小的区别,比如假设都是CNN模型,如果层数不同,模型不一样,虽然都是CNN模型。超参数一般就是根据经验确定的变量。在深度学习中,超参数有:学习速率,迭代次数,层数,每层神经元的个数等等。
注意:需要区分的概念:参数、超参数、样本、特征、标签
比如,
在这里,我们使用数据类型:
x 1 = { 1 2 ⋯ 3 2 3 ⋯ 5 ⋮ ⋮ ⋱ ⋮ 6 5 ⋯ 4 } x_1=\left\{ \begin{matrix} 1 & 2 & \cdots &3\\ 2 & 3 & \cdots & 5 \\ \vdots & \vdots & \ddots & \vdots \\ 6 & 5 & \cdots & 4 \end{matrix} \right\} x1=⎩⎪⎪⎪⎨⎪⎪⎪⎧12⋮623⋮5⋯⋯⋱⋯35⋮4⎭⎪⎪⎪⎬⎪⎪⎪⎫ y 1 = { 0 1 ⋮ 0 } y_1=\left\{\begin{matrix} 0 \\ 1 \\ \vdots\\0\end{matrix} \right\} y1=⎩⎪⎪⎪⎨⎪⎪⎪⎧01⋮0⎭⎪⎪⎪⎬⎪⎪⎪⎫
其中,
x
1
x_1
x1是手写数字转换为的矩阵,矩阵大小为
28
∗
28
28*28
28∗28,
y
1
y_1
y1 是所对应的数字,矩阵大小为
10
∗
1
10*1
10∗1 。
我们设置使用卷积神经网作为模型,设置两层卷积,顺序为:输入->卷积->池化->卷积->池化->全连接->softmax->输出。
其中第一层卷积核共有32个,卷积核大小为2*2,步长为1;类似的还有第一层池化、第二层卷积、第二层池化、全连接层的一些设置参数。
此外,还有由训练产生的,第一层卷积部分的权重
w
1
w_1
w1及偏置
b
1
b_1
b1 以及其他层的类似参数。
在这里,
(
x
1
,
y
1
)
(x_1,y_1)
(x1,y1) 称为一个样本,
x
1
x_1
x1为这个样本的特征,
y
1
y_1
y1为这个样本的标签。
神经网络的层数、每层设置的神经元数目、卷积核大小、步长等,由人设置的参数称之为超参数。
卷积的权重
w
1
w_1
w1及偏置
b
1
b_1
b1及其他层的权重等,由训练产生的参数称之为训练参数。
测试集和训练集的划分方法
这部分内容来自于:https://blog.csdn.net/c369624808/article/details/78408047
留出法
留出法的意思是直接将数据集 D D D划分为两个互斥的集合,其中一个集合作为训练集 S S S,另一个集合作为测试集 T T T,即 D = S ∪ T D=S \cup T D=S∪T, S ∩ T = ∅ S \cap T=\emptyset S∩T=∅。在 S S S 上训练出模型后,用 T T T 来评估其误差。
此外:
- 把数据集分成互不相交的两部分,一部分是训练集,一部分是测试集。
- 保持数据分布大致一致,类似分层抽样
- 训练集数据的数量应占2/3到4/5
- 为了保证随机性,将数据集多次随机划分为训练集和测试集,然后在对多次划分结果取平均。
交叉验证
“交叉验证法”先将数据集
D
D
D划分为
k
k
k 个大小相似的互斥子集,即
D
=
D
1
∪
D
2
∪
.
.
.
∪
D
k
,
D
i
∩
D
j
=
∅
D=D_1\cup D_2 \cup ... \cup D_k,D_i \cap D_j=\emptyset
D=D1∪D2∪...∪Dk,Di∩Dj=∅, 其中
(
i
=
̸
j
)
(i =\not j)
(i≠j) 。每个子集都尽可能保持数据分布的一致性,即从
D
D
D中通过分层采样得到。然后,每次用
k
−
1
k-1
k−1 个子集的并集作为训练集,余下的子集作为测试集;这样就可以获得k组训练/测试集,从而可以进行
k
k
k次训练和测试,最终返回的是
k
k
k 个测试结果的均值。
显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于
k
k
k的取值,为了强调这一点,通常把交叉验证法称为"k折交叉验证"(k-fold cross validation),k通常取10—10折交叉验证。
交叉验证的好处就是从有限的数据中尽可能挖掘多的信息,从各种角度去学习我们现有的有限的数据,避免出现局部的极值。在这个过程中无论是训练样本还是测试样本都得到了尽可能多的学习。(By 知乎 张戎 交叉验证简介)
交叉验证法的缺点就是,当数据集比较大时,训练模型的开销较大。
一般步骤:
- 将数据集随机分为互斥的k个子集,为保证随机性,P次随机划分取平均。
- 将k个子集随机分为k-1个一组剩下一个为另一组,有k种分法。
- 将每一种分组结果中,k-1个子集的组当做训练集,另外一个当做测试集,这样就产生了k次预测,对其取平均
- 称为p次k折交叉验证,一般取k=10
评价指标
均方误差、均方根误差、平均绝对误差
MSE:Mean Squared Error
均方误差是指参数估计值与参数真值之差平方的期望值;
MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。
M S E = 1 m ∑ i = 1 m ( y i − y i ^ ) 2 MSE=\frac{1}{m}\sum_{i=1}^{m}(y_i-\hat{y_i})^{2} MSE=m1i=1∑m(yi−yi^)2
这里的 y y y是测试集上的。 y i y_i yi是真实值, y i ^ \hat{y_i} yi^是预测值。用 真实值-预测值 然后平方之后求和平均。
RMSE: Root Mean Squared Error
均方根误差:均方根误差是均方误差的算术平方根
R M S E = 1 m ∑ i = 1 m ( y i − y i ^ ) 2 RMSE=\sqrt{\frac{1}{m}\sum_{i=1}^{m}(y_i-\hat{y_i})^{2}} RMSE=m1i=1∑m(yi−yi^)2
MAE :Mean Absolute Error
平均绝对误差是绝对误差的平均值
平均绝对误差能更好地反映预测值误差的实际情况.
M
A
E
=
1
m
∑
i
=
1
m
∣
y
i
−
y
i
^
∣
MAE=\frac{1}{m}\sum_{i=1}^{m}|y_i-\hat{y_i}|
MAE=m1i=1∑m∣yi−yi^∣
错误率、准确率、精确率、召回率
-
错误率:
指分类错误的样本数占样本总数的比例,对于样本集D,定位错误率为:
E ( f ; D ) = 1 m ∑ i m F ( f ( x i = ̸ y i ) ) E(f;D)=\frac{1}{m}\sum_i^mF(f(x_i =\not y_i)) E(f;D)=m1i∑mF(f(xi≠yi)) -
准确率accuracy:
分类正确的样本数占样本总数的比例
a c c ( f ; D ) = 1 m ∑ i m F ( f ( x i = y i ) ) = 1 − E ( f ; D ) acc(f;D)=\frac{1}{m}\sum_i^mF(f(x_i = y_i))=1-E(f;D) acc(f;D)=m1i∑mF(f(xi=yi))=1−E(f;D) -
精确率(查准率)precision:
表示被分为正例的个数中实际为正例的比例 -
召回率(查全率):表示有多少个正例被准确分为了正例
我们用一个二分类的混淆矩阵来表示
真实情况 | 预测结果(正) | 预测结果(反) |
---|---|---|
正 | TP(真正例) | FN(假反例) |
反 | FP(假正例) | TN(真反例) |
真正(True Positive , TP)被模型预测为正的正样本;
假负(False Negative , FN)被模型预测为负的正样本;
假正(False Positive , FP)被模型预测为正的负样本;
真负(True Negative , TN)被模型预测为负的负样本。
错误率: F N + F P T P + F N + F P + T N \frac{FN+FP}{TP+FN+FP+TN} TP+FN+FP+TNFN+FP
准确率: T P + T N T P + F N + F P + T N \frac{TP+TN}{TP+FN+FP+TN} TP+FN+FP+TNTP+TN
查准率: T P T P + F P \frac{TP}{TP+FP} TP+FPTP
召回率: T P T P + F N \frac{TP}{TP+FN} TP+FNTP
ROC和AUC
引自:https://www.jianshu.com/p/8abf429bf587
- ROC
ROC的全名叫做Receiver Operating Characteristic,其主要分析工具是一个画在二维平面上的曲线——ROC 曲线。平面的横坐标是false positive rate(FPR),纵坐标是true positive rate(TPR)。对某个分类器而言,我们可以根据其在测试样本上的表现得到一个TPR和FPR点对。这样,此分类器就可以映射成ROC平面上的一个点。调整这个分类器分类时候使用的阈值,我们就可以得到一个经过(0, 0),(1, 1)的曲线,这就是此分类器的ROC曲线。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。因为(0, 0)和(1, 1)连线形成的ROC曲线实际上代表的是一个随机分类器。如果很不幸,你得到一个位于此直线下方的分类器的话,一个直观的补救办法就是把所有的预测结果反向,即:分类器输出结果为正类,则最终分类的结果为负类,反之,则为正类。虽然,用ROC 曲线来表示分类器的性能很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC 曲线下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的性能。AUC(Area Under roc Curve)是一种用来度量分类模型好坏的一个标准。
既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比:
在上图中,(a)和©为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,©和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。
- AUC值
AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。