• 机器学习基础


    1. 模型评估

      1. 二值分类问题中的ROC(the Receiver Operating Curve 受试者工作特征曲线)如何绘制并计算AUC值,相比PR(Precision-Recall)曲线有什么优点?

      答:ROC曲线的纵坐标为真正例率$TPR=frac{TP}{TP+FN}$(实则为预测结果中真正例数除以样本中实际存在的正例数),横坐标为假正例数$FPR=frac{FP}{FP+TN}$ (实则为预测结果的假正例数除以样本实际的负例数)。二值分类器一般会输出测试集样本为正例的概率,然后按照概率从大到小的顺序进行排列,选取某一阈值,将概率大于这一阈值的样本预测为正例,小于这一阈值的样本预测为负例。因此ROC曲线可以看作是以不同样本的预测概率值为阈值变化时得到的TPR-FPR曲线。

      当预测阈值为最小值时,所有的样本均被预测为正例,此时真正例数等于实际正例数,假正例数等于实际负例数,TPR与FPR均为1。ROC图像位于右上角,随着阈值的上升,如果一个正例被划分到阈值以下,真正例数减少1,假正例数不变;如果一个负例被划分到阈值以下,真正例数不变,假正例数减少1。但是一个好的分类器,位于概率值下方的应该主要是负例,因此会出现FPR下降快,TPR下降慢的情况。理想情况下,图像应该是从(1,1)到(0,1)再到(0,0)的情况,此时所有的负例预测都在正例之下。在一般情况下我们可以用AUC(Area Under Curve)来衡量一个分类器的好坏原因就在此。如果是随机预测,那么曲线应该是TPR=FPR的直线形式,TPR和FPR都按照同样的比例下降

      ROC曲线相比于PR曲线的好处在于,当正负样本分布发生变化的时候,ROC曲线的形状能够基本保持不变,但是PR曲线由于样本分布不均匀在坐标轴上会有较明显的变化。这使得ROC曲线能够屏蔽测试集样本分布带来的影响,更加客观的衡量模型本身的性能。这样的优点的实际意义在于,在很多实际问题中,正负样本的数量往往很不均衡,比如计算广告领域经常涉及到的转化率模型,正样本的数量往往是负样本数量的1/1000甚至1/1000001,这个时候选择不同的测试集,PR曲线的变化就会非常大,不利于评估模型本身的性能。而ROC曲线则能够更加稳定的反映模型本身的好坏,适用的场景更多,广泛适用于排序、推荐、广告等领域。

    2. 支持向量机

      1. 原理

        支持向量机是一种二类分类模型,其学习算法是求解凸二次规划的最优化算法。支持向量机的模型由简到繁可以划分为:线性可分支持向量机(训练数据线性可分、采用硬间隔最大化支持向量机)、线性支持向量机(训练数据近似线性可分、采用软间隔最大化)、非线性支持向量机(训练数据线性不可分、采用核技巧和软间隔最大化学习到的支持向量机)。

        当输入空间为欧式空间或离散集合、特征空间为希尔伯特空间时,核函数表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。

      2. 函数间隔和几何间隔

        假设分离超平面为$mathbf{w}cdotmathbf{x}+b=0$,那么对应于特征为$mathbf{x_1}$的样本的分类结果为$y_1=sign(mathbf{w}cdot mathbf{x_1}+b)$。

        更细化的来说,$|mathbf{w}cdot mathbf{x}+b|$相对的表示样本点距离划分超平面的距离,也就是判定为某一类的确信程度。为什么说是相对距离,因为$mathbf{w}cdot mathbf{x}+b_1=0$与$mathbf{w}cdot mathbf{x}+b_2=0$所表示的平行超平面的距离为$frac{|b_1-b_2|}{||mathbf{w}||}$。而$mathbf{w}cdotmathbf{x}+b$的符号与样本标示$y$的符号是否一致表示样本的划分是否正确。

      3. 在空间上线性可分的两类点,分别向SVM分类的超平面上做投影,这些点在超平面上的投影依然是线性可分的吗?能否证明你的观点?

      答:不是,用一个比较特殊的例子,比如由两个点组成的样本集,它们的划分超平面即为两点连线的中垂线,那么它们在超平面上的映射点为同一个点,当然线性不可分。

      用反证法证明上述结论,假设存在一个超平面,使得支持向量在超平面上的投影线性可分,那么将原超平面沿着投影点线性可分的超平面与原平面的交点旋转小角度得到的超平面一定也可将原样本集线性可分,而且根据几何知识可以得到斜边大于直角边。新得到的超平面是比原超平面更优的划分平面。与原超平面是SVM的分类超平面的假设矛盾。

      我们在前面的证明过程中假设了仅有支持向量的情况,下面我们来证明SVM的分类结果仅依赖于支持向量。考虑SVM推导中的KKT条件:

      结合3和4两个条件不难发现当$g_i(w^*)<0$时,必有$alpha_i^*=0$,将这一结果与拉格朗日对偶优化问题的公式相比较:

      可以看到,除支持向量外,其他的非支持向量的系数均为0,所以SVM的分类结果与仅使用支持向量的结果一致。实际上使用凸优化理论中的超平面分离原理更加轻巧的解决,该理论是:对于不相交的两个凸集,存在一个超平面,将两个凸集分离,并且该超平面为两个凸集上最短距离两点连线的中垂线。

    3. Hadoop

      1. Hadoop的灾难处理机制

      答:Hadoop实现容错的主要方法就是重新执行任务,单个任务节点(TaskTracker)会不断地与系统的核心结点(JobTracker)进行通信,如果一个TaskTracker在一段时间内(默认是1分钟)无法与JobTracker进行通信,那JobTracker会假设这个TaskTracker出问题挂了。

      如果作业仍然在Mapping阶段,其他的TaskTracker会被要求重新执行所有的由这个失败的TaskTracker所执行的Map任务。如果作业在Reduce阶段,则其他的TaskTracker只会被要求重新执行当前失败的Reduce任务。这是因为Reduce任务一旦执行完成,会把数据写入到HDFS,所以如果一个TaskTracker已经完成赋予它的3个Reduce任务中的2个,那么只有第3个任务会被重新执行。Map任务则更复杂一点,即使一个节点已经完成了10个Map任务,此时节点挂了,那它的Mapper输出也不可访问了,所有已经完成的Map任务也会被重新执行。所有的这些都是由Hadoop平台自动操作完成的。

      2. Hadoop一个节点的数据量太大拖垮Reduce怎么办?Hadoop本身的处理机制是什么样的,手工的话可以怎么调?

      答:某个节点的数据量过大往往是由于数据分布不均导致的,可能某个key对应的数据条目数是其他的key的几百上千倍。需要通过均衡各个节点的计算量来完成。Hadoop本身有一些处理数据倾斜的参数可以调整,比如hive.groupby.skewindata=true的参数。

      手工的话可以在数据发生倾斜的少数key后面加入随机值,将其数据量进行打散,使其平均分布到更多不同的reduce节点。

    4. 监督学习与无监督学习的区别

    答:监督学习是从给定的训练数据集中学习到一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习训练集数据包括输入和输出,也即特征和目标。训练集中的目标是人为标注的,常见的监督学习方法包括回归分析和统计分类。

    无监督学习与监督学习相比,训练集没有人为标注的结果。常见的无监督学习有聚类。

    5. K-means的迭代停止条件

    答:有三个条件:1)每次迭代完后每个聚类内部的元素不发生变化。2)损失函数J(每个点到其聚类中心的均方误差)在两次迭代中的变化小于某一阈值。3)到达迭代次数。

    6. 轮廓系数的概念

    答:轮廓系数是用来衡量聚类结果好坏的系数。对于一个被分成K个簇的数据集,对于簇中的每个向量,都可以计算其轮廓系数。$a(i)$是向量$i$到同一簇中其他点的不相似度的平均值,表示为$a(i)=average(向量i到同簇中其他点的距离)$;$b(i)$是向量$i$到其他簇的平均不相似度的最小值,表示为$b(i)=min(向量i到其他簇中所有点的平均距离)$。那么向量$i$的轮廓系数表示为$S(i)=frac{b(i)-a(i)}{max(a(i), b(i)}$。

    由此可见,轮廓系数始终是分布在[-1, 1]之间的,越趋近于1内聚度和分离度就更优。

    7. K-means算法中K值的选择

    答:有两种方法:1)通过数据的先验知识,业务指导结合数据的简单分析得到。2)枚举不同的K值,根据轮廓系数进行判断选择最优值。

    8. 简述MapReduce的原理

    答:MapReduce是一种编程模型和分布式计算框架,通过MapReduce很容易在Hadoop平台上进行分布式的计算编程。

    1)Map阶段主要是完成对分片后输入数据的读取和处理工作,并将结果以key/value的形式写入到一个环状的内存缓冲区,缓冲区的大小默认为100M(可通过配置项mapreduce.task.io.sort.mb进行修改),当写入内存达到一定的比例,默认为80%(可通过mapreduce.map.sort.spill.percent配置下项修改),便开始以临时文件的形式写入磁盘。当整个map task结束之后再对磁盘中产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reduce task来拉取数据。

    Spill(溢写)过程:是从内存往硬盘写数据的过程。整个缓存区有个溢写比例(默认0.8),当达到阈值时map task可以继续往剩余的memory写,同时溢写线程锁定已用的memory。在这个过程中先对key(序列化的字节)做排序,如果客户端程序设置了combiner(在map task的输出端合并相同key的键值对,减少partitioner时候的数据通信开销),那么在溢写的过程中就会进行局部结合。

    Merge过程:每次溢写都会生成一个临时文件,在map task真正完成时会将这些文件归并成一个文件,这个过程叫做Merge。

    2)Reduce阶段主要是对Map阶段产生的输出文件进行Fetch(拉取),对每个map task所在节点的最终结果不断做merge形成reduce task的输入文件,对其结果进行进一步的处理和合并。需要等到所有map任务结束后,reduce才会对map的结果进行拷贝,由于reduce阶段的拷贝(copy)线程有多个,以至于它可以同时拉取多个map函数的输出结果。

    Copy过程:Reduce进程启动一些数据copy线程(Fetcher)通过HTTP协议拉取TaskTracker的map阶段输出文件。

    Merge过程:Copy过来的数据会先放入内存缓冲区(基于JVM的heap size设置),如果内存缓冲区不足也会发生溢写过程,多个溢写过程也会发生Merge合并。

    Map-Reduce阶段还会包括Partitioner和Shuffle的过程,用户可以提供Partitioner类用来决定hash的方式和(key,value)键值对传输的Reducer节点位置。Sort阶段保证传输到每一个节点上的所有Reduce函数接受到的(key,value)会被hadoop按照hash值进行自动排序。

    9. 简述朴素贝叶斯(Naive Bayes)的原理

    答:贝叶斯分类算法是统计学的一种分类算法,其分类原理就是使用贝叶斯公式利用某对象的先验(目标变量、类已知)概率计算出后验(目标变量未知,需要预测)概率,然后选择具有最大后验概率的类作为该对象所属的类。之所以称作“朴素”,是因为贝叶斯分类器只做最原始、最简单的假设:1)所有的特征之间是统计独立的;2)所有的特征地位相同。

    条件独立性假设是指多维特征的先验条件概率等于每一维度的条件概率的乘积。通过这一假设可以大幅较少需要估计的参数个数,将原本相乘的参数个数降低到相加。通过最大似然估计法可以根据训练集中的样本分布特征直接统计估算每个维度的特征分布的条件概率和类的先验概率分布,不需要经过优化过程。

    如果针对测试集的预测结果与实际类相同,那么损失函数为1;如果不同,损失函数为0。那么可以通过损失函数证明最大后验概率估计时损失函数最小。

    算法的优缺点:1)优点:算法简单、所需估计参数个数少、对缺失数据不太敏感。另外朴素贝叶斯的参数计算过程是相互独立的,因此特别适合分布式计算。朴素贝叶斯属于生成式模型,收敛速度将快于判别模型(如逻辑回归);天然可以处理多分类问题。2)因为朴素贝叶斯分类假设样本各个特征之间相互对立,这个假设在实际应用中往往是不成立的,从而影响分类的正确性;不能学习特征间的相互作用;对输入数据的表达形式很敏感。

    注意事项:1)取对数:实际项目中可能存在某些特征的条件概率较小的情况,在这种情况下,连续的小数相乘容易造成下溢使乘积为0或者得不到正确答案。通过取对数将乘积运算转换为加减运算可以解决这一问题。2)Laplace平滑:如果新特征出现,会导致其条件概率为0,最终出现0/0的情况。因此在进行极大似然估计时,将特征和类的联合分布数量最后加1,分母类别的数量加K(K为类别的总数)。

    10. 解释协同过滤的原理

    答:协同过滤是机器和用户共同合作来找到用户所感兴趣的商品,算法的实现主要是基于用户过去的行为(包括购买、点击、评分等)。主要包括基于用户的协同过滤和基于物品的协同过滤两大类,基于用户的协同过滤是根据当前用户的消费历史来找寻与其有着相近消费历史的近似用户,向该用户推荐这些近似用户感兴趣的商品;基于物品的协同过滤是向该用户推荐与其已经表现出感兴趣的商品相似的商品来实现的。用户和商品之间的相似性度量通常可以通过欧式距离、余弦相似度、皮尔逊相关系数来衡量的。

    11. user-based CF 和 item-based CF 的不同之处

    答:总体来看,user-based的推荐着重反映和用户兴趣相似的小群体的热点,而item-based的推荐结果更着重于维系用户的历史兴趣。换句话说,userCF的推荐更加社会化,反映了用户所在小型兴趣群体中物品的热门程度,而itemCF的推荐更加个性化,反映了用户的兴趣传承。

    计算量级:UserCF适用于用户数量较小,物品数量远高于用户数量的情形。而且用户对商品的兴趣没有明显的个性化倾向,用户兴趣不是特别细化,比如新闻领域。ItemCF适用于用户数量远高于用户数的场合,比如电商网站。

    实时性:UserCF用户有新行为,不一定能造成推荐结果立即变化;ItemCF用户有新行为,一定会导致推荐结果的实时变化。

    冷启动:可以分为新用户和新物品来考虑,当UserCF中出现新用户时,当他对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表是每隔一段时间进行离线计算的;新物品上线一段时间后,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户。ItemCF新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品,但没有办法在没有离线更新物品相似度表的情况下将新物品推荐给用户。

    推荐解释:UserCF很难提供令用户信服的推荐解释;ItemCF利用用户的历史行为给用户做推荐解释,可以令用户比较信服。

    12. 在推荐系统中,如果用户量和物品数量都很大,有什么方法计算近似的相似度

    答:通过聚类的方式可以将评分矩阵、用户、物品进行分解,然后分别计算或者使用SVD的方式对评分矩阵进行降维,然后再计算相似度矩阵。或者也可以直接用slope one($y=x+b$斜率为1,偏差为两个项目的均值差,然后根据用户已经消费的项目的均值进行预测,如果有多个项目时,可以采用加权平均的方式,权重为预测项目和已消费项目的共同人数)方式进行预测。

    13. 推荐系统的类型

    答:推荐系统算法包括基于领域的(UserCF和ItemCF),基于内容的(计算主题模型),隐语义模型(矩阵分解),基于用户标签数据的,利用时间、地点等上下文信息的,利用社交网络信息的。

    14. 简述K-means算法

    答:K-means算法是实现对训练集样本中的点聚类的算法,首先随机(或者人工)选取样本点中的K个点作为聚类中心,计算每一个样本点到所有聚类中心的距离,选择距离最短的作为该样本的类簇,重新计算所有类簇的中心坐标后重新循环,直到达到停止条件(迭代次数达到阈值、类簇中心不再变化、最小平方误差损失函数不再变化)。

    15. 欧几里德距离和余弦相似度在度量上有什么区别

    答:在计算上,欧几里德距离会受到指标不同单位刻度的影响,因此需要先进行标准化再进行计算,计算结果距离越大,个体差异也越大;余弦相似度不会受到指标度量刻度的影响,余弦值落在[-1, 1]之间,值越大,相似度越大。在表达层面上来看,余弦相似度衡量的是维度间相对层面的差异,欧几里德距离衡量的是数值上的绝对差异。当两个用户评分趋势一致,但是评分标准不同时,欧几里德距离可能给出较大的差异,此时余弦相似度更适用。应用上如果要比较不同人的消费能力,可以使用欧式距离进行度量(价值度量);如果想要比较不同用户是否喜欢周杰伦,可以使用余弦相似度(定性度量)。

    16. 介绍下逻辑回归、迭代公式和损失函数

    答:逻辑回归是利用sigmoid函数结合线性表达式实现对样本点的分类,具体来说,是将样本点的特征线性表达式的结果作为sigmoid函数的输入,输出结果是样本点划分为1的概率。损失函数的构造是基于当$y_{(i)}=1$时,概率越接近于0,损失函数越大,概率为1时损失函数为0;当$y_{(i)}=0$时,概率越接近于1,损失函数越大,概率为0时损失函数为0,表示如下:

    $cost(h_{ heta}(x),y)=egin{cases} -log(h_{ heta}(x)), y=1 \ -log(1-h_{ heta}(x)), y=0 end{cases}$

    因此逻辑回归的损失函数为$J( heta )=frac{1}{m}sum_{i=1}^m(-y^{(i)}log(h_{ heta}(x))-(1-y^{(i)})log(1-h_{ heta}(x)))$

    参数的迭代公式为$ heta_j:= heta_j-frac{alpha}{m}sum_{i=1}^m(h_{ heta}(x^{(i)})-y^{(i)})x_j^{(i)}$

    17. 各种树模型的原理DT、RF、GBT、XGBoost、lightGBM

    答:基础的决策树模型包括ID3、C4.5、CART。ID3的分类规则学习是基于信息增益,但是这种衡量标准会对取值比较多的特征有所偏好,因为根据多个特征进行划分后得到的多个子集更“纯净”,信息增益更大。C4.5使用信息增益比来对这一问题进行校正,在信息增益的基础上除了关于当前特征的不确定度(熵),需要注意的是信息增益率准则对于可选择特征数较小的特征有所偏好,所以在实际的学习过程中是采用启发式的学习:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。前面的ID3和C4.5都只能用作分类任务,CART既可以用作分类,也可以用作回归,作为回归任务时,启发式的衡量标准为MSE(均方误差),也可以指定为其他MAE。从待选择的特征和划分点组合中选择划分后MSE最小的组合作为划分方式,叶子节点的输出结果使样本集的均方误差最小,因此选用其平均值作为。CART用作分类任务时采用GINI指数,每次划分中选择GINI指数最大的划分方式。

    Random Forests是通过bagging集成学习的方式将多个弱分类器CART组合成一个强分类器。它的特点是各个弱分类器之间没有依赖关系,可以很方便的进行并行拟合,通过随机采样(bootstrap)对训练集样本进行放回抽样,得到个数与原始训练集相同的抽样集进行训练,这样在每次采样过程中大约有0.368的训练集样本不会被抽样到(被称为袋外样本Out Of Bag,OOB),避免了过拟合,也可以用来检验模型的泛化性能。在结点分割的过程中,也不再是在所有特征上选择最优分割点,而是在一个随机的特征子集上进行的,默认是全部特征数量的开方。这样的处理方式虽然使得单个弱分类器在偏差上有所降低,但是经过集成的方式,整体模型的方差会降低,可以弥补单个模型偏差的损失。sklearn里实现的RF库可以对弱分类器的个数(默认为10)、树的最大深度(默认无限制)、继续分割的结点最小样本数(默认为2)、每个叶子结点的最小样本数(默认为1)等信息进行设置。bagging模型集成的方式是通过平均的方式,分类器就进行投票,回归器就进行平均。

    RF的主要优点在于:1)训练可以高度并行化,对于大数据时代的大样本训练有优势。2)由于可以随机的选取决策树的结点划分特征,因此在样本特征维度很高时,也能高效的进行训练。3)训练后,可以输出各个特征对于目标变量的重要性。(在sklearn中是采用越在决策树上层的特征对于输入样本的划分比例越大,因此重要性也越强。通过多个弱分类器的特征重要性平均可以降低这样估计的方法。另外一种方式可以通过训练集样本中完全没有被抽样到的0.368的数据进行无偏差估计,随机对袋外数据的某个特征加入噪声干扰,判断其对数据判断结果误差的影响,误差大的特征重要性更强。)4)由于采用了随机抽样,训练出的模型方差小,泛化能力强。5)对部分特征缺失不敏感。

    Adaboost算法中弱学习器的权重和迭代过程中样本权重的更新公式都是从Adaboost的损失函数中推导出来的。从另一个角度讲,Adaboost是加法模型,学习算法是前向分步学习算法,损失函数为指数函数(或者平方误差)。整体思想是在每一次迭代训练弱分类器的过程中,都增加上一次弱分类器训练过程中分错的样本的权重,降低上一次弱分类器正确划分的样本的权重,使本层的分类器更加关注那些划分错误的样本,从而增加模型的准确性。最后将整个过程中生成的多个弱分类器按照加权求和的方式整合在一块成为一个强分类器,权值由其错误率决定$alpha_k=frac{1}{2} logfrac{1-e_k}{e_k}$,$e_k$为加权错误率。Adaboost推导过程

    Gradient Boosting Tree的生成过程与传统的Adaboost不一样,它们的共同点在于训练的迭代过程都依赖于上一次弱分类器的结果,但是GBT在本轮形成的弱分器的目的是使其加上上一轮生成的强分类器的和的损失函数最小。选用平方误差作为损失函数时,拟合目标即为上一层强分类器对训练集样本的预测值与其实际值的差值。我们可以使用损失函数对上一轮生成的强分类器的负梯度来拟合本轮损失的近似值,因此叫做梯度提升树,这里的梯度并不是用来迭代参数的变化,而是用来生成弱分类器的拟合目标。在分类器中常用的损失函数包括对数损失函数(逻辑方程)和指数损失函数,sklearn默认对数,还包括learning_rate(在负梯度的结果上进行比例缩小,是正则化的一种方式,防止过拟合,意味着我们需要更多弱分类器的迭代次数),sub_sample(进行一次不放回抽样,通常在0~1之间,用偏差的增加来换取更好的泛化能力)。回归器的损失函数包括均方误差(默认)、绝对误差等。GBT推导过程

    GBT的主要优点在于:1)可以灵活处理各种类型的数据,包括连续值和离散值。2)在相对少的调参时间情况下,预测的准确率也能很高。缺点在于:1)由于弱分类器之间存在依赖关系,难以并行训练数据。

    XGBoost算法可以看作是GBT算法的高效实现,它们的差别在于,1)XGBoost利用泰勒公式展开,不仅包含了目标函数的一阶导数(GBT仅包含)、而且包含了二阶导数,使得优化的结果(由叶子结点预测值最优化得到的最小损失)更准确。2)XGBoost在目标函数中显示的加入了正则化项,基学习器为CART树时,正则化项与叶子结点的数量($gamma T)和叶子结点的值($frac{1}{2}lambda {||w||}^2$)有关。3)GBT算法中CART树寻找最佳分割点的标准是最小化均方差,XGBoost寻找的标准是最大化损失函数的增益(包括正则化项的影响)。

    除此之外,XGBoost在系统实现方面也做了很多优化:

    1)在寻找最佳分割点时,XGBoost考虑传统的贪心法枚举每个特征所有可能分割点的方法效率太低,实现了一种近似的优化算法。思路是根据特征值排序得到的几个不同的特征值分位点作为候选的最佳分割点,然后从候选者中根据上面求分割点的方式计算最佳分割点。

    2)XGBoost考虑了数据值为稀疏值的情况,可以为缺失值或者指定的值选择分支的默认方法,这能大大提高算法的效率。

    3)特征列排序后以块的形式存储在内存中,在迭代中可以重复使用;虽然boosting算法必须迭代进行,但是在处理每个特征列时可以并行。

    4)按照特征列方式存储能优化寻找最佳的分割点,但是当以行计算梯度数据时会导致内存的不连续访问,严重时导致cache miss,降低算法效率。可先将数据收集到线程内部的buffer,然后再计算,提升算法的效率。

    5)XGBoost还考虑了当数据量比较大,内存不够时怎么有效的使用磁盘,主要是结合多线程、数据压缩、分片的方法,尽可能提高算法效率。XGBoost简介

    18. 逻辑回归与决策树有什么不同

    答:在输入数据方面,决策树能够自动处理缺失值,但是逻辑回归需要手动对缺失值进行预处理。从算法实质上来说,两种算法主要有以下不同:1)逻辑回归对数据整体结构的分析优于决策树,而决策树对局部结构的分析优于逻辑回归。两者的差别主要来自算法逻辑,决策树由于采用分割的方法,所以能够深入数据内部,但失去了对全局的把握,一个分层一旦形成,它和别的层面和结点的关系就被切断了,以后的挖掘只能在局部进行。同时由于样本切分,导致其数量不断萎缩,所以无法支持多变量的同时检验。而逻辑回归始终着眼整体数据的拟合,所以对全局把握较好,但无法兼顾局部数据,或者说缺乏探查局部数据的内部机制。2)逻辑回归擅长分析线性关系,而决策树对线性关系的把握较差,决策树擅长的是非线性关系。3)逻辑回归对极值比较敏感,容易受极端值的影响,而决策树在这方面表现较好。

    19. 如果数据喂给GBDT,发现过拟合,如何调整模型

    答:解决GBDT算法过拟合的方式有很多,第一种是降低迭代学习的学习率,使得每轮迭代生成的弱分类器的拟合效果降低,增加整体模型的泛化能力。第二种是采用子抽样的办法,只选取训练集数据的一部分进行训练。第三种是CART树剪枝的方法,通过设置其max_deep,max_features,min_sample_split,min_samples_leaf等参数实现。

    20. 解释线性可分

    答:如果存在一个超平面($mathbf{w}cdot mathbf{x}+b$)可以将样本划分为互不相交的两组,那么就说这些样本是线性可分的,最简单的例子就是在二维图像上画一条直线可以分割出两个平面。那么为了保证建模时数据时线性可分或者接近线性可分,我们可以采用核函数将特征上升到高维空间,使得高维空间中的特征线性可分,典型应用是SVM算法。

    21. L1、L2正则项的区别,L1为什么能实现稀疏性

    答:L0范数是向量中非0的元素个数。L1范数(Lasso Regularization)是向量中各个元素的绝对值之和。L2范数(Ridge Regularization)是向量中各元素的平方和然后求平方根。L1范数有以下优点:1)L1的稀疏性能够实现特征的自动选择,一般来说,大部分特征是与最终的目标变量预测无关的,但是这些特征会被考虑到训练模型中形成一些局部特征,虽然会使训练误差降低。但是应用在新的样本时,这些额外的信息会被考虑,从而干扰目标变量的预测。L1范数的加入就是为了完成特征的自动选择,将没有用的特征权重置为0从而消灭这部分的影响。2)可解释性强,通过L1范数我们仅保留了对于目标变量的预测有决定性作用的特征,而消除冗杂的特征的影响,从而更具有可解释性,帮助我们更好的分析问题。

    L2范数有以下优点:1)从学习理论的角度,L2范数可以防止过拟合,提升模型的泛化能力。因为L2范数越小,导致的结果是参数向量中每一个元素都接近于0,越小的参数限制了模型中多项式的某些分量的影响越小,具有更好的泛化能力。2)从优化计算的角度,L2范数有助于处理condition number不好的情况下矩阵求逆很困难的问题(略)。

    L1为什么能实现稀疏性?因为L1范数是L0范数的最优凸近似,或者说任何规则化算子,如果在元素为0的地方不可微,并且可以分解为"求和"的形式,那么这个规则化算子就能实现稀疏。在空间模型上,L1范数的曲线和损失函数的曲线第一次相交通常在角上,而角上的点大部分元素为0。

    22. 数据处理中为什么要实现归一化

    答:未进行归一化处理的数据,在寻找最优解的过程中,会出现收敛缓慢,甚至出现震荡不收敛的情况,经过归一化处理后收敛更加平缓。归一化在涉及某些距离衡量的算法中可以提升精度,比如在欧氏距离衡量中,如果一个特征的范围很大,另一个特征的范围很小,那么欧氏距离的结果主要由取决于较大的特征。

    归一化的类型:1)线性归一化$x^{'}=frac{x-xmin}{xmax-xmin}$。2)正态标准化$x^{'}=frac{x-mu}{sigma}$。3)非线性归一化,如log、指数、正切函数。

  • 相关阅读:
    线上服务被干爆了,竟然是日志的锅!!
    求你了,不要再在对外接口中使用枚举类型了!
    深坑啊!同一个Spring AOP的坑,我一天踩了两次!
    自定义注解!绝对是程序员装逼的利器!!
    20.flask博客项目实战十五之蓝图
    19.flask博客项目实战十四之 Ajax
    18.flask博客项目实战十三之国际化和本地化
    17.flask博客项目实战十二之处理日期和时间
    16.flask博客项目实战十一之Bootstrap美化站点
    15.flask博客项目实战十之发送邮件
  • 原文地址:https://www.cnblogs.com/hopelee/p/7878225.html
Copyright © 2020-2023  润新知