机器学习十三大经典算法

转自:https://blog.csdn.net/qq_24690701/article/details/81382411

一、决策树

根据一些 特征(feature )进行分类,每个节点提一个问题,通过判断,将数据分为两类,再继续提问。

判断的依据是信息熵增益,计算公式如下:

其中的n代表有n个分类类别(比如假设是2类问题,那么n=2)。分别计算这2类样本在总样本中出现的概率p1和p2,这样就可以计算出未选中属性分枝前的信息熵。

模型可以根据已有数据学习得到,再投入新数据的时候,就可以根据这棵树上的问题,将数据划分到合适的叶子上。

决策树的优点:

计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征;

缺点:

容易过拟合(后续出现了随机森林,减小了过拟合现象);

二、随机森林 

在源数据中随机选取数据,组成几个子集

S 矩阵是源数据,有 1~N 条数据,A、B、C 是feature,最后一列C是类别 

由 S 随机生成 M 个子矩阵

这 M 个子集得到 M 个决策树 ,将新数据投入到这 M 个树中,得到 M 个分类结果,计数看预测成哪一类的数目最多,就将此类别作为最后的预测结果 。

三、 Logistic回归(逻辑回归,对数几率回归)

Logistic是用来分类的,是一种线性分类器,需要注意的地方有:

1. logistic函数表达式为:

其导数形式为:

2. logsitc回归方法主要是用最大似然估计来学习的,所以单个样本的后验概率为:

到整个样本的后验概率:

其中:

通过对数进一步化简为:

3. 其实它的loss function为-l(θ),因此我们需使loss function最小,可采用梯度下降法得到。梯度下降法公式为:

Logistic回归优点:

1、实现简单;

2、分类时计算量非常小,速度很快,存储资源低;

缺点:

1、容易欠拟合,一般准确度不太高

2、只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;

四、线性回归

线性回归才是真正用于回归的,而不像logistic回归是用于分类,其基本思想是用梯度下降法对最小二乘法形式的误差函数进行优化,当然也可以用normal equation直接求得参数的解,结果为:

而在LWLR(局部加权线性回归)中,参数的计算表达式为:

因为此时优化的是:

由此可见LWLR与LR不同,LWLR是一个非参数模型,因为每次进行回归计算都要遍历训练样本至少一次。

线性回归优点:

实现简单,计算简单;

缺点:

不能拟合非线性数据;

五、PCA(主成分分析)

1.思想

PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。

2.PCA的计算过程:

     假设我们得到的2维数据如下:

     clip_image001[4]

     行代表了样例,列代表特征,这里有10个样例,每个样例两个特征。可以这样认为,有10篇文档,x是10篇文档中“learn”出现的TF-IDF,y是10篇文档中“study”出现的TF-IDF。也可以认为有10辆汽车,x是千米/小时的速度,y是英里/小时的速度,等等。

     第一步分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么一个样例减去均值后即为(0.69,0.49),得到

     clip_image002[4]

     第二步,求特征协方差矩阵,如果数据是3维,那么协方差矩阵是

     clip_image003[4]

     这里只有x和y,求解得

     clip_image004[4]

     对角线上分别是x和y的方差,非对角线上是协方差。协方差大于0表示x和y若有一个增,另一个也增;小于0表示一个增,一个减;协方差为0时,两者独立。协方差绝对值越大,两者对彼此的影响越大,反之越小。

     第三步,求协方差的特征值和特征向量,得到

     clip_image005[4]

     上面是两个特征值,下面是对应的特征向量,特征值0.0490833989对应特征向量为clip_image007[4],这里的特征向量都归一化为单位向量。

    第四步,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

     这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是clip_image009[6]

     第五步,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData为

     clip_image011[4]

     这里是

     FinalData(10*1) = DataAdjust(10*2矩阵)×特征向量clip_image009[7]

     得到结果是

     clip_image012[4]

     这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。

     上面的数据可以认为是learn和study特征融合为一个新的特征叫做LS特征,该特征基本上代表了这两个特征。

六、LDA(线性判别分析)

1.思想

LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。

2.类间散度矩阵

对于两类样本而言: 


对于多类问题,类间散度矩阵公式:


表示各个类样本均值的协方差矩阵。 

3.类内散度矩阵

对于两类问题而言: 


对于多类问题类内散度矩阵公式:


其中: 

表示第i类样本的协方差矩阵。所以Sw就是表示C类样本协方差矩阵之和。 

4.优化

定义过类内散度矩阵和类间散度矩阵后,我们可以将上述的优化目标重新写为:

这就是LDA欲最大化的目标,即Sb与Sw的广义瑞利商。 

七、SVM(支持向量机)

1. svm中的最优分类面是对所有样本的几何间隔最大。为什么要选择最大间隔分类器,答案就是几何间隔与样本的误分次数间存在关系:

其中的分母就是样本到分类间隔距离,分子中的R是所有样本中的最长向量值),即:

经过一系列推导可得为优化下面原始目标:

2. 拉格朗日理论:

可以将1中的优化目标转换为拉格朗日的形式(通过各种对偶优化,KKD条件),最后目标函数为:

我们只需要最小化上述目标函数,其中的α为原始优化问题中的不等式约束拉格朗日系数。

3. 对2中最后的式子分别w和b求导可得:

由上面第1式子可以知道,如果我们优化出了α,则直接可以求出w了,即模型的参数搞定。而上面第2个式子可以作为后续优化的一个约束条件。

4. 对2中最后一个目标函数用对偶优化理论可以转换为优化下面的目标函数:

而这个函数可以用常用的优化方法求得α,进而求得w和b。

5. 按照道理,svm简单理论应该到此结束。不过还是要补充一点,即在预测时有:

那个尖括号我们可以用核函数代替,这也是svm经常和核函数扯在一起的原因。

6. 最后是关于松弛变量的引入,因此原始的目标优化公式为:

此时对应的对偶优化公式为:

与前面的相比只是α多了个上界。

SVM算法优点:

可用于线性/非线性分类,也可以用于回归;

低泛化误差;

容易解释;

计算复杂度较低;

缺点:

对参数和核函数的选择比较敏感;

原始的SVM只比较擅长处理二分类问题;

八、朴素贝叶斯

1. 如果给出的特征向量长度可能不同,这是需要归一化为通长度的向量(这里以文本分类为例),比如说是句子单词的话,则长度为整个词汇量的长度,对应位置是该单词出现的次数。

2. 计算公式如下:

其中一项条件概率可以通过朴素贝叶斯条件独立展开。要注意一点就是的计算方法,而由朴素贝叶斯的前提假设可知,=,因此一般有两种,一种是在类别为ci的那些样本集中,找到wj出现次数的总和,然后除以该样本的总和;第二种方法是类别为ci的那些样本集中,找到wj出现次数的总和,然后除以该样本中所有特征出现次数的总和。

3. 如果中的某一项为0,则其联合概率的乘积也可能为0,即2中公式的分子为0,为了避免这种现象出现,一般情况下会将这一项初始化为1,当然为了保证概率相等,分母应对应初始化为2(这里因为是2类,所以加2,如果是k类就需要加k,术语上叫做laplace光滑, 分母加k的原因是使之满足全概率公式)。

朴素贝叶斯的优点:

对小规模的数据表现很好,适合多分类任务,适合增量式训练。

缺点:

对输入数据的表达形式很敏感。

九、KNN算法

KNN即最近邻算法,其主要过程为:

1. 计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);

2. 对上面所有的距离值进行排序;

3. 选前k个最小距离的样本;

4. 根据这k个样本的标签进行投票,得到最后的分类类别;

如何选择一个最佳的K值,这取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过各种启发式技术来获取,比如,交叉验证。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。

近邻算法具有较强的一致性结果。随着数据趋于无限,算法保证错误率不会超过贝叶斯算法错误率的两倍。对于一些好的K值,K近邻保证错误率不会超过贝叶斯理论误差率。

KNN算法的优点:

1. 思想简单,理论成熟,既可以用来做分类也可以用来做回归;

