失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 《机器学习实战》完整读书笔记

《机器学习实战》完整读书笔记

时间:2023-11-08 19:56:16

相关推荐

《机器学习实战》完整读书笔记

之前就知道有《机器学习实战》这本书,还有机器学习实战源码,对于想对机器学习理论和实践层面有更深入的了解和学习的话就可以看一下这本书,代码是python写好的,可以拿来跑一下,也可以加进去自己的理解,因为已经接触机器学习一年多的时间了,所以看这本书的时候感觉还不错,并不是很吃力,花了一周多的时间看完了书中的理论知识,代码部分跳过了,暂时没有去实践,因为现在看这本书的目的是为了弄清楚一点之前留下的疑点,的确解决了一些,但是对于实践中特别详细的问题没有详细的讲到,可能是这本书的一点遗憾之处吧,比如正则化项L1和L2的含义与不同之处,不过就整体而言,还是一本不错的学习书籍的,下面是这一段时间以来在看书的时候做下的笔记,大部分来源于书中,部分是自己的查阅资料或者个人理解加进去的,目的是希望丰富理解,如有不当之处,请告知,如有冒犯,请告知。

下面是笔记内容:

Numpy简单使用方法

random.rand(4,4) 产生4*4的随机数组

randMat=mat(random.rand(4,4)) 将随机数组转化为矩阵

invRandMat=randMat.I .I实现了矩阵的求逆操作

res=randMat*invRandMat 得到矩阵与逆矩阵的乘积(单位矩阵)

unitMatrix=eye(4) 创建单位矩阵

wucha=res-eye(4) 得到误差

补充:

np.array(x) 将x转化为一个ndarray

np.ones(N) 生成一个N长度的一维全1的ndarray

np.zeros(N) 生成一个N长度的一维全0的ndarray

np.eye(N) 创建N维单位阵

np.diag([.....]) 将输入的数组转化为方阵,非对角线元素为0

np.dot(array1, array2) 矩阵乘法

np.trace(array) 计算矩阵的迹(这个跟MATLAB中的好像是一样的)

np.sort(array) 对数组排序返回副本

np.save(str,array) 保存str

np.loadtxt(str, delimiter) 加载txt文件的内容

相关的学习还可以参考pandas,pandas感觉更好用一些,只是pandas是建立在numpy的基础上的,如果没有安装numpy的话是需要先安装numpy的。

K近邻算法

优 点 :精度高、对异常值不敏感、无数据输入假定。

缺点:计算复杂度高、空间复杂度高。

适用数据范围:数值型和标称型

工作原理是:

存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常*是不大于20的整数。最后,选择k个最相似数据中出现属于某个类别最多的分类,作为新数据的分类

k-近邻算法的一般流程:

(1)收集数据:可以使用任何方法。

(2)准备数据:距离计算所需要的数值,最好是结构化的数据格式。

(3)分析数据:可以使用任何方法。

(4)训练算法:此步骤不适用于k近邻算法。

(5)测试算法:计算错误率。

(6)使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k -近邻算法判定输

入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。

决策树 I

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

最具解释力和表达性

缺点:容易在训练数据中生成复杂的树结构,造成过拟合

最优的决策树的建立是NP完全问题

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

解决方案:

在树的生成过程中设定一定的剪枝策略,避免过拟合的问题

使用Greedy选择的方法生成次优决策树

决策树分类:

J48、C45、C50、ID3、CART

J48简介:

Java版本的决策树实现,基于从上到下的策略,递归的分治策略,选择某个属性放置在根节点,为每个可能的属性值产生一个分支,将实例分成多个子集,每个子集对应一个根节点的分支,然后在每个分支上递归地重复这个过程。当所有实例有相同的分类时,停止

ID3简介:

使用信息增益来进行特征划分

C45简介:

使用信息增益比来进行划分

CART简介:

分类回归树,可以进行分类和回归处理,采用基尼系数(GINI)来进行属性的划分

决策树的一般流程

(1)收集数据:可以使用任何方法。

(2)准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。

(3)分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。

(4)训练算法:构造树的数据结构。

