机器学习基础概念

1. 基础概念

(1)  10折交叉验证(10-fold cross-validation)

用来测试算法的准确性。常用的测试方法。将数据集分成10份。轮流将其中的9份作为训练数据集,1份作为测试数据,进行试验,每次试验都会得到相应的正确率(或差错率)。10次结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证,再求平均值,对算法的准确性进行估计。

(2)PCA主成分分析

优点:降低数据的复杂性,识别最重要的多个特征。

缺点:不一定需要,且可能损失有用的信息。

适用类型:数值型数据

技术类型:降维技术

在PCA中,数据从原来的坐标系转换到新的坐标系,新坐标系的选择是由数据本身决定的,第一个新坐标轴选择原始数据中方差最大的方向,第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复,重复次数为原始数据中特征的数目。会发现大部分方差都包含在最前面的几个新坐标轴中。因此可以忽略余下的坐标轴,即对数据进行了降维处理。除了PCA主成分分析技术,其他的降维技术还有ICA(独立成分分析),因子分析。

(3)分类器组合:将不同的分类器组合起来,而这种组合结果则被称为集成方法(ensemble method),或者元算法(meta-algorithm)。

(4)回归算法和分类算法很像,但是回归算法和分类算法在输出标称类别值不同,回归方法会预测出一个连续的值,分类只能预测类别。

(5)SVD(singular value decomposition) 奇异值分解

优点:简化数据,去除噪声,提高算法的结果

缺点:数据转化可能难以理解

使用数据类型:数值型数据

SVD是矩阵分解的一种数据类型。SVD是一种强大的降维工具,我们可以利用SVD来逼近矩阵并从中提取重要特征。通过保留矩阵80%~90%的能量,就可以得到重要的特征并去掉噪声。SVD已经运用到多个应用中,其中一个成功的应用案例就是推荐引擎。推荐引擎将物品推荐给用户,协同过滤则是一种基于用户喜好和行为数据的推荐和实现方法。协同过滤的核心是相似度计算方法,有很多相似度计算方法都可以应用于计算物品壶用户之间的相似度。通过在低位空间计算相似度,SVD提高了推荐引擎的效果。

(9)共线性

是指线性回归模型中的解释变量之间犹豫存在精确的相关关系或者高度相关关系而使模型估计失真或难以估计。

2. 基础算法

(1)logistic回归

优点:计算代价不高,易于理解和实现

缺点:容易欠拟合,分类精度可能不高

适用数据类型: 数值型和标称型数据

类别:分类算法

使用场景:解决二分类问题

Logistic回归算法基于Sigmoid函数,或者说Sigmoid就是逻辑回归函数。Sigmoid函数定义如下:1/(1+exp(-z))。函数值域范围是(0,1)。

逻辑回归模型分解如下:

(1)首先将不同维度属性值和对应的一组权重加和:公式如下

z=w0+w1*x1+...+wm*xm。(x1,x2,..,xm是样本数据的各个特征,维度为m)。这里是一个线型回归。w权重值就是需要经过训练学习得到的数值,具体w向量的求解,就需要用到极大似然估计和将似然估计函数带去到优化算法来求解。最常用的最优化算法有  梯度上升法。由此可见,逻辑回归函数虽然是一个非线性的函数,但其实其去除Sigmoid映射函数之后,其他步骤都和线型回归一致。

(2)然后将上述的线性目标函数z带入到Sigmoid逻辑回归函数,可以得到值域为(0,0.5)和(0.5,1)两类之。等于0.5的处理可以自己定。这样其实就得到了2分类数据,也体现了2分类的概念。

logistic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,参数在求解过程中可以有最优化算法来完成。在最有化算法,最常用的就是梯度上升法,该算法可以简化为随机梯度上升法。

(2)SVM(soupport vector machine)支持向量机

优点:泛化错误率第,计算开销不大,结果易解释

缺点:对参数调节和核函数的选择敏感,原始分类器不加修饰仅适用于处理二分类问题

适用数据类型: 数值型和标称型数据

类别:分类算法

使用场景:解决二分类问题

(3)决策树

优点:计算复杂度不高,输出结果易于理解,对中间值的确实不敏感,可以处理不相关的特征数据。

