您的位置:首页 > 职场人生

机器学习算法的面试表达

2017-01-04 13:18 169 查看
面试的时候被问到机器学习算法,由于平时没有整理过,回答的很乱,所以整理一下面试时的表达。其中有些知识点没写,要自行掌握。如果面试官问到了就说,没问到就略过。

一、分类__决策树

决策树利用剪枝来解决过拟合的问题。

过拟合:用以下算法产生的决策树非常详细,考虑了每个属性,用它对训练样本进行分类时,分类效果非常好,误差率极低,但是用它对测试样本进行分类时,分类效果极差,误差率高,这就是过拟合。

1、ID3算法(迭代二叉树3代)

ID3算法采用贪心方法,它的决策树是以自顶向下的递归的方式构造的。ID3算法在决策树各级节点上选择属性的时候,选择信息增益作为属性的选择标准,直至满足终止条件。

信息增益 =
划分前的信息熵 - 按某属性划分后的信息熵

终止条件:(1)划分出来的类属于同一个类

    (2)没有属性可以划分了

贪心算法:在解决某个问题时,不考虑整体最优,而考虑在某种情况下的局部最优解。

缺点:只适用于离散属性的数据集;采用信息增益选择属性时偏向于选择取值较多的属性。

2、C4.5算法

C4.5算法采用贪心方法,它的决策树是以自顶向下的递归的方式构造的。C4.5算法在决策树各级节点上选择属性的时候,选择信息增益率作为属性的选择标准,并进行剪枝操作,直至满足终止条件。

信息增益率 =
信息增益 / 分裂信息

分裂信息 =
由训练数据集D划分为对应属性A的v个输出的v个分分区产生的信息

剪枝:C4.5采用悲观剪枝,悲观剪枝使用训练集估计错误率

优点:C4.5克服了ID3算法用信息增益选择属性时偏向于选择取值较多的属性的不足;产生的分类规则易于理解,准确性较高。

缺点:在构造树的过程中,需要多次扫描整个数据集,导致算法低效。

3、CART(classification and regression tree)

采用二元递归分割技术,将当前样本集划分为两个子样本集,使生成的每个非叶子结点都有两个分支。采用Gini指数度量数据分区或训练元组集的不纯度,具有最小基尼指数的属性选择为分裂属性。

优点:抽取规则简便且易于理解,存在缺失值时非常稳健

缺点:要求被选择的属性只能产生两个子节点,类别过多时,错误可能增加的较快

剪枝:代价复杂度剪枝算法(后剪枝),它从树的底部开始,对于每一个内部节点N,计算它的代价复杂度以及该子树剪枝后的代价复杂度(即用一个树叶节点替换),比较两个复杂度,若剪枝后的复杂度较小,则剪枝,否则保留该子树。

4、GBDT(gradient boosting decision tree)

又叫MART(multiple additive regression tree)。是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的输出结果累加起来就是最终答案。GBDT的核心在于:每一棵树学的是之前所有树的结论和的残差,直到残差为0,残差=
真实值-
预测值。

优点:应用范围广,可应用于所有回归问题,也可以用于二分类问题,解决过拟合问题。

5、随机森林

随机森林由很多随机的、不相关的决策树构成,分类时,每棵树都投票并返回票数最高的类。

优点:能处理高维数据,且不用做特征选择;训练速度快;实现简单

缺点:模型太小,可能数百兆的内存才能结束一个森林,而且评估的速度也很慢

 

二、分类__朴素贝叶斯算法

类条件独立性:朴素贝叶斯算法假定一个属性值在给定类上的影响独立于其他属性的值。

贝叶斯定理:


后验概率即为条件概率,先验概率为p(x)

朴素贝叶斯算法:给定元组X,计算在条件X下每个类的后验概率,预测结果为X属于具有最高后验概率的类。当给定具有许多属性的数据集时,计算P(X|C)的开销太大,所以做类条件独立性假设得:


xk表示元组X在属性Ak的值。

优点:对小规模的数据表现良好,适合多分类任务

缺点:对输入数据的表达式敏感,对关联性强的特征表现不好

 

三、分类__SVM