(5)测试算法:使用经验树计算错误率。

(6)使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。

工作原理:

得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据。因此我们可以采用递归的原则处理数据集。递归结束的条件是:程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类

划分属性选取原则:

依据熵在划分属性前后的的变化来进行选取,优先选取让信息熵变化最大的特征

基于贝叶斯决策理论的分类方法

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

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

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

朴素贝叶斯的一般流程:

⑴ 收 集 数 据 :可以使用任何方法。

(2)准备数据:需要数值型或者布尔型数据。

(3)分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好。

(4)训练算法:计算不同的独立特征的条件概率。

(5)测试算法:计算错误率。

(6)使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使_用朴素贝叶斯命类器,不一定非要是文本

如果特征之间相互独立,那么样本数就可以从N的1000次幂减少到1000*N。所谓独立指的是统计意义上的独立,即一个特征或者单词出现的可能性与它和其他单词相邻没有关系

朴素贝叶斯分类器中的另一个假设是,每个特征同等重要

朴素贝叶斯分类器通常有两种实现方式:一种基于贝努利模型实现,一种基于多项式模型实现

对于分类而言,使用概率有时要比使用硬规则更为有效。贝叶斯概率及贝叶斯准则提供了一种利用已知值来估计未知概率的有效方法。可以通过特征之间的条件独立性假设,降低对数据量的需求。独立性假设是指一个词的出现

概率并不依赖于文档中的其他词。当然我们也知道这个假设过于简单。这就是之所以称为朴素贝叶斯的原因。尽管条件独立性假设并不正确,但是朴素贝叶斯仍然是一种有效的分类器

利用现代编程语言来实现朴素贝叶斯时需要考虑很多实际因素。下溢出就是其中一个问题,它可以通过对概率取对数来解决。词袋模型在解决文档分类问题上比词集模型有所提高。还有其他一些方面的改进,比如说移除停用词,当然也可以花大量时间对切分器进行优化

基于Logistic回归和Sigmoid函数的分类

Logistic回归

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

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

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

Sigmoid函数是一种阶跃函数,在数学中,如果实数域上的某个函数可以用半开区间上的指示函数的有限次线性组合来表示,那么这个函数就是阶跃函数

梯度上升法

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

梯度上升法的伪代码如下:

每个回归系数初始化为1

重复R次:

计算整个数据集的梯度

使用alpha x 识8出6也更新回归系数的向量

返回回归系数

随机梯度上升算法:

随机梯度上升算法是一个在线学习算法

随机梯度上升算法可以写成如下的伪代码:

所有回归系数初始化为1

对数据集中每个样本

计算该样本的梯度

使用alpha x gradient更新回归系数值

返回回归系数值

Logistics回归的目的是寻找一个非线性函数Sigmod的最佳拟合参数,求解过程可以由最优化算法来完成。在最优化算法中,最常用的就是梯度上升算法,而梯度上升算法又可以简化为随机梯度上升算法;随机梯度上升算法与梯度上升算法的效果相当,但占用更少的计算资源;随机梯度上升是一个在线算法,它可以在新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批处理运算

SVM

SVM是最好的现成的分类器,这里说的“现成”指的是分类器不加修改即可直接使用。同时,这就意味着在数据上应用基本形式的SVM分类器就可以得到低错误率的结果。SVM够对训练集之外的数据点做出很好的分类决策

基于最大间隔分隔数据

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

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

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

支持向量(support.vector)就是离分隔超平面最近的那些点

SMO算法序列最小优化

算法是将大优化问题分解为多个小优化问题来求解的。这些小优化问题往往很容易求解,并且对它们进行顺序求解的结果与将它们作为整体来求解的结果是完全一致的。在结果完全相同的同时,算法的求解时间短很多

算法的目标是求出一系列alpha和b一旦求出了这些alpha, 就很容易计算出权重向量w并得到分隔超平面

SMO算法的工作原理是:

每次循环中选择两个alpha进行优化处理。一旦找到一对合适的alpha,那么就增大其中一个同时减小另一个。这里所谓的“合适”就是指两个alpha必须要符合一定的条件,条件之一就是这两个alpha必须要在间隔边界之外,而其第二个条件则是这两个alpha还没有进行过区间化处理或者不在边界上