缺点:可能会产生匹配过度的问题。

算法类型:分类算法

数据要求:树的构造只适用于标称型的数据,数值型的数据必须离散化

在构造决策树时,需要解决的第一个问题就是,当前数据集上那个儿疼正在划分数据分类时起决定性作用。

决策树生成步骤简述如下(也有别的生成决策树的步骤):

a. 根据给定的训练数据根据熵最大原则根据每一个维度来划分数据集,找到最关键的维度。

b.当某个分之下所有的数据都属于同一分类规则终止划分并返回类标签,否则在此分支上重复实施过程a

c.以此计算就将类标签构建成了一颗决策树

d.依靠训练数据构造了决策树之后,就可以将它用于实际的数据分类。

(4)朴素贝叶斯

优点:在数据较少的情况下仍然有效,可以处理多分类问题。

缺点:对于输入数据的准备方式较为敏感。

适用数据类型:标称型数据

朴素贝叶斯是贝叶斯理论的一部分,贝叶斯决策理论的核心思想,及选择具有高概率的决策。朴素贝叶斯的两个假设

每个特征之间相互独立

每个特征同等重要

(5)K-近邻算法(KNN)

优点:精度高,对异常值不敏感,五数据输入假定

缺点:计算复杂度高,空间复杂度高

适用数据类型:标称型数据和数值型

算法分类:分类算法

算法原理简述:存在一个样本数据集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征和样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签。一般来说,只选择样本数据集中前k个最相似的数据,这就是k-近邻算法只能够k的出处,通常k是不大于20 的证书。最后选择k个最相似数据中出现的次数最多的分类,作为新的数据分类。

(6)线性回归(Linear Regression)

优点:结果已于理解,计算上不复杂

缺点:对非线性数据拟合不好

适用数据类型:标称型数据和数值型

算法类型:回归算法

在统计学中,线性回归是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量的情况叫做多元回归。

岭回归(ridge regression):是一种专用于共线性数据分析的有偏估计回归方法,实际上是一种改良的最小二乘估计法,通过房企最小二乘法的无偏性,以损失部分信息、降低精度为代价,获得回归系数更为符合实际、更可靠的回归方法,对病态数据的耐受性远远强于最小二乘法。

岭回归分析法是从根本上消除复共线性影响的统计方法

总结:与分类一样,回归也是预测目标值的过程。回归于分类的不同点在于,前者预测连续型变量,后者预测离散变量。在回归方程里,求得特征对应的最佳回归系统的方法是最小化误差的平方和。

(7)树回归

优点:可以对复杂和非线性的数据建模

缺点:结果不易理解

适用数据类型:标称型数据和数值型

算法类型:回归算法

线性回归方法可以有效的拟合所有样本点(局部加权线性回归除外)。当数据用于众多特征并且特征之间关系十分复杂时,构建全局模型的回归算法是比较困难的。此外实际中很多问题为非线性的,例如分段函数,不可能用全局线性模型进行拟合。树回归将数据集切分成多份易建模的数据,然后利用线性回归进行建模和拟合。较为经典的树回归算法为CART(classification andregression trees)

(8)K-Means算法

优点:容易实现

缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢

适用数据类型:数值型

算法类型:聚类算法

K-Means算法属于非监督学习算法。

K-Means算法的基本步骤:

(1)从数据对象中随机的初始化K个初始点作为质心。然后将数据集中的每个点分配到一个簇中,具体来讲每个点找到距其最近的质心,并将其分配给质心所对应的簇

(2)计算每个簇中样本的均值,然后用均值更新该簇的质心。然后划分簇结点。

(3)反复迭代(2)过程,当簇对象不再发生变化时,或者误差在评测函数预估的范围时,停止迭代。

算法的时间复杂度为O(nkt),t为迭代次数。

注意:出世之心的选取以及距离计算公式的好坏,将影响到算法的整体性能。

(9)算法关联分析

频繁项集(frequent item sets):经常出现在一块的物品的集合。

关联规则(association rules):按时两种物品间可能存在很强的关系。

项集的支持度(support):数据集中包含该项记录所占的比例。

关联分析的目标包括两项:发现频繁项集和发现关联规则,首先找到频繁项集,然后才能得到关联规则

