《机器学习实战》总结

来源:互联网 发布:2015淘宝双十一销售额 编辑:程序博客网 时间:2024/06/06 16:53

用了大概一个月的时间,终于把《机器学习实战》这本书看了一遍,书中的代码也全部敲了一遍。下来就总结下书中提到的各个算法。
(注意,本博客适用于复习,不适用新手)
一、监督学习
我的理解就是给的数据是有结果的,根据这些已经明确结果的数据去推测那些没有明确结果的数据的结果。
监督学习可简单分为分类和回归:
分类常用于处理标称型数据(数据结果为0,1或者结果为-1,1;即结果是确定的几个值);
回归既可以用于处理标称型数据又可以用于处理连续性数据。
1.分类
常用的分类方法有:k-近邻算法(kNN)、决策树、朴素贝叶斯、Logistic回归、支持向量机(SVM)、AdaBoost元算法。
我们挨个看。
1.1 k-近邻算法(kNN)
kNN算法的主要思想是 将 待分类的点分类至 离待预测的点最近的k个点出现最多的那个分类结果。
优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高。
适用数据类型:数值型和标称型
1.2 决策树
根据训练数据创建一棵决策树,判断待分类数据类别时要从根节点开始比较判断,一直到叶子节点,该叶子节点就是待分类数据的类别了。
优点:计算复杂度不高,输出结果容易理解,对中间值的缺失不敏感,可以处理不相关特征数据。
缺点:可能会产生过度匹配问题。
适用数据类型:数值型和标称型
1.3 朴素贝叶斯
通过对训练数据进行分析,再结合贝叶斯公式计算条件概率,判断将待分类数据分到哪个类别下的概率最大,就将其分到那个类别。
优点:在数据较少的情况下仍然有效,可以处理多类别问题。
缺点:对于输入数据的准备方式较为敏感。
适用数据类型:标称型
1.4 Logistic回归
这一章主要是讲了梯度上升法,故而放在分类里。Logistic回归的目的是寻找一个非线性函数Sigmoid(一种阶跃函数)的最佳拟合参数,求解过程可以由最优化算法来完成(在每个特征上都乘以一个回归系数,然后把所有结果相加,将总和代入Sigmoid函数,得到一个0-1的数值,数值>0.5归于类别1,<0.5归于类别0,最优化算法就是在找这样一个最佳的回归系数)。在最优化算法中,最常用的就是梯度上升算法(也有的人在用梯度下降算法,效果类似),而梯度上升算法又可以简化为随机梯度上升算法(随机的意思是梯度上升算法中的每次移动的步长都会更新)。
用一个公式来表示:
Sigmoid函数的输入为
Sigmoid函数的输入
要注意的是
优点:计算代价不高,易于理解和实现。
缺点:容易欠拟合,分类精度可能不高
适用数据类型:数值型和标称型
1.5 支持向量机(SVM)
SVM算法就是找到一个可以将两个类别分开的超平面,且此超平面满足在所有可以将两个类别分开的超平面中,它里最近的那些点的距离之和是最大的。
优点:泛化错误率低,计算开销不大,结果易解释。
缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。
适用数据类型:数值型和标称型
1.6 AdaBoost元算法
将不同的分类方法结合起来叫元算法(或集成方法)。AdaBoost算法的流程:训练数据中的每个样本,并赋予其一个权重,这些权重构成了一个向量D。一开始,这些权重值都初始化成相等值。首先在训练数据上训练出一个弱分类器并计算该分类起的错误率,然后在同一数据集上再次训练若弱分类器。在二次训练中,第一次分对的样本的权重会减少,第一次分错的样本的权重会提高。为每个分类器分配一个权重值(基于每个弱分类器的错误率),不断迭代,直到错误率为0,或弱分类器的数目达到用户指定的值为止。
优点:泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整。
缺点:对离群点敏感。
适用数据类型:数值型和标称型
2.回归
与分类一样,回归也是预测目标值的过程。回归与分类的不同点在于,前者预测连续型变量,而后者预测离散型变量。
2.1 线性回归
线性回归分为标准线性回归与局部加权, 标准线性回归自不必多说,简单说一下局部加权线性回归。用高斯分布(类似正态分布)给预测点附近的点赋予更高的权值来计算回归系数
优点:结果易于理解,计算上不复杂
缺点:对非线性的数据拟合不好
适用数据类型:数值型和标称型数据
2.2 岭回归
当数据的样本数比特征数还少的时候,矩阵x.T*x的逆不能直接计算。即便当样本数比特征数多时,它仍有可能无法直接计算,这个时候就可以用岭回归。简单来说,岭回归就是在线性回归的矩阵x.T*x上加一个λ*I从而使得矩阵非奇异(I是一个m*m的单位矩阵)。
岭回归也属于线性回归。它相当于对回归系数的大小进行了限制,这是一种缩减法。
2.3 树回归
树回归在我看来有点类似与分段函数,构建树的过程就是将数据根据特征切分成叶子节点,预测过程就是根据节点特征寻找叶子节点的过程。值得注意的是,由于构建树的过程可能会导致倾向数据过拟合,所以有两种常用的剪枝算法:预剪枝和后剪枝。
优点:可以对复杂和非线性的数据建模
缺点:结果不易理解
适用数据类型:数值型和标称型
二、无监督学习
1.K均值(K-means)聚类
K均值聚类和K近邻分类有点类似,但也有不同。K近邻是已知结果有几种分类。而K均值则结果未知。K均值聚类的过程是这样的,先选取K个随机初始点作为质心,然后将所有数据根据这些质心分类,计算分类后的类别的质心,根据这个新的质心再调整分类结果,这个过程不断循环,知道质心的位置不再变化。值得注意的是还有一个二分K-均值算法,它的流程是,先将整个数据作为一个簇,计算总误差,再将这个簇一分为二,计算总误差,选取总误差较大(或者较小)的簇再一份为二,选取现在所有簇中总误差较大(或者较小)的簇再进行划分,直到得到用户想要的K个分类。
优点:容易实现。
缺点:可能收敛到局部最小值,在大规模数据集上收敛缓慢。
适用数据类型:数值型数据
2.关联规则(Apriori算法)
关联规则算法可以参考经典的啤酒尿布的故事,主要思想是寻找频繁项集。Apriori算法的原理是说如果一个元素项是不频繁的,那么那些包含该元素的超集也是不频繁的。Apriori算法从单元素项开始,通过组合满足最小支持度要求的项集来形成更大的集合。
优点:易编码实现。
缺点:在大数据集上可能较慢。
适用数据类型:数值型和标称型
3.关联规则(FP-growth算法)
FP-growth算法相比较与Apriori算法可以大大提高运算速度。FP-growth算法主要是构建了一棵FP树,然后从FP树中挖掘频繁项集。FP树的结构如下图所示:(图片来自网络,侵删)
FP树
值得注意的是,FP树的节点数值是可以重复的;与FP树一同构建的还有一个头指针表。
优点:一般要快于Apriori。
缺点:实现比较困难,在某些数据集上性能会下降。
适用数据类型:标称型
三、其他
1.PCA简化数据
主成分分析(PCA)可以对数据进行降维处理。它是通过沿着数据最大方差的方向旋转坐标轴来实现的。选择方差最大的方向作为第一条坐标轴,后续坐标轴则与前面的坐标轴正交。切方差矩阵上的特征值分析可以用一系列的正交坐标轴来获取。
优点:降低数据的复杂性,识别最重要的多个特征。
缺点:不一定需要,且可能损失有用信息。
适用数据类型:数值型
2.SVD简化数据
奇异值分解(SVD)可以让我们用小得多的数据集来表示原始数据集。SVD的示意图如下:(图片取自网络,侵删)
SVD示意图
优点:简化数据,去除噪声,提高算法的结果。
缺点:数据的转换可能难以理解。
适用数据类型:数值型
3.MapReduce
当数据量很大时,一台计算机已经不能满足运算了,这个时候就可以用MapReduce来将单个作业分配给多个计算机执行。它的框架可参考如下图:(图片取自网络,侵删)
MapReduce示意图
将输入数据分配给多台计算机上做运算(map过程),将它们的输出通过某种方式组合(一般还会排序)。将结果再分成多个小份分给多台计算机进行工作(reduce过程),最后得到最终结果。reduce过程可以重复多次。
优点:可在短时间内完成大量工作。
缺点:算法必须进过重写,需要对系统工程有一定的理解。
适用数据类型:数值型和标称型