机器学习面试题21-40

21.数据不平衡问题

这主要是由于数据分布不平衡造成的。解决方法如下: 采样,对小样本加噪声采样,对大样本进行下采样 数据生成,利用已知样本生成新的样本 进行特殊的加权,如在Adaboost中或者SVM中 采用对不平衡数据集不敏感的算法 改变评价标准:用AUC/ROC来进行评价 采用Bagging/Boosting/ensemble等方法 在设计模型的时候考虑数据的先验分布。

22.特征数量比数据量还大时,应该采用什么算法

线性分类器,因为维度高的时候,数据一般在维度空间里面会比较稀疏,很有可能线性可分。

23.常见的分类算法有哪些

SVM、神经网络、随机森林、逻辑回归、KNN、贝叶斯

24.常见优化算法及其优缺点

简言之

1)随机梯度下降 优点:可以一定程度上解决局部最优解的问题 缺点:收敛速度较慢

2)批量梯度下降 优点:容易陷入局部最优解 缺点:收敛速度较快

3)mini_batch梯度下降 综合随机梯度下降和批量梯度下降的优缺点,提取的一个中和的方法。

4)牛顿法 牛顿法在迭代的时候,需要计算Hessian矩阵,当维度较高的时候,计算 Hessian矩阵比较困难。

5)拟牛顿法 拟牛顿法是为了改进牛顿法在迭代过程中,计算Hessian矩阵而提取的算法,它采用的方式是通过逼近Hessian的方式来进行求解。

具体而言 从每个batch的数据来区分

梯度下降:每次使用全部数据集进行训练 优点:得到的是最优解 缺点:运行速度慢,内存可能不够

随机梯度下降:每次使用一个数据进行训练 优点:训练速度快,无内存问题 缺点:容易震荡,可能达不到最优解 Mini-batch梯度下降 优点:训练速度快,无内存问题,震荡较少 缺点:可能达不到最优解 从优化方法上来分: 随机梯度下降(SGD) 缺点 选择合适的learning rate比较难 对于所有的参数使用同样的learning rate 容易收敛到局部最优 可能困在saddle point SGD+Momentum 优点: 积累动量,加速训练 局部极值附近震荡时,由于动量,跳出陷阱 梯度方向发生变化时,动量缓解动荡。

Nesterov Mementum 与Mementum类似,优点: 避免前进太快 提高灵敏度 AdaGrad 优点: 控制学习率,每一个分量有各自不同的学习率 适合稀疏数据 缺点 依赖一个全局学习率 学习率设置太大,其影响过于敏感 后期,调整学习率的分母积累的太大,导致学习率很低,提前结束训练。

RMSProp 优点: 解决了后期提前结束的问题。 缺点: 依然依赖全局学习率

Adam Adagrad和RMSProp的合体 优点: 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点 为不同的参数计算不同的自适应学习率 也适用于大多非凸优化 - 适用于大数据集和高维空间

牛顿法 牛顿法在迭代的时候,需要计算Hessian矩阵,当维度较高的时候,计算 Hessian矩阵比较困难

拟牛顿法 拟牛顿法是为了改进牛顿法在迭代过程中,计算Hessian矩阵而提取的算法,它采用的方式是通过逼近Hessian的方式来进行求解。

25.比较EM算法、HMM、CRF

这三个放在一起不是很恰当,但是有互相有关联,所以就放在这里一起说了。注意重点关注算法的思想。

(1)EM算法   EM算法是用于含有隐变量模型的极大似然估计或者极大后验估计,有两步组成:E步,求期望(expectation);M步,求极大(maxmization)。本质上EM算法还是一个迭代算法,通过不断用上一代参数对隐变量的估计来对当前变量进行计算,直到收敛。   注意:EM算法是对初值敏感的,而且EM是不断求解下界的极大化逼近求解对数似然函数的极大化的算法,也就是说EM算法不能保证找到全局最优值。对于EM的导出方法也应该掌握。