Aprior算法:

优点:易编码实现

缺点:在大型数据集上可能较慢。

适用数据类型:数值型或标称型数据

原理:如果某个项集是频繁项集,那么他的所有子集也是频繁项集

FP-growth

优点:一般要快于Aprior算法

缺点:实现比较困难,在某些数据集上性能会下降。

适用数据类型:标称型数据

该算法也是用于发现频繁项集的算法,以FP树的结构存储构件元素,其他Aprior算法的性能要好很多。发现频繁项集的过程如下:(1)构建FP树(2)从FP树种挖掘频繁项集

FP-growth算法利用Aprior原则,执行更快。AP弱弱算法产生候选项集,然后扫描数据库来检查他们是否频繁。由于只对数据库扫描两次,因此FP-growth算法执行更快。在FP-growth算法中,数据集存储在一个称为FP树的结构中。FP书构建完成后,可以通过查找元素项的条件以及FP树来发现频繁项集,该过程不断以更多元素作为条件重复进行,直到FP树只包含一个元素为止。

 

RF、GBDT、XGBoost面试级整理

RF、GBDT和XGBoost都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性。

  根据个体学习器的生成方式,目前的集成学习方法大致分为两大类:即个体学习器之间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表就是Boosting,后者的代表是Bagging和“随机森林”(Random Forest)。

1、RF

1.1 原理

  提到随机森林,就不得不提Bagging,Bagging可以简单的理解为:放回抽样,多数表决(分类)或简单平均(回归),同时Bagging的基学习器之间属于并列生成,不存在强依赖关系。

  Random Forest(随机森林)是Bagging的扩展变体,它在以决策树 为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,因此可以概括RF包括四个部分:1、随机选择样本(放回抽样);2、随机选择特征;3、构建决策树;4、随机森林投票(平均)。

  随机选择样本和Bagging相同,随机选择特征是指在树的构建中,会从样本集的特征集合中随机选择部分特征,然后再从这个子集中选择最优的属 性用于划分,这种随机性导致随机森林的偏差会有稍微的增加(相比于单棵不随机树),但是由于随机森林的‘平均’特性,会使得它的方差减小,而且方差的减小补偿了偏差的增大,因此总体而言是更好的模型。

  (As a result of this randomness, the bias of the forest usually slightly increases (with respect to the bias of a single non-random tree) but, due to averaging, its variance also decreases, usually more than compensating for the increase in bias, hence yielding an overall better model.)

  在构建决策树的时候,RF的每棵决策树都最大可能的进行生长而不进行剪枝;在对预测输出进行结合时,RF通常对分类问题使用简单投票法,回归任务使用简单平均法。

  RF的重要特性是不用对其进行交叉验证或者使用一个独立的测试集获得无偏估计,它可以在内部进行评估,也就是说在生成的过程中可以对误差进行无偏估计,由于每个基学习器只使用了训练集中约63.2%的样本,剩下约36.8%的样本可用做验证集来对其泛化性能进行“包外估计”。

  RF和Bagging对比:RF的起始性能较差,特别当只有一个基学习器时,随着学习器数目增多,随机森林通常会收敛到更低的泛化误差。随机森林的训练效率也会高于Bagging,因为在单个决策树的构建中,Bagging使用的是‘确定性’决策树,在选择特征划分结点时,要对所有的特征进行考虑,而随机森林使用的是‘随机性’特征数,只需考虑特征的子集。

1.2 优缺点

  随机森林的优点较多,简单总结:1、在数据集上表现良好,相对于其他算法有较大的优势(训练速度、预测准确度);2、能够处理很高维的数据,并且不用特征选择,而且在训练完后,给出特征的重要性;3、容易做成并行化方法。

  RF的缺点:在噪声较大的分类或者回归问题上会过拟合。

2、GBDT

  提GBDT之前,谈一下Boosting,Boosting是一种与Bagging很类似的技术。不论是Boosting还是Bagging,所使用的多个分类器类型都是一致的。但是在前者当中,不同的分类器是通过串行训练而获得的,每个新分类器都根据已训练的分类器的性能来进行训练。Boosting是通过关注被已有分类器错分的那些数据来获得新的分类器。

  由于Boosting分类的结果是基于所有分类器的加权求和结果的,因此Boosting与Bagging不太一样,Bagging中的分类器权值是一样的,而Boosting中的分类器权重并不相等,每个权重代表对应的分类器在上一轮迭代中的成功度。