2. 可用于非线性分类;

3. 训练时间复杂度为O(n);

4. 准确度高,对数据没有假设,对outlier不敏感;

缺点:

1. 计算量大;

2. 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);

3. 需要大量的内存;

十、Boosting

主要以Adaboost为例,首先来看看Adaboost的流程图,如下:

从图中可以看到,在训练过程中我们需要训练出多个弱分类器(图中为3个),每个弱分类器是由不同权重的样本(图中为5个训练样本)训练得到(其中第一个弱分类器对应输入样本的权值是一样的),而每个弱分类器对最终分类结果的作用也不同,是通过加权平均输出的,权值见上图中三角形里面的数值。

Adaboost的简单版本训练过程如下:

1. 训练第一个分类器,样本的权值D为相同的均值。通过一个弱分类器,得到这5个样本(请对应书中的例子来看,依旧是machine learning in action)的分类预测标签。与给出的样本真实标签对比,就可能出现误差(即错误)。如果某个样本预测错误,则它对应的错误值为该样本的权重,如果分类正确,则错误值为0. 最后累加5个样本的错误率之和,记为ε。

2. 通过ε来计算该弱分类器的权重α,公式如下:

3. 通过α来计算训练下一个弱分类器样本的权重D,如果对应样本分类正确,则减小该样本的权重,公式为:

如果样本分类错误,则增加该样本的权重,公式为:

4. 循环步骤1,2,3来继续训练多个分类器,只是其D值不同而已。

测试过程如下:

输入一个样本到训练好的每个弱分类中,则每个弱分类都对应一个输出标签,然后该标签乘以对应的α,最后求和得到值的符号即为预测标签值。

Boosting算法的优点:

低泛化误差;

容易实现,分类准确率较高,没有太多参数可以调;

缺点:

对outlier比较敏感;

十一、聚类

根据聚类思想划分:

1. 基于划分的聚类:

K-means, k-medoids(每一个类别中找一个样本点来代表),CLARANS.

k-means是使下面的表达式值最小:

k-means算法的优点:

(1)k-means算法是解决聚类问题的一种经典算法,算法简单、快速。

(2)对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k<<n。这个算法通常局部收敛。

(3)算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

缺点:

(1)k-平均方法只有在簇的平均值被定义的情况下才能使用,且对有些分类属性的数据不适合。

(2)要求用户必须事先给出要生成的簇的数目k。

(3)对初值敏感,对于不同的初始值,可能会导致不同的聚类结果。

(4)不适合于发现非凸面形状的簇,或者大小差别很大的簇。

(5)对于”噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

2. 基于层次的聚类:

自底向上的凝聚方法,比如AGNES。

自上向下的分裂方法,比如DIANA。

3. 基于密度的聚类:

DBSACN,OPTICS,BIRCH(CF-Tree),CURE.

4. 基于网格的方法:

STING, WaveCluster.

5. 基于模型的聚类:

EM,SOM,COBWEB.

十二、奇异值分解

在线性代数中,SVD是复杂矩阵的因式分解。对于给定的m * n矩阵M,存在分解使得M=UΣV,其中U和V是酉矩阵,Σ是对角矩阵。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/8.jpg

实际上,PCA是SVD的一个简单应用。在计算机视觉中,第一个人脸识别算法使用PCA和SVD来将面部表示为“特征面”的线性组合,进行降维,然后通过简单的方法将面部匹配到身份,虽然现代方法更复杂,但很多方面仍然依赖于类似的技术。

十三、隐马尔可夫

Markov Chains 由 state 和 transitions 组成

栗子,根据这一句话 ‘the quick brown fox jumps over the lazy dog’,要得到 markov chain

步骤,先给每一个单词设定成一个状态,然后计算状态间转换的概率

这是一句话计算出来的概率,当你用大量文本去做统计的时候,会得到更大的状态转移矩阵,例如 the 后面可以连接的单词,及相应的概率

生活中,键盘输入法的备选结果也是一样的原理,模型会更高级

猜你喜欢

转载自blog.csdn.net/qq_32445015/article/details/81408181