正则化项L1和L2:

L1正则化是指权值向量w中各个元素的绝对值之和,即1-范数,L1可以产生一个稀疏权值矩阵用于特征选择

L2正则化是指权值向量w中各个元素的平方和然后再求平方根,即2-范数,L2可以产生一个连续权值矩阵,可以防止过拟合

核函数将数据映射到高维空间

从某个特征空间到另一个特征空间的映射是通过核函数来实现的;SVM优化中一个特别好巧地方就是,所有的运算都可以写成内积;向量的内积指的是2个向量相乘,之后得到单个标量或者数值。我们可以把内积运算替换成核函数,而不必做简化处理。将内积替换成核函数的方式被称为核技巧kemeltrick)或者核“变电”(kemelsubstation

径向基核函数

径向基函数是SVM中常用的一个核函数。径向基函数是一个采用向量作为自变量的函数,能够基于向量距离运算输岀一个标量。这个距离可以是从<0,0>向量或者其他向量开始计算的距离

高斯核函数

将数据从其特征空间映射到更高维的空间,具体来说这里是映射到一个无穷维的空间。关于无穷维空间,读者目前不需要太担心。高斯核函数只是一个常用的核函数,使用者并不需要确切地理解数据到底是如何表现的,而且使用高斯核函数还会得到一个理想的结果

常用的核函数:

核函数的定义并不困难,根据泛函的有关理论,只要一种函数K(xi,xj)满足Mercer条件,它就对应某一变换空间的内积.对于判断哪些函数是核函数到目前为止也取得了重要的突破,得到Mercer定理和以下常用的核函数类型:

(1)线性核函数

K(x,xi)=x⋅xi

(2)多项式核

K(x,xi)=((x⋅xi)+1)d

(3)径向基核(RBF)

K(x,xi)=exp(−∥x−xi∥2σ2)

Gauss径向基函数则是局部性强的核函数,其外推能力随着参数σ的增大而减弱。多项式形式的核函数具有良好的全局性质。局部性较差。

(4)傅里叶核

K(x,xi)=1−q22(1−2qcos(x−xi)+q2)

(5)样条核

K(x,xi)=B2n+1(x−xi)

(6)Sigmoid核函数

K(x,xi)=tanh(κ(x,xi)−δ)

核函数的选取策略:

利用专家的先验知识预先选定核函数

用Cross-Validation方法

总结

采用Sigmoid函数作为核函数时,支持向量机实现的就是一种多层感知器神经网络,应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。

支持向量机是一种分类器。之所以称为“机”是因为它会产生一个二值决策结果,即它是一种决策“机”。支持向量机的泛化错误率较低,也就是说它具有良好的学习能力,且学到的结果具有很好的推广性。这些优点使得支持向量机十分流行,有些人认为它是监督学习中最好的定式算法。支持向量机试图通过求解一个二次优化问题来最大化分类间隔。在过去,训练支持向量机常采用非常复杂并且低效的二次规划求解方法。JohnPlatt引人了SMO算法,此算法可以通过每次只优化2个alpha值来加快SVM的训练速度。

利用AdaBoost元算法提高分类性能

元算法是对其他算法进行组合的一种方式

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

AdaBoost

优 点 :泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整。

缺 点 :对离群点敏感。

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

bagging:基于数据随机重抽样的分类器构建方法

自举汇聚法(bootstrapaggreating),也称为bagging方法,是在从原始数据集选择S次后得到S个新数据集的一种技术。新数据集和原数据集的大小相等每个数据集都是通过在原始数据集中随机选择一个样本来进行替换而得到的

在S个数据集建好之后,将某个学习算法分别作用于每个数据集就得到了S个分类器。当我们要对新数据进行分类时,就可以应用这S个分类器进行分类。与此同时,选择分类器投票结果中最多的类别作为最后的分类结果

boosting

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

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

AdaBoost

训练数据中的每个样本,并赋予其一个权重,这些权重构成了向量乃。一开始,这些权重都初始化成相等值。首

先在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。在分类器的第二次训练当中,将会重新调整每个样本的权重,其中第一次分对的样本的权重将会降低,而第一次分错的样本的权重将会提高。为了从所有弱分类器中得到最终的分类结果,AdaBoost为每个分类器都分配了一个权重值alpha,这些alpha值是基于每个弱分类器的错误率进行计算的

处理非均衡问题的数据抽样方法

另外一种针对非均衡问题调节分类器的方法,就是对分类器的训练数据进行改造。这可以通过欠抽样undersampling)或者过抽样oversampling来实现