(2)HMM算法   隐马尔可夫模型是用于标注问题的生成模型。有几个参数(π,A,B):初始状态概率向量π,状态转移矩阵A,观测概率矩阵B。称为马尔科夫模型的三要素。 马尔科夫三个基本问题: 概率计算问题:给定模型和观测序列,计算模型下观测序列输出的概率。–》前向后向算法 学习问题:已知观测序列,估计模型参数,即用极大似然估计来估计参数。–》Baum-Welch(也就是EM算法)和极大似然估计。 预测问题:已知模型和观测序列,求解对应的状态序列。–》近似算法(贪心算法)和维比特算法(动态规划求最优路径)

(3)条件随机场CRF   给定一组输入随机变量的条件下另一组输出随机变量的条件概率分布密度。条件随机场假设输出变量构成马尔科夫随机场,而我们平时看到的大多是线性链条随机场,也就是由输入对输出进行预测的判别模型。求解方法为极大似然估计或正则化的极大似然估计。   之所以总把HMM和CRF进行比较,主要是因为CRF和HMM都利用了图的知识,但是CRF利用的是马尔科夫随机场(无向图),而HMM的基础是贝叶斯网络(有向图)。而且CRF也有:概率计算问题、学习问题和预测问题。大致计算方法和HMM类似,只不过不需要EM算法进行学习问题。

(4)HMM和CRF对比   其根本还是在于基本的理念不同,一个是生成模型,一个是判别模型,这也就导致了求解方式的不同。

26.说说常用和函数

我们通常说的核函数指的是正定和函数,其充要条件是对于任意的x属于X,要求K对应的Gram矩阵要是半正定矩阵。RBF核径向基,这类函数取值依赖于特定点间的距离,所以拉普拉斯核其实也是径向基核。SVM关键是选取核函数的类型,常用核函数主要有线性内核,多项式内核,径向基内核(RBF),sigmoid核。 线性核函数 线性核,主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的 多项式核函数 多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。 高斯(RBF)核函数 高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。 sigmoid核函数 采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。 因此,在选用核函数的时候,如果我们对我们的数据有一定的先验知识,就利用先验来选择符合数据分布的核函数;如果不知道的话,通常使用交叉验证的方法,来试用不同的核函数,误差最下的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。 在吴恩达的课上,也曾经给出过一系列的选择核函数的方法: 如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM; 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数; 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

27.什么时共线性,和过拟合有什么关系

共线性:多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。 共线性会造成冗余,导致过拟合。 解决方法:排除变量的相关性/加入权重正则。

28.对于维度极低的数据,采用什么算法

非线性分类器,低维空间可能很多特征都跑到一起了,导致线性不可分。

1. 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM

2. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel

3. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况。

29.SVM、LR、决策树对比

模型复杂度:SVM支持核函数,可处理线性非线性问题;LR模型简单,训练速度快,适合处理线性问题;决策树容易过拟合,需要进行剪枝 损失函数:SVM hinge loss; LR L2正则化; adaboost 指数损失 数据敏感度:SVM添加容忍度对outlier不敏感,只关心支持向量,且需要先做归一化; LR对远点敏感 数据量:数据量大就用LR,数据量小且特征少就用SVM非线性核

30.简述KNN

1. 计算测试样本和训练样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等); 2. 对上面所有的距离值进行排序; 3. 选前 k 个最小距离的样本; 4. 根据这 k 个样本的标签进行投票,得到最后的分类类别;

31.偏差与方差

1. 计算测试样本和训练样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等); 2. 对上面所有的距离值进行排序; 3. 选前 k 个最小距离的样本; 4. 根据这 k 个样本的标签进行投票,得到最后的分类类别;

32.解决偏差和方差问题

