1.分类评价标准,准确率、精确率、召回率、F1
精确率P = TP/(TP+FP)也叫查准率
召回率R = TP/(TP+FN)也叫查全率
F1 = 2*P*R/(P+R)
我们希望精确率和召回率都很高,但实际上是矛盾的,上述两个指标是矛盾体,无法做到双高。因此,选择合适的阈值点,就需要根据实际问题需求,比如我们想要很高的精确率,就要牺牲掉一些召回率。想要得到很高的召回率,就要牺牲掉一些精准率。但通常情况下,我们可以根据他们之间的平衡点,定义一个新的指标:F1分数(F1-Score)。F1分数同时考虑精确率和召回率,让两者同时达到最高,取得平衡。(一)准确率是指分类正确的样本占总样本个数的比例,但是存在明显的缺陷,当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素,可以使用更为有效的平均准确率(每个类别下的样本准确率的算术平均)作为模型评估的指标。(二)精确率是指在所有预测为正的样本中,确实为正的比例,召回率是指本身为正的样本中,被预测为正的比例。精确率和召回率既是矛盾又统一的两个指标,为了评估一个模型的好坏,不仅要看不同模型的精确率和召回率,而且最好绘制出模型的P-R曲线,除此之外,F1 score和ROC曲线也能综合的反映一个排序模型的性能,F1 score是精确率和召回率的调和平均值,定义为F1 = (2*P*R)/(P+R),此外还有F2和F0.5分数,F1分数认为召回率和精确率同等重要,F2分数认为召回率的重要程度是精确率的2倍,而F0.5分数认为召回率的重要程度是精确率的一半,计算公式:
真正率(TPR)和假正率(FPR)
真正率(TPR) = TP/(TP+FN)
假正率(FPR) = FP/(FP+TN)
TPR和FPR分别基于实际表现1、0出发的,也就是说在实际的正样本和负样本中来观察相关概率问题,因此无论样本是否均衡,都不会被影响,能避免样本不平衡的问题,这就是为什么用TPR和FPR作为ROC、AUC指标的原因。
ROC横坐标为假正率(FPR),纵坐标为真正率(TPR),FPR=FP/N,TPR=TP/P,P代表真实的正样本的数量,N是真实的负样本的数量,TP是P个正样本中被分类器预测为正样本的个数,FP是N个负样本中被分类器预测为正样本的个数。AUC指的是ROC曲线下的面积大小,该值能够量化的反映基于ROC曲线衡量出的模型性能,ROC曲线能在样本不均匀的测试集中保持形状基本不变,而P-R曲线会发生明显的变化,ROC曲线则能够更加稳定的反映模型本身的好坏。
AUC就是从所有正样本中随机选取一个样本,从所有负样本中随机选取一个样本,然后根据你的分类器对两个随机样本进行预测,把正样本预测为正的概率为P1,把负样本预测为正的概率为P0,P1>P0的概率就等于AUC,所以AUC反应的是分类器对样本的排序能力。AUC表示ROC曲线下的面积,用于判断模型的优劣,比如连接对角线的面积刚好是0.5,对角线的含义也就是随机判断预测结果,正负样本覆盖应该都是50%,另外ROC曲线越陡越好,所以理想值是1,即正方形,所以AUC的值一般是0.5和1之间的
多分类评价指标:
sklearn包中计算precision_score的命令是sklearn.metrics.precision_score(y_true,y_pred,labels=None,pos_label=1,average='binary',sample_weight=None),其中average参数定义了该指标的计算方法,二分类时average参数默认是binary,多分类时,有可选参数micro,macro,weighted,还可以采用混淆矩阵来看分类结果
(1)micro
micro算法是指把所有的类放在一起算,具体到precision,就是把所有类的TP加和,再除以所有类的TP和TN的加和,因此micro方法下的precision和recall都等于accuracy
(2)macro
macro方法就是先分别求出每个类的precision再算术平均
(3)weighted
weighted算法就是在macro算法的基础上进行改良,不再是取算术平均,乘以固定的weight了,而是乘以该类在总样本数中的占比,计算出每类的precision后再乘以各自的占比,最后加和
2.L1和L2正则化
L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择,L1范数:向量中各个元素绝对值之和,稀疏性,说白了就是模型的很多参数是0。这相当于对模型进行了一次特征选择,只留下一些比较重要的特征,提高模型的泛化能力,降低过拟合的可能。在实际应用中,机器学习模型的输入动辄几百上千万维,稀疏性就显得更加重要。
L2正则化可以防止过拟合,L2范数:向量中各个元素平方和的开二次方根
降低过拟合程度:正则化之所以能降低过拟合的原因在于,正则化是结构风险最小化的一种策略实现,给Loss function加上正则化项,能使得新得到的优化目标函数h=f+normal需要在f和normal中做一个权衡,如果还像原来只优化的情况下,那可能得到一组比较复杂,使得正则项normal比较大,那么h就不是最优的,因此可以看出加正则项能让解更加简单,通过降低模型复杂度,得到更小的泛化误差,降低过拟合程度
L1正则化和L2正则化:L1正则化就是在Loss function后加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多),L2正则化就是在loss function后面加正则化为L2范数的平方,加上L2正则相比于L1来说,得到的解比较平滑,但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型复杂度。因为把参数加到了损失函数里,可以在梯度下降时让参数变得更小,防止模型能够拟合特别复杂的函数。
L1和L2的异同点
相同点:都用于避免过拟合
不同点:L1可以让一部分特征的系数缩小到0,从而间接实现特征选择。所以L1适用于特征之间有关联的情况。
L2让所有特征的系数都缩小,但是不会减为0,它会使优化求解稳定快速。所以L2适用于特征之间没有关联的情况
右图是L1正则项约束后的解空间(假设二维空间,简单理解为w1+w2=C),左图就是L2正则项约束后的解空间(简单理解为w1^2+w2^2=R)。彩色的等高线就是凸优化问题中目标函数的等高线,显然多边形的解空间更容易与等高线在交角处(顶点)碰撞出稀疏解(稀疏可以理解为,并非所有维度的参数均有值,部分参数为0,为0的话就可以理解为该维度的特征没有起到作用),而圆形的解空间,则很难在边角处碰撞,故不易产生稀疏解,更倾向于平滑的解。因此,几何角度的理解,比较直观易懂,在二维的情况下,黄色部分是L2和L1正则化约束后的解空间,绿色的等高线是凸优化问题中目标函数的等高线,见下图。由图可知,L2正则化约束后的解空间是圆形,而L1正则化约束的解空间是多边形。显然,多边形的解空间更容易在尖角处与等高线碰撞出稀疏解。
3.梯度消失与梯度爆炸的原因和解决方案
影响因素主要是权值和激活函数的偏导数,对一个参数求梯度,一般表达式是权值和激活函数的偏导数的乘积,当一层的权值和激活函数偏导数的乘积小于1,链式相乘反向传播网络层数越多以后,梯度就会越来越小接近为0造成梯度消失,当乘积大于1,梯度就会越来越大造成梯度爆炸
σ为sigmoid函数
梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。对于更普遍的梯度消失问题,可以考虑一下三种方案解决:
(1)用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。
(2)用Batch Normalization或者Layer Normalization
BN是对同一batch内的数据的同一纬度做归一化,因此有多少维度就有多少个均值和方差;而LN则是对单个样本的所有维度来做归一化,因此一个batch中就有batch_size 个均值和方差。
(3)残差网络
(4)LSTM的结构设计也可以改善RNN中的梯度消失问题。
4.训练数据不足会带来什么问题?如何缓解数据量不足带来的问题
回答:训练数据不足带来的问题主要表现在过拟合方面,处理方法大致分为两类,(一)是基于模型的方法,主要是采用降低过拟合的措施,包括简化模型(如将非线性模型简化为线性模型)、添加约束项以缩小假设空间(如L1/L2正则项)、集成学习、Dropout超参数等;(二)是基于数据的方法,主要通过数据扩充,即根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。通用的数据扩充方法有SMOTE算法、上采样技术、生成式对抗网络模型生成新样本
5.比较Bagging和Boosting的异同
二者都是集成学习算法,都是将多个弱学习器组合成强学习器的方法。
(1)Bagging:对数据进行自助采样法,从原始数据集中每一轮有放回地抽取训练集,对结果进行简单投票法,从原始数据集中每一轮有放回地抽取训练集,训练得到k个弱学习器,将这k个弱学习器以投票的方式得到最终的分类结果。
随机森林是Bagging的一个扩展变体,随机森林在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中映入了随机属性选择。具体来说,传统的决策树在选择划分属性时在当前节点选择一个最优属性;而在随机森林中对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。在很多例子中表现功能强大,进一步使泛化性能提升,被称为 ‘代表集成学习技术水平的方法’。 随机森林在Bagging的基础上做了修改
从样本集中用Bootstrap采样选出n个样本;
从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;
重复以上两个步骤m次,即建立了m棵CART决策树
这m棵CART决策树形成随机森林,通过投票表决结果,决定数据属于哪一类
(2)Boosting:每一轮根据上一轮的分类结果动态调整每个样本在分类器中的权重,训练得到k个弱分类器,他们都有各自的权重,通过加权组合的方式得到最终的分类结果。
GBDT回归和XGBoost
7.集成学习算法
集成学习 (ensemble learning)通过构建并结合多个学习器来完成学习任务。先产生一组"个体学习器" (individual learner),再用某种策略将它们结合起来。集成算法包括很多种包括Bagging,随机森林,Boosting 以及其他更加高效的集成算法。
集成学习主要分为两类:
平均方法:例如随机森林, Bagging methods。在平均方法中,系统分别去建立多个基分类器,分类器之间没有任何联系。然后在分类或者回归阶段,各个分类器根据测试数据给出自己的答案,然后系统根据各个分类器给出的结果去综合出最后的结果,比如可以使投票的形式。
提升方法:例如梯度提升决策树GBDT,AdaBoost。在提升方法中,系统模型在训练过程中会先后建立一系列分类器,这些分类器单个可能是弱分类器,但是组合起来就成为一个强分类器。
平均方法通常比其任何一个基分类器效果好因为尝试去降低模型的方差,而提升方法尝试去降低模型的偏差。
方差和偏差的来源
我们机器学习的模型,必不可少地对数据非常依赖。然而,如果你不知道数据服从一个什么样的分布,或者你没有办法拿到所有可能的数据(肯定拿不到所有的),那么我们训练出来的模型和真实模型之间,就会存在不一致。这种不一致表现在两个方面。
真实模型根本就没有包含在我们训练模型的模型空间中。比如本来是非线性模型,你非要拿线性模型去拟合数据,那么不论你怎么调整模型参数去选择模型,结果也是不对的。这就是偏差的来源。表现为模型不正确。
不管真实模型在不在我们训练模型的空间中,由于我们不能拿到所有可能的数据,如果拿到的数据不是那么具有代表性,那么不同的数据训练出来的模型参数就会不同。然后用这个模型去做预测,结果也就会和真实值之间有差异。这就是方差的来源。表现为模型不稳定。
避免偏差的话,首先我们需要尽量选择正确的模型, 避免方差的话需要慎重选择数据集的大小, 我们还要正确选择模型的复杂度
平均的方法采用多个分类器集体表决,就算其中一个分类器偏差较大,整体不会受其影响,偏差较小;然后,集体表决意味着模型泛化能力比较强,其分类能力相对于其中的每一个单一分类器是稳定的,所以相当于降低了方差。
提升的方法通过构造一系列的弱分类器对相同的训练数据集的重要性区别对待达到对训练数据的精确拟合,因此是降低了偏差。
8.文本分类有哪些方法
机器学习:朴素贝叶斯,支持向量机,K近邻,决策树
深度学习:CNN,RNN,FastText,LDA,LSTM
FastText模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率
序列中的词和词组组成特征向量(加和),特征向量通过线性变换映射到中间层,中间层再映射到标签
FastText在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数
FastText模型架构和word2vec中的cbow模型很类似,不同之处在于,FastText预测标签,而cbow模型预测中间词
FastText方法不同与word2vec方法,引入了两类特征并进行embedding。其中n-gram颗粒度是词与词之间,n-char是单个词之间。两类特征的存储均通过计算hash值的方法实现。
n-gram示例: who am I? n-gram设置为2
n-gram特征有,who, who am, am, am I, I
n-char示例: where, n=3, 设置起止符<, >
n-char特征有,
FastText词向量和word2vec对比:
FastText = word2vec中cbow + h-softmax的灵活使用
模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而FastText 的输出层对应的是分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用;
模型的输入层:word2vec的输入层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容;两者本质的不同,体现在 h-softmax的使用。 Word2vec的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax 也会生成一系列的向量,但最终都被抛弃,不会使用。FastText 则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)。
9.均方根误差的"意外"
回答:模型在95%的样本中预测误差都小于%1,说明大部分预测的结果都是非常优秀的,然而,RMSE却一直很差,这很可能是由于在其他的5%样本中存在非常严重的离群点,解决方案:(一)如果认为这些离群点是”噪声点“的话,就需要在数据预处理的阶段把这些噪声点过滤掉。(二)如果不认为这些离群点是”噪声点“的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去。(三)可以找一个更合适的指标来评估该模型,比如平均绝对百分比误差(MAPE),相比RMSE,MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响
11.余弦相似度
回答:余弦相似度就是两个向量夹角的余弦,余弦距离就是1-余弦相似度范围是【0,2】,欧式距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异
12.模型评估的方法
回答:(一)Holdout将原始的样本集随机分成训练集和验证集两部分,缺点是验证集计算出来的最后评估指标与原始分组有很大关系。(二)k-fold(k折交叉验证)首先将全部样本划分为k个大小相等的样本子集,依次遍历这k个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估,最后把k次评估指标的平均值作为最终的评估指标。(三)自助法,基于自助采样法的检验方法,对于总数为m的样本集合,进行n次有放回的随机抽样,得到大小为m的训练集,n次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证,问题:在自助法采样过程中,对n个样本进行n次自助抽样,当n趋于无穷大时,最终有多少数据从未被选择?回答:36.8%
13.说出几种降低过拟合和欠拟合的方法
回答:降低过拟合风险的方法:(一)增加训练数据,可以采取扩充训练数据的方法,比如生成式对抗网络来合成大量的新训练数据。(二)降低模型复杂度,在数据较少时,模型过于复杂是产生过拟合的主要原因,适当降低模型复杂度可以避免模型拟合过多的采样噪声。(三)正则化方法,给模型的参数加上一定的正则约束,比如将权值的大小加入到损失函数中,这样在优化原来的目标函数时候,也能避免权值过大带来的过拟合风险。(四)集成学习方法,集成学习方法是把多个模型集成在一起,来降低单一模型的过拟合风险,如Bagging方法
回答:降低欠拟合风险的方法:(一)添加新特征,当特征不足或者现有特征与样本标签相关性不强时,模型容易出现欠拟合,可以通过挖掘“上下文特征”,“ID类特征”,“组合特征”等新的特征。(二)增加模型的复杂度。(三)减小正则化系数,正则化用来防止过拟合的,但是当模型出现欠拟合现象时,则需要有针对性的减小正则化系数
14.三种决策树方法的差异
回答:(一)ID3(最大信息增益)采样信息增益作为评价指标,会倾向于取值较多的特征,信息增益反映的是给定条件以后不确定性减少的程度,从样本类型的角度,ID3只能处理离散型变量,而其他两种方法都可以处理连续型变量。ID3和ID4.5只能用于分类任务,而CART还可以应用于回归任务(二)ID4.5(最大信息增益比)ID3对样本特征缺失值比较敏感,而C4.5和CART可以对缺失值进行不同方式的处理(三)CART(最大基尼指数)ID3和C4.5通过剪枝来权衡树的准确性与泛化能力,而CART直接利用全部数据发现所有可能的树结构进行对比
15.如何对决策树进行剪枝
回答:(一)预剪枝即在生成决策树的过程中提前停止树的增长。中心思想是在树中结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树,此时可能存在不同类别的样本同时存于结点中,按照多数投票的原则判断该结点所属类别,预剪枝对于如何停止决策树的生长有以下几种方法(1)当树到底一定深度的时候,停止树的生长(2)当到达当前结点的样本数量小于某个阈值的时候,停止树的生长(3)计算每次分裂对测试集的准确度提升,当小于某个阈值的时候,不再继续扩展。预剪枝具有思想直接,算法简单,效率高等特点,适合解决大规模问题,缺点是很难判断何时停止,而且具有欠拟合的风险。(二)后剪枝是在已生成的过拟合完全生长的决策树进行剪枝,得到简化版的剪枝决策树。核心思想是让算法生成一颗完全生长的决策树,然后从最底层上计算是否剪枝,剪枝过程将子树删除,用一个叶子结点替代,该结点的类别同样按照多数投票的原则进行判断,同样的后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝,相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但是时间消耗会更大。
16.对于具有类别标签的数据,应当如何设计目标函数使得降维的过程中不损失类别信息?在这种目标下,应当如何进行求解?
LDA和PCA都可以进行数据降维,LDA更善于对有类别信息的数据进行降维处理,但是它对数据的分布做了一些很强的假设,比如每个类别都是高斯分布、各个类的协方差相等
17.LDA降维算法流程
LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
(1)计算类内散度矩阵Sw
(2)计算内间散度矩阵Sb
(3)计算矩阵Sw点积Sb
后面步骤和PCA类似
18.LDA和PCA降维
相同点:
(1)两者均可以对数据进行降维
(2)两者在降维时均使用了矩阵特征分解的思想
(3)两者都假设数据符合高斯分布
不同点:
(1)LDA是有监督的降维方法,而PCA是无监督的降维方法
(2)LDA降维最多降到类别数k-1的维数,而PCA没有这个限制
(3)LDA除了可以用于降维,还可以用于分类
(4)LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向
LDA优点:
(1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识
(2)LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优
LDA缺点:
(1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题
(2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA
(3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好
(4)LDA可能过度拟合数据
19.SVM
支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。