在bagging中,是通过随机抽样的替换方式得到了与原始数据集规模一样的数据集。而boosting在bagging的思路上更进了一步,它在数据集上顺序应用了多个不同的分类器

利用回归预测数值型数据

线性回归的一个问题是有可能出现欠拟合现象,因为它求的是具有最小均方误差的无偏估计;其中的一个方法是局部加权线性回归,LWLR使用“核”(与支持向量机中的核类似)来对附近的点赋予更高的权重。核的类型可以自由选择,最常用的核就是高斯核

如果特征比样本点还多(n>m ) , 也就是说输入数据的矩阵乂不是满秩矩阵。非满秩矩阵在求逆时会出现问题

岭回归最先用来处理特征数多于样本数的情况,现在也用于在估计中加人偏差,从而得到更好的估计。这里通过引入r来限制了所有w之和,通过引人该惩罚项,能够减少不重要的参数,这个技术在统计学中也叫做缩减(shrinkage)。还有一些其他缩减方法,如lasso、LAR 、PCA回归以及子集选择等

岭回归使用了单位矩阵乘以常量r,我们观察其中的单位矩阵,可以看到值1贯穿整个对角线,其余元素全是0。形象地,在0构成的平面上有一条1组成的“岭”,这就是岭回归中的“岭”的由来。

K-均值聚类

优 点 :容易实现。

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

适用数据类型:数值型数据

工作流程:

首先,随机确定k个初始点作为质心。然后将数据集中的每个点分配到一个簇中,具体来讲,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。这一步完成之后,每个簇的质心更新为该簇所有点的平均值

Apriori进行关联分析

优 点 :易编码实现。'

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

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

整个Apriori算法的伪代码如下:

当集合中项的个数大于0时

构建一个々个项组成的候选项集的列表

检查数据以确认每个项集都是频繁的

保留频繁项集并构建k+1项组成的候选项集的列表

Apriori原理是说如果一个元素项是不频繁的,那么那些包含该元素的超集也是不频繁的。Apriori算法从单元素项集开始,通过组合满足最小支持度要求的项集来形成更大的集合。支持度用来度量一个集合在原始数据中出

现的频率

FP-growth算法:

FP-growth算法只需要对数据库进行两次扫描,而Apriori算法对于每个潜在的频繁项集都会扫描数据集判定给定模式是否频繁,因此FP-growth算法的速度要比Apriori算法快

它发现频繁项集的基本过程如下:

(1) 构建FP树

(2)从FP树中挖掘频繁项集

优 点 :一般要快于Apriori

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

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

FP-growth算法将数据存储在一种称为FP树的紧凑数据结构中。FP代 表 频 繁 模 式

PCA降维:

降低很多算法的计算开销;去除噪声;使得结果易懂

在PCA中,数据从原来的坐标系转换到了新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选

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

因子分析(Factor Analysis)

在因子分析中,我们假设在观察数据的生成中有一些观察不到的隐变量假设观察数据是这些隐变量和某些噪声的线性组合。那么隐变量的数据可能比观察数据的数目少,也就是说通过找到隐变量就可以实现数据的降维

独立成分分析ICA

ICA假设数据是从N个数据源生成的,这一点和因子分析有些类似。假设数据为多个数据源的混合观察结果,这些数据源之间在统计上是相互独立的,而在PCA中只假设数据是不相关的。同因子分析一样,如果数据源的数目少于观察数据的数目,则可以实现降维过程

SVD奇异矩阵分解

降维;推荐系统

如果觉得《《机器学习实战》完整读书笔记》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。