High bias解决方案:Boosting、复杂模型(非线性模型、增加神经网络中的层)、更多特征 High Variance解决方案:bagging、简化模型、降维 具体而言 高偏差, 可以用boosting模型, 对预测残差进行优化, 直接降低了偏差. 也可以用高模型容量的复杂模型(比如非线性模型, 深度神经网络), 更多的特征, 来增加对样本的拟合度. 高方差, 一般使用平均值法, 比如bagging, 或者模型简化/降维方法, 来降低方差. 高偏差和高方差都是不好的, 我们应该加以避免. 但是它们又是此消彼长的关系, 所以必须权衡考虑. 一般情况下, 交叉验证训练可以取得比较好的平衡: 将原始样本均分成K组, 将每组样本分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型, 这K个模型可以并发训练以加速. 用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标. K一般大于等于3, 而K-CV 的实验共需要建立 k 个models,并计算 k 次 test sets 的平均预测正确率。 在实作上,k 要够大才能使各回合中的 训练样本数够多,一般而言 k=10 (作为一个经验参数)算是相当足够了。

33.xgboost是用什么方法给特征打分

在训练的过程中,通过Gini指数选择分离点的特征,一个特征被选中的次数越多,那么该特征评分越高。

34.什么是oob?

bagging方法中Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中,当然也就没有参加决策树的建立,把这1/3的数据称为袋外数据oob(out of bag),它可以用于取代测试集误差估计方法。 袋外数据(oob)误差的计算方法如下: 对于已经生成的随机森林,用袋外数据测试其性能,假设袋外数据总数为O,用这O个袋外数据作为输入,带进之前已经生成的随机森林分类器,分类器会给出O个数据相应的分类,因为这O条数据的类型是已知的,则用正确的分类与随机森林分类器的结果进行比较,统计随机森林分类器分类错误的数目,设为X,则袋外数据误差大小=X/O;这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。

35.特征工程

特征工程包括数据与特征处理、特征选择和降纬三部分。 数据与特征处理包括: 1.数据选择、清洗、采样 - 数据格式化; - 数据清洗,填充缺失值、去掉脏数据,将不可信的样本丢掉,缺省值极多的字段考虑不用; - 采样:针对正负样本不平衡的情况,当正样本远大于负样本时,且量都很大时,使用下采样,量不大时,可采集更多的数据或oversampling或修改损失函数;采样过程中可利用分层抽样保持不同类别数据的比例。

2.不同类型数据的特征处理

- 数值型:幅度调整/归一化、log等变化、统计值(例如max、min、mean、std)、离散化、分桶等 - 类别型:one-hot编码等

- 时间型: 提取出连续值的持续时间和间隔时间;提取出离散值的“年”、“月”、“日”、“一年中哪个星期/季度”、“一周中的星期几”、“工作日/周末”等信息

- 文本型:使用If-idf特征 - 统计型:加减平均、分位线、次序、比例 意义:

- 对数据进行预处理,可提高数据质量,提高挖掘质量。对数据进行清洗可填充缺失值、光滑噪声数据,识别和删除离群点数据,保证数据的一致性; - 使用正确的采样方法可解决因数据不平衡带来的预测偏差;

- 对不同的数据类型进行不同的特征处理有助于提高特征的可用性,例如对数值型数据进行归一化可将数据转化到统一量纲下;对类别型数据,可用one-hot编码方法将类别数据数字化,数字化特征之后可更用来计算距离、相似性等;可从时间型数据当中提取中更多的时间特征,例如年、月和日等,这些特征对于业务场景以及模型的预测往往有很大的帮助。统计型特征处理有助于从业务场景中挖掘更丰富的信息。

特征选择包括:

1.Filter 使用方差、Pearson相关系数、互信息等方法过滤特征,评估单个特征和结果值之间的相关程度,留下Top相关的特征部分。

2.Wrapper 可利用“递归特征删除算法”,把特征选择看做一个特征子集搜索问题,筛选各种特征子集,用模型评估效果。