支持向量机是一种建立在统计学理论的VC维理论结构风险最小原理基础之上的对线性和非线性数据进行分类的方法。它使用一种非线性映射,把原训练数据映射到较高的维上,并搜索最佳分离超平面。(即(几何)间隔最大化

为什么要选择间隔最大分类器:

(1)假如我们已经学习了一个模型,将平面线性分割为两个部分(X类和Y类),A,B,C三点,A点离分界面很近,C点离分界面很远,那么,我们可以很肯定的说C点属于X类,虽然现在看A点属于X类,但是很小的波动就可能使它跑到Y类的范围内。总的来说,一个点离分界面越远,我们对预测的结果越有信心。例子:某次考试以60分为界,大于60为优生,小于60为差生,我们能够判断90分肯定是优生,但是不能完全肯定61分是优生。

(2)数学角度说明:几何间隔与样本的误分次数存在关系:误分次数

,其中

为样本到分类面的间隔,R为所有样本中最长向量值(也就是说代表样本分布有多广)。误分次数在一定程度上代表分类器的误差。

核函数的本质:(高斯径向基核函数,h多项式核函数,s型核函数)

(1)实际中常遇到线性不可分的样例,此时,最常用的做法是把样例特征映射到高维空间去,

(2)但进一步,如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的,核函数就可以解决这个问题,

(3)核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但是核函数绝就绝在它先在低维上进行计算,而将实质上的分类效果表现在高维上,也就是说,避免了直接在高维空间中的复杂计算。

优点:低泛化误差,较好的泛华性能,不容易过拟合,计算复杂度较低

缺点:对参数和核函数的选择比较敏感

 

四、分类__KNN算法

当给定一个未知元组时,计算未知元组与每个样本点的距离(欧氏距离,马氏距离等)并排序,选出前K个最小距离的样本,根据K各样本的标签进行投票,得到最后的分类类别。

K值较大:减小噪声的影响,但会使类别之间的界限变得模糊,精度降低

K值较小:分类获得的有效信息少,甚至丢失

优点:准确度高,对outlier不敏感

缺点:计算量大,存在样本不平衡问题,需要大量的内存

 

五、分类__关联分类

关联分类算法主要包括以下步骤:

(1)找出数据中经常出现的属性-值对,即频繁项集;

(2)分析得到的频繁项集,产生每个类的关联规则,它们满足置信度和支持度标准;

(3)组织规则如对规则进行剪枝,进而进行规则排序,形成基于规则的分类器。

CBA(Classification Based on Association)算法使用迭代方法挖掘频繁项集,选择最高置信度的规则;

CMAR(Classification based on Multiple Association Rules)算法使用FP-growth算法挖掘频繁项集。

缺点:存在不平衡数据的问题

 

六、分类__提高分类准确率的技术:

1、Bagging(袋装= boostrap aggregation自助聚集)

是一种在原始数据集上通过有放回抽样重新选出S个数据集来训练分类器的集成技术。对新样例分类时,投票表决,结果最高的类别即为最终类别。

2、AdaBoost(Adaptive Boosting)

第一步:初始化训练数据的权值分布。如果有N个样本,则每个训练样本最开始时都被赋予相同的权重:1/N

第二步:训练弱分类器。具体训练过程中,如果某个样本点已经被准确的分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本未被准确分类,那么它的权值就提高。然后,权值更新过的样本集用于训练下一个分类器,整个训练过程如此迭代下去。

第三步:将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率较大的弱分类器的权重。

Adaptive在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器,同时,在每一轮中加入一个新的弱分类器,知道达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

优点:低泛化误差,容易实现

缺点:对outlier敏感

 

七、聚类__K-Means

K:簇的个数

算法步骤:

(1)从D中任意选择K个对象作为初始簇的中心

(2)Repeat

(3)根据簇中对象的均值,计算每个对象到中心对象的距离,将每个对象分类到最相似的簇

(4)更新簇均值,即重新计算每个簇中对象的均值

(5)Until不再发生变化

优点:算法简单、快速,当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好

缺点:只有在簇的平均值被定义的情况下才能使用;必须事先给出K值;对初始值敏感,不同的初始值可能会导致不同的聚类结果;对噪声和孤立点数据敏感。

 

八、线性回归

用于回归,其基本思想是用梯度下降法对最小二乘法形式的误差函数进行优化,当然也可以用normal equation直接求得参数的解。

梯度下降法:找到某函数的最小值,最好的方法是沿着该函数的梯度方向探寻

梯度下降算法的迭代公式:

,其中为步长,即为移动量的大小。

优点:实现简单,计算简单

缺点:不能拟合非线性数据

 

九、logistic回归

用于分类,其基本思想是利用现有数据对分类边界线建立回归公式,以此进行分类。为了实现logistic回归,我们可以在每个特征上都乘以一个回归系数,然后把所有结果相加,将这个总和代入Sigmoid函数中,进而得到一个范围在0-1之间的数值。任何大于0.5的数据被分入1类,小于0.5的数据被分入0类。

Sigmiod函数:

,当z=0时,函数值为0.5

接下来要确定回归系数:基于最优化方法的最佳回归系数确定

梯度上升法:找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻

梯度上升算法的迭代公式:

,其中为步长,即为移动量的大小。

该公式一直被迭代执行,直到达到某个停止条件。

使用梯度上升算法找到最佳参数:伪代码如下:

每个回归系数初始化为1

重复R次:

  计算整个数据集的梯度

   使用alpha*gradient更新回归系数的向量

返回回归系数

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

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

 

十、Apriori
算法

先验性质:频繁项集的所有非空子集也一定是频繁项集

产生频繁项集的过程(使用找出):

(1)连接步:自身与自身重新组合

(2)剪枝步:对包含不频繁项集的子集都执行剪枝操作

优点:易编码实现

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

 

十一、FP-growth__用于挖掘频繁项集

只需要扫描项目表2次。

第一次:导出频繁项集的集合,并得到它们的支持度计数

第二次:构建FP树

优点:一般要快于Apriori

缺点:内存开销大,实现比较困难,在某些数据集上性能会下降

 

十二、主成分分析(PCA)

是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分。

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

百度解释:

“对于一个训练集,100个对象模板,特征是10维,那么它可以建立一个100*10的矩阵,作为样本。求这个样本的协方差矩阵,得到一个10*10的协方差矩阵,然后求出这个协方差矩阵的特征值和特征向量,应该有10个特征值和特征向量,我们根据特征值的大小,取前四个特征值所对应的特征向量,构成一个10*4的矩阵,这个矩阵就是我们要求的特征矩阵,100*10的样本矩阵乘以这个10*4的特征矩阵,就得到了一个100*4的新的降维之后的样本矩阵,每个特征的维数下降了。

注意:PCA并不是直接对原来的数据进行删减,而是把原来的数据映射到新的一个特征空间中继续表示,所有新的特征空间如果有29维,那么这29维足以能够表示非常非常多的数据,并没有对原来的数据进行删减,只是把原来的数据映射到新的空间中进行表示,所以你的测试样本也要同样的映射到这个空间中进行表示,这样就要求你保存住这个空间坐标转换矩阵,把测试样本同样的转换到相同的坐标空间中。

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

缺点:可能损失有用信息

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: