美文网首页
常见算法思想

常见算法思想

作者: 李涛AT北京 | 来源:发表于2019-05-06 23:28 被阅读0次

    逻辑回归的思想

    • 我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数 ,满足Y=X\theta 。此时我们的Y是连续的,所以是回归模型。如果我们想用线性回归的思想去解决分类的问题。如果我们想要Y是离散的话,怎么办呢?一个可以想到的办法是,我们对于这个Y再做一次函数转换,变为 g\left ( y \right )。如果我们令 g\left ( y \right ) 的值在某个实数区间的时候是类别A,在另一个实数区间的时候是类别B,以此类推,就得到了一个分类模型。如果结果的类别只有两种,那么就是一个二元分类模型了。

    注:

    • 回顾下线性回归的损失函数,由于线性回归是连续的,所以可以使用模型误差的的平方和来定义损失函数。但是逻辑回归不是连续的,自然线性回归损失函数定义的经验就用不上了。不过我们可以用最大似然法来推导出我们的损失函数。
    • one-vs-rest,简称OvR:总是认为某种类型为正值,其余为0值;
    • Many-vs-Many(MvM),它会选择一部分类别的样本和另一部分类别的样本来做逻辑回归二分类。

    决策树的思想

    • 核心思想:每次划分时,要选择最好的属性,以此来递归构建决策树。
    • 假如我错过了看世界杯,赛后我问一个知道比赛结果的人“哪支球队是冠军”?他不愿意直接告诉我,而让我猜,并且每猜一次,他要收一元钱才肯告诉我是否猜对了,那么我要掏多少钱才能知道谁是冠军呢?我可以把球队编上号,从1到16,然后提问:“冠军球队在1-8号中吗?”,假如他告诉我猜对了,我会接着问:“冠军在1-4号中吗?”,假如他告诉我才错了,那么我自然知道冠军在5-8号中。这样只需要五次,我就能知道哪支球队是冠军。
    • 决策树是从根节点开始,对样本的某一特征进行测试,根据测试结果,将样本分配到其子节点。每一个子节点对应着该特征的一个取值范围。如此递归地对样本进行测试并分配,直到叶结点。最后将实例分到叶节点的类中。

    注:

    * ID3没有考虑连续特征。
    * ID3采用信息增益大的特征优先建立决策树的节点。
    * ID3算法对于缺失值的情况没有做考虑
    *  没有考虑过拟合的问题
    

    注:

    • C4.5的剪枝方法有优化的空间。思路主要是两种,一种是预剪枝,另一个是后剪枝,通过交叉验证来剪枝。
    • C4.5生成的是多叉树,即一个父节点可以有多个节点。很多时候,在计算机中二叉树模型会比多叉树运算效率高。
    • C4.5只能用于分类,如果能将决策树用于回归的话可以扩大它的使用范围。
    • C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算。

    注:

    * 熵越小,随机变量的不确定性越小,样本集的纯度越高。
    * 基尼系数越小,随机变量的不确定性越小,样本集的纯度越高。
    * 一个使用信息增益(比)越大越好,另一个是基尼系数(最小方差)越小越好。
    

    注:

    CART分类与回归的区别

    • 分支依据不一样。分类树是用基尼系数度量,回归树是均方差度量。
    • 连续值的处理方法不同。分类使用基尼系数选择最好的分裂点,回归使用均方差选择最好的分裂点。
    • 决策树建立后做预测的方式不同。分类树采用概率最大的类别作为当前节点的预测类别。回归树采用的是用最终叶子的均值或者中位数来预测输出结果。

    如何后剪枝

    • 在测试集上定义损失函数C,我们的目标是通过剪枝使得在测试集上C的值下降。
      1. 自底向上的遍历每一个非叶节点(除了根节点),将当前的非叶节点从树中减去,其下所有的叶节点合并成一个节点,代替原来被剪掉的节点。
      1. 计算剪去节点前后的损失函数,如果剪去节点之后损失函数变小了,则说明该节点是可以剪去的,并将其剪去;如果发现损失函数并没有减少,说明 该节点不可剪去,则将树还原成未剪去之前的状态。
      1. 重复上述过程,直到所有的非叶节点(除了根节点)都被尝试了。

    注:

    * 显著性程度(卡方值)。
    * K^2越大,则H1的置信概率越大, X和Y的相关性越强。
    

    注:

    ### 决策树的优缺点
    * 不需要提前归一化,处理缺失值
    * 既可以处理连续值,也可以处理缺失值。
    * 为什么说决策树,对于异常点的容错能力好,健壮性高。
    * 解释性高
    * 决策树算法非常容易过拟合
    

    KNN

    • 核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别, 则该样本也属于这个类别, 并具有这个类别上样本的特性。

    • 蛮力实现,kd树,球树。

    朴素贝叶斯

    朴素贝叶斯和其他绝大多数的分类算法都不同。

    • 对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y = f(X),要么是条件分布P(Y | X)。

    为什么属性独立性假设在实际情况中很难成立,但朴素贝叶斯仍能取得较好的效果

    • 由于在现实世界中,大多数特征虽不能独立,但大多呈现弱相关性,所以对于模型即使有影响也不是很大。

    什么是朴素贝叶斯中的零概率问题?如何解决?(拉普拉斯平滑)

    • 假定训练样本很大时,每个分量x的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。

    朴素贝叶斯中概率计算的下溢问题如何解决

    • 在朴素贝叶斯的计算过程中,需要对特定分类中各个特征出现的概率进行连乘,小数相乘,越乘越小,这样就造成了下溢出。在程序中,在相应小数位置进行四舍五入,计算结果可能就变成0了。将小数的乘法操作转化为取对数后的加法操作,规避了变为零的风险同时并不影响并不影响其变化趋势,分类结果。

    朴素贝叶斯分类器对异常值敏感吗?

    • 朴素贝叶斯是一种对异常值不敏感的分类器,保留数据中的异常值,提高分类器的泛化能力,如果对原始数据进行降噪训练,分类器可能会因为失去部分异常值的信息而导致泛化能力下降。
    • 为什么对异常值不敏感呢,个人理解是因为朴素贝叶斯分类器是一个概率模型,如果输入是一个正常的样本,则异常值并不会影响到正常样本的后验概率。如果是一个异常的样本,反而已有的异常值可以帮助到该异常样本更好的分类。

    朴素贝叶斯算法对缺失值敏感吗

    • 不敏感,朴素贝叶斯算法能够处理缺失的数据,在算法的建模时和预测时数据的属性都是单独处理的。因此如果一个数据实例缺失了一个属性的数值,在建模时将被忽略,不影响类条件概率的计算,在预测时,计算数据实例是否属于某类的概率时也将忽略缺失属性,不影响最终结果.

    朴素贝叶斯算法中使用拉普拉斯平滑,拉普拉斯因子的大小如何确定

    • 朴素贝叶斯中的拉普拉斯因子无法通过公式求出最优大小,需要根据程序员的经验去设置,使用交叉验证的方式求取最优大小。

    为什么说朴素贝叶斯是高偏差低方差

    • Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度。
    • Variance反映的是模型每一次输出结果与模型输出的平均值之间的误差,即模型的稳定性,数据是否集中。
    • 对于朴素贝叶斯,它简单的假设了各个数据之间是独立的,是一个被严重简化了的模型。对于简单模型,通常拟合的效果不好,导致欠拟合的问题。整体 来看使得偏差高,方差小。

    简单模型与复杂模型的偏差与方差

    * 简单的模型进行预测,会得到低方差,高偏差,通常会出现欠拟合。
    * 复杂的模型进行预测,会得到高方差,低偏差,通常出现过拟合。
    * 损失函数=偏差^2+方差+固有噪音。
    

    高度相关的特征对朴素贝叶斯有什么影响

    • 假设有两个特征高度相关,相当于该特征在模型中发挥了两次作用(计算两次条件概率),使得朴素贝叶斯获得的结果向该特征所希望的方向进行了偏 移,影响了最终结果的准确性,所以朴素贝叶斯算法应先处理特征,把相关特征去掉。

    优缺点

    * 对缺失数据不敏感,对异常值也不太敏感。
    * 能够很容易处理多分类任务。
    * 要求各个属性独立。
    

    集成学习

    随机森林为什么不容易过拟合

    • 随机森林由很多树组合在一起,单看每一棵树都可以是过拟合的,但是,既然是过拟合,就会拟合到非常小的细节上,因此随机森林通过引入随机性,让每一棵树拟合的细节不同,这时再把这些树组合在一起,过拟合的部分就会自动被消除掉。所以随机森林不容易过拟合,但这不是绝对的,随机森林也是有可能出现过拟合的现象,只是出现的概率相对低。
    • 就好比人类社会,有计算机的专家,也有神经生物学的专家,还有一个天文学的专家,这就像三颗过拟合的树,对于各自领域性能都很优秀,但对于宗教这类知识,三个人都不是很懂。由于三个人都处在同一个社会中,在社会中长久下来也有或多或少的接触过这方面的知识,于是三个人可以通过综合判断,得出宗教方面的一些正确答案。

    随机森林算法训练时主要需要调整哪些参数

    • n_estimators:随机森林建立子树的数量。较多的子树一般可以让模型有更好的性能,但同时会让代码变慢,严重的时候甚至还会导致过拟合!故需要通过交叉验证或者袋外错误率oob估计来选择最佳的随机森林子树数量。
    • max_features:随机森林允许单个决策树使用特征的最大数量。增加max_features一般能提高模型的性能,因为在每个树节点上,我们有更多的选择可以考虑。然而,这未必完全是对的,因为它降低了单个树的多样性(泛化能力),但这正是随机森林的一大特点。可以肯定的是,增加max_features会降低算法的速度,同时还会使得模型更加容易过拟合,因此,我们需要适当的平衡和选择最佳的max_features。
    • max_depth:决策树的最大深度。随机森林默认在决策树的建立过程中不会限制其深度,这也是随机森林的一大特点,其不必担心单棵树的过拟合。
    • min_samples_split:内部节点再划分所需要的最小样本数。如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。
    • min_samples_leaf:叶子节点最少样本数。这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。
    • max_leaf_nodes:最大叶子节点数。通过限制最大叶子节点数,可以防止过拟合,默认是“None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。
    • min_impurity_split:节点划分最小不纯度。这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差,信息增益等)小于这个阈值,则该节点不再生成子节点。即为叶子节点。一般不推荐改动,默认值为1e-7。

    随机森林为什么不能用全样本去训练m颗决策树

    • 全样本训练忽视了局部样本的规律,使各个决策树趋于相同,对于模型的泛化能力是有害的,使随机森林算法在样本的训练集失去了随机性。

    随机森林算法的优缺点

    优点:

    • 训练可以高度并行化且性能普遍较好,对于大数据时代的大样本训练速度有优势。
    • 随机森林对于高维数据集的处理能力好,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够 输出变量的重要性程度,这是一个非常便利的功能!
    • 在对缺失数据进行估计时,随机森林是一个十分有效的方法。就算存在大量的数据缺失,随机森林也能较好地保持精确性,一方面因为随机森林随机选取 样本和特征,另一方面因为它可以继承决策树对缺失数据的处理方式。如果缺失数据的样本只是少量,随机森林甚至可以帮助去估计缺失值。
    • 由于采用了随机采样,训练出的模型的方差小,泛化能力强。
    • 对于不平衡数据集来说,随机森林可以平衡误差。当存在分类不平衡的情况时,随机森林能提供平衡数据集误差的有效方法。(对正类和反类分别进行重 采样或欠采样, 之后采用多数投票的方法进行集成学习。或者不做采样,调整类别的判定阈值。)
    • 随机森林能够解决分类与回归两种类型的问题,并在这两方面都有相当好的估计表现。(虽然RF能做回归问题,但通常都用RF来解决分类问题)。

    缺点:

    • 随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上会过拟合)。
    • 对于许多统计建模者来说,随机森林给人的感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试。可能有很多相似的决策树,掩盖了真实的结果。
    • 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类(随机性大大降低了)。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。
    • 执行数据虽然比boosting等快(随机森林属于bagging),但比单只决策树慢多了,且精度一般不如boosting方法。

    Adaboost

    Adaboost原理

    • Adaboost分类器利用同一种基分类器(弱分类器),基于分类器的错误率分配不同的权重参数,同时根据每一次基分类器的预测结果对样本权重进行更新,最后累加加权的预测结果作为输出。

    • Adaboost对同一个训练样本集训练不同的弱分类器,按照一定的方法把这些弱分类器集合起来,构造一个分类能力很强的强分类器,即“三个臭皮匠赛过一个诸葛亮”。

    • bagging 中的分类器权重是相等的;而 boosting 中的分类器加权求和,所以权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。同时bagging中样本的权重是一样的,而Adaboost中样本的权重会发生变化。

    • bagging 是由不同的分类器(1.数据随机化 2.特征随机化)经过训练,综合得出的出现最多分类结果;boosting 是通过调整已有分类器错分的那些数据来获得新的分类器,得出目前最优的结果。

    • 随机森林对异常值不敏感,Adaboost对异常值(Outlier)敏感。

    • 随机森林模型是降低方差的模型。Boosting模型为降低偏差的模型

    优缺点

    * Adaboost作为分类器时,分类精度很高。
    * 不容易发生过拟合
    * 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
    

    GBDT

    思想

    • Gradient boosting的主要思想是,每一次建立单个学习器时,是在之前建立的模型的损失函数的梯度下降方向。损失函数越大,说明模型越容易出错,如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不断改进,而最好的方式就是让损失函数在其梯度的方向上下降。

    • GBDT的核心就在于,每一颗树学的是之前所有树结论和的负梯度,这个负梯度就是一个加预测值后能够得到真实值的累加量。所以为了得到负梯度,GBDT中的树都是回归树,而不是分类树,即使GBDT是用来处理分类问题。

    SVM

    思想

    • 我们可以找到多个可以分类的超平面将数据分开,并且优化时希望所有的点都离超平面远。但是实际上离超平面很远的点已经被正确分类,我们让它离超平面更远并没有意义。反而我们最关心是那些离超平面很近的点,这些点很容易被误分类。如果我们可以让离超平面比较近的点尽可能的远离超平面,那么我们的分类效果会好有一些。

    聚类

    • K-means思想,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。
    • DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的。

    DBSCAN 的优缺点

    * 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
    * 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
    * 不用输入K 值
    

    PCA

    • 思想:就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。数据从n维降到n'维肯定会有损失,但是我们希望损失尽可能的小。
    • 标准:样本点到这个超平面的距离足够近,或者说样本点在这个超平面上的投影能尽可能的分开。

    相关文章

      网友评论

          本文标题:常见算法思想

          本文链接:https://www.haomeiwen.com/subject/ziojoqtx.html