2.1 原理

  GBDT与传统的Boosting区别较大,它的每一次计算都是为了减少上一次的残差,而为了消除残差,我们可以在残差减小的梯度方向上建立模型,所以说,在GradientBoost中,每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方法,与传统的Boosting中关注正确错误的样本加权有着很大的区别。

  在GradientBoosting算法中,关键就是利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一棵CART回归树。

  GBDT的会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树(尽管GBDT调整后也可以用于分类但不代表GBDT的树为分类树)。

2.2 优缺点

  GBDT的性能在RF的基础上又有一步提升,因此其优点也很明显,1、它能灵活的处理各种类型的数据;2、在相对较少的调参时间下,预测的准确度较高。

  当然由于它是Boosting,因此基学习器之前存在串行关系,难以并行训练数据。

3、XGBoost

3.1 原理

  XGBoost的性能在GBDT上又有一步提升,而其性能也能通过各种比赛管窥一二。坊间对XGBoost最大的认知在于其能够自动地运用CPU的多线程进行并行计算,同时在算法精度上也进行了精度的提高。

  由于GBDT在合理的参数设置下,往往要生成一定数量的树才能达到令人满意的准确率,在数据集较复杂时,模型可能需要几千次迭代运算。但是XGBoost利用并行的CPU更好的解决了这个问题。

  其实XGBoost和GBDT的差别也较大,这一点也同样体现在其性能表现上,详见XGBoost与GBDT的区别。

4、区别

4.1 GBDT和XGBoost区别

传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归);

传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;

XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也是XGBoost优于传统GBDT的一个特性;

shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);

列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过 拟合,还能减少计算;

对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动 学习出它的分裂方向;

XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行 的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代 中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

GBDT训练过程

首先申请分配模型空间gbdt_model,并且计算所有样本在每一维特征上的平均值。假如我们需要训练infbox.tree_num棵树,每一棵的训练流程为:从x_fea_value中采样gbdt_inf.sample_num个样本,index[i]记录了第i个结点所对应的样本集合x_fea_value中的下标,其始终保存了训练本棵树的所有采样样本对应样本空间的下标值,同时,结点的顺序是按该棵树所有结点按广度优先遍历算法遍历的结果的。即当前树gbdt_single_tree只有一个根结点0,其中gbdt_single_tree->nodestatus为GBDT_TOSPLIT,ndstart[0]=0,ndcount[0]=sample_num,ndavg为所有采样样本的y的梯度值均值。下面就是对这个结点进行分裂的过程:首先nodeinfo ninf这个结构体保存了当前分裂结点的一些信息,比如结点中样本开始的下标(指相对于index的下标值,index指向的值才是样本空间中该样本的下标),样本结束下标(同上),样本结点数,样本结点的y的梯度之和等。循环rand_fea_num次,随机采样feature,来计算在该feature分裂的信息增益,计算方式为(左子树样子目标值和的平方均值+右子树目标值和的平方均值-父结点所有样本和的平方均值)。选过的feature就不会再选中来计算信息增益了。利用data_set来保存当前分裂过程所用到的一些信息,包括候选feature池,选中feature对应的采样样本的特征值及其y值。data_set->order_i保存了左右子树对应结点在样本集合中的下标。计算每个feature的信息增益,并取最大的,保存分点信息到spinf中,包括最优分裂值,最优分裂feature。然后,将该结点小于分裂值的结点样本下标与大于分裂值的结点样本下标都保存在data_set->order_i中,nl记录了order_i中右子树开始的位置。更新index数组,将order_i中copy到index中。将nl更新到spinf中。注意index数组从左至右保存了最终分裂的左子树与右子树样本对应在样本空间的下标。

至此,我们找到了这个结点的最优分裂点。gbdt_single_tree->ndstart[1]保存了左孩子的开始下标(指相对于index的下标值,index指向的值才是样本下标),gbdt_single_tree->ndstart[2]保存了右孩子的开始下标,即nl的值。同理,ndcount,depth等也是对就保存了左右孩子信息。gbdt_single_tree->lson[0]=1,gbdt_single_tree->lson[0]=2即表示当前结点0的左子树是1,右子树是2。当前结点分裂完了之后,下一次就同理广度优先算法,对该结点的孩子继续上述步骤。