3.Embedded 可利用正则化方式选择特征,使用带惩罚项的基模型,除了选择出特征外,同时也进行了降纬。 意义: -剔除对结果预测不大的特征,减小冗余,选择有意义的特征输入模型,提高计算性能。 降纬: 方法:主成分分析法(PCA)和线性判别分析(LDA) 意义: 通过PCA或LDA方法,将较高纬度样本空间映射到较低维度的样本空间,从而达到降纬的目的,减少模型的训练时间,提高模型的计算性能。

36.VC维的理解和认识

VC维是模型的复杂程度,模型假设空间越大,VC维越高。某种程度上说,VC维给机器学习可学性提供了理论支撑。

1. 测试集合的loss是否和训练集合的loss接近?VC维越小,理论越接近,越不容易overfitting。

2. 训练集合的loss是否足够小?VC维越大,loss理论越小,越不容易underfitting。 我们对模型添加的正则项可以对模型复杂度(VC维)进行控制,平衡这两个部分。

37.机器内存有限,怎么降维以及减少运行时间

1.由于我们的RAM很小,首先要关闭机器上正在运行的其他程序,包括网页浏览器,以确保大部分内存可以使用。 2.我们可以随机采样数据集。这意味着,我们可以创建一个较小的数据集,比如有1000个变量和30万行,然后做计算。 3.为了降低维度,我们可以把数值变量和分类变量分开,同时删掉相关联的变量。对于数值变量,我们将使用相关性分析。对于分类变量,我们可以用卡方检验。 4.另外,我们还可以使用PCA(主成分分析),并挑选可以解释在数据集中有最大偏差的成分。 5.利用在线学习算法,如VowpalWabbit(在Python中可用)是一个可能的选择。 6.利用Stochastic GradientDescent(随机梯度下降)法建立线性模型也很有帮助。 7.我们也可以用我们对业务的理解来估计各预测变量对响应变量的影响大小。但是,这是一个主观的方法,如果没有找出有用的预测变量可能会导致信息的显著丢失。

38.低偏差高方差如何解决

低偏差意味着模型的预测值接近实际值。换句话说,该模型有足够的灵活性,以模仿训练数据的分布。貌似很好,但是别忘了,一个灵活的模型没有泛化能力。这意味着,当这个模型用在对一个未曾见过的数据集进行测试的时候,它会令人很失望。 在这种情况下,我们可以使用bagging算法(如随机森林),以解决高方差问题。bagging算法把数据集分成重复随机取样形成的子集。然后,这些样本利用单个学习算法生成一组模型。接着,利用投票(分类)或平均(回归)把模型预测结合在一起。 另外,为了应对大方差,我们可以: 1.使用正则化技术,惩罚更高的模型系数,从而降低了模型的复杂性。 2.使用可变重要性图表中的前n个特征。可以用于当一个算法在数据集中的所有变量里很难寻找到有意义信号的时候。

39.什么时候ridge回归优于lasso回归

对少量变量有中等或大尺度的影响的时候用lasso回归。在对多个变量只有小或中等尺度影响的时候,使用Ridge回归。 从概念上讲,我们可以说,Lasso回归(L1)同时做变量选择和参数收缩,而ridge回归只做参数收缩,并最终在模型中包含所有的系数。在有相关变量时,ridge回归可能是首选。此外,ridge回归在用最小二乘估计有更高的偏差的情况下效果最好。因此,选择合适的模型取决于我们的模型的目标。

40.如何在一个数据集上选出重要特征

1.选择重要的变量之前除去相关变量 2.用线性回归然后基于P值选择变量 3.使用前向选择,后向选择,逐步选择 4.使用随机森林和Xgboost,然后画出变量重要性图 5.使用lasso回归 6.测量可用的特征集的的信息增益,并相应地选择前n个特征量。

你可能感兴趣的:(机器学习面试题21-40)