该棵树分裂完成之后,对每一个样本,都用目前模型(加上分裂完成的这棵树)计算预测值,并且更新每一个样本的残差y_gradient。计算过程:选取当前结点的分裂feature以及分裂值,小于则走左子树,大于则走右子树,直到叶子结点。预测值为shrink*该叶子结点的样本目标值的均值。

训练第二棵树同理,只是训练的样本的目标值变成了前面模型预测结果的残差了。这点就体现在梯度下降的寻优过程。

一、要理解GBDT当然要从GB(Gradient Boosting)和DT(Decision Tree)两个角度来理解了;

二、GB其实是一种理念,他并不是这一个具体的算法,意思是说沿着梯度方向,构造一系列的弱分类器函数,并以一定权重组合起来,形成最终决策的强分类器;注意,这里的梯度下降法是在函数空间中通过梯度下降法寻找使得LOSS最小的一个函数,即L(y,f)对f求层,区别于传统的梯度下降法选择一个方向(对x求导);那么问题就来了,对函数求导?这也太难了吧。所以就有了一个近似的方法,根据经验风险最小化原则,我们认为在训练集上使得LOSS最小的函数,往往在测试集上表现会好,即在训练集上寻优;因此,把求导的函数理解成在训练集上该函数对应的离散的函数值,对函数求导就变成了对样本的函数值向量求导;因此就可以得到一个梯度向量,表示寻找到的最优函数, 这个函数就是一个新的弱分类器;

三、通过回归树来拟合这个梯度向量,就得到了DT,而每棵树就对应上面的函数,其预测值就是函数值;

四、当我们选择平方差损失函数时,函数向量就表示成前一棵回归树在样本空间上的预测值,则对函数向量求梯度就等于目标值减去预测值,即我们所说的残差向量;因此,下一棵回归树就是在拟合这个残差向量;

五、回归树拟合可以通过平均最小均方差来寻找分裂点,生成一个树;当然这棵树不可能完全拟合得好,因此,又会通过对损失函数求梯度,得到新的残差向量;

六、对初始分类器(函数)的选择就可以直接用0,通过平方差LOSS函数求得的残差当然就是样本本身了;也可以选择样本的均值;

七、一棵树的分裂过程只需要找到找到每个结点的分裂的特征id与特征值,而寻找的方法可以是平均最小均方差,也可以是使得(左子树样本目标值和的平方均值+右子树样本目标值和的平方均值-父结点所有样本目标值和的平方均值)最大的那个分裂点与分裂特征值等等方法;从而将样本分到左右子树中,继续上面过程;

八、用残差更新每个样本的目标值:叶子节点的均值作为落到该叶子节点的样本的预测值,使用目标值减去预测值,得到该样本的残差,作为下一棵树的训练目标;

九、GBDT并行化:

1、按行并行化,将样本按行分成N份,分别在N个节点上做计算;

2、并行建立一棵的过程:

1>在0号节点上对特征随机采样,生成建立一棵树需要用到的特征,并分发到N个节点上;

2>在0号结点上维护每一维采样特征所有可能的特征值;

3>将每一维特征的每一个可能的特征值分发到N个节点上;

4>每一个节点并行计算该节点上所有样本与分发得到的特征值的比较结果,分割成左右子树,并计算增益;

5>归并所有节点的增益,在0号结点得到每一个特征在每一个特征值的增益(f,v,incr);

6>在0号结点上找出最大的(f,v,incr),并作为本次的最佳裂点,分发到N个节点上;

7>N个节点将样本分割成左右子树;

8>对左右子树继续上面过程,直到叶子节点数目满足要求;

3、并行建立第二棵树;

因此,GBDT并行化包括了样本并行化与特征分裂点计算的并行化;其中最耗时的仍然是需要遍历特征的所有可能的特征值,并计算增益寻找最优分裂点的过程;可以采用对特征值直方图采样,不用遍历所有特征值来优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归去来?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值