机器学习学习笔记

机器学习学习笔记

一、什么是机器学习

机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。

机器学习强调三个关键词:算法、经验、性能,其处理过程如上图所示。在数据的基础上,通过算法构建出模型并对模型进行评估。评估的性能如果达到要求,就用该模型来测试其他的数据;如果达不到要求,就要调整算法来重新建立模型,再次进行评估。如此循环往复,最终获得满意的经验来处理其他的数据。机器学习技术和方法已经被成功应用到多个领域,比如个性推荐系统,金融反欺诈,语音识别,自然语言处理和机器翻译,模式识别,智能控制等。

二、基于大数据的机器学习

传统的机器学习算法,由于技术和单机存储的限制,只能在少量数据上使用。即以前的统计/机器学习依赖于数据抽样。但实际过程中样本往往很难做好随机,导致学习的模型不是很准确,在测试数据上的效果也可能不太好。

随着 HDFS(Hadoop Distributed File System) 等分布式文件系统出现,存储海量数据已经成为可能。在全量数据上进行机器学习也成为了可能,这顺便也解决了统计随机性的问题。然而,由于 MapReduce 自身的限制,使得使用 MapReduce 来实现分布式机器学习算法非常耗时和消耗磁盘IO。因为通常情况下机器学习算法参数学习的过程都是迭代计算的,即本次计算的结果要作为下一次迭代的输入,这个过程中,如果使用 MapReduce,我们只能把中间结果存储磁盘,然后在下一次计算的时候从新读取,这对于迭代 频发的算法显然是致命的性能瓶颈。

在大数据上进行机器学习,需要处理全量数据并进行大量的迭代计算,这要求机器学习平台具备强大的处理能力。Spark 立足于内存计算,天然的适应于迭代式计算。

三、Spark 机器学习库MLLib

MLlib是Spark的机器学习(Machine Learning)库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模。MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道API。具体来说,其主要包括以下几方面的内容:

机器学习算法:常用的学习算法,如分类、回归、聚类和协同过滤;

特征处理:特征提取、转化、降维,和特征选择;

管道(Pipeline):用于构建、评估和调整机器学习管道的工具;

存储:保存和加载算法,模型和管道;

实用工具:线性代数,统计,数据处理等工具。

Spark 机器学习库从 1.2 版本以后被分为两个包:

spark.mllib包含基于RDD的原始算法API。Spark MLlib 历史比较长,在1.0 以前的版本即已经包含了,提供的算法实现都是基于原始的 RDD。

spark.ml 则提供了基于DataFrames 高层次的API,可以用来构建机器学习工作流(PipeLine)。ML Pipeline 弥补了原始 MLlib 库的不足,向用户提供了一个基于 DataFrame 的机器学习工作流式 API 套件。

使用 ML Pipeline API可以很方便的把数据处理,特征转换,正则化,以及多个机器学习算法联合起来,构建一个单一完整的机器学习流水线。这种方式给我们提供了更灵活的方法,更符合机器学习过程的特点,也更容易从其他语言迁移。Spark官方推荐使用spark.ml。如果新的算法能够适用于机器学习管道的概念,就应该将其放到spark.ml包中,如:特征提取器和转换器。开发者需要注意的是,从Spark2.0开始,基于RDD的API进入维护模式(即不增加任何新的特性),并预期于3.0版本的时候被移除出MLLib。

Spark在机器学习方面的发展非常快,目前已经支持了主流的统计和机器学习算法。纵观所有基于分布式架构的开源机器学习库,MLlib可以算是计算效率最高的。MLlib目前支持4种常见的机器学习问题: 分类、回归、聚类和协同过滤。下表列出了目前MLlib支持的主要的机器学习算法: 

4.相关统计

计算两个序列之间的相关性是统计中通用的操作。MLlib提供了计算多个序列之间相关统计的灵活性。目前支持的关联方法运用了皮尔森相关系数(Pearson correlation coefficient)和斯皮尔森相关系统(Spearman’s rank correlation coefficient)。

1. 皮尔森相关系数

皮尔森相关系数也称为皮尔森积矩相关系数(Pearson product-moment correlation coefficient),是一种线性相关系数。皮尔森相关系数是用来反映两个变量线性相关程度的统计量。

相关系数用r表示,其中n为样本量,xi,yi,sx,sy 分别为两个变量的观测值和均值。r描述的是两个变量间线性相关强弱的程度。r的取值在-1与+1之间,若r>0,表明两个变量是正相关,即一个变量的值越大,另一个变量的值也会越大;若r<0,表明两个变量是负相关,即一个变量的值越大另一个变量的值反而会越小。r的绝对值越大表明相关性越强,要注意的是这里并不存在因果关系。若r=0,表明两个变量间不是线性相关,但有可能是其他方式的相关(比如曲线方式)。

2. 斯皮尔森秩相关系数

斯皮尔森秩相关系数也称为Spearman的p,是由Charles Spearman命名的,一般用希腊字母ps(rho)或rs表示。Spearman秩相关系数是一种无参数(与分布无关)的校验方法,用于度量变量之间联系的强弱。在没有重复数据的情况下,如果一个变量是另外一个变量的严格单调函数,则Spearman秩相关系数就是+1或-1,称变量完全Spearman秩相关。注意和Pearson完全相关的区别,只有当两变量存在线性关系时,Pearson相关系数才为+1或-1。

Spearman秩相关系数为:

Statistics提供了计算序列之间相关性的方法,默认情况下使用皮尔森相关系数。

5.随机数生成

随机数可以看做随机变量,什么是随机变量?将一枚质地均匀的硬币抛掷3次,记录它的结果,有:

其中u代表正面朝上,d代表反面朝上,整个集合Ω是抛掷3次硬币的样本空间。正面朝上的次数可能是0,1,2,3。由于样本空间Ω中的结果都是随机发生的,所以出现正面的次数X是随机的,X即为随机变量。如果抛掷硬币,直到出现正面的抛掷次数为Y,那么Y的取值可能是0,1,2,3…。如果随机变量的取值是有限的(比如X)或者是可列的(比如Y),那么就称为离散随机变量。

刚才说的抛掷3次硬币的情况下,使用P(X = 取值)的方式表达每种取值的概率,我们不难得出:

如果样本空间上随机变量的取值用x1,x2,x3,….表示,那么存在满足p(x1) = P(X = xi)和Σip(xi) = 1 的函数p。这个函数p称为随机变量X的概率质量函数或者频率函数。

如果X取值累积某个范围的值,那么其累积分布函数定义如下:

累积分布函数满足:

同一样本空间上两个离散随机变量X和Y的可能取值分别为x1,x2,x3,…和y1,y2,y3,…,如果对所有i和j,满足:

则X和Y是独立的。将此定义推广到两个以上离散随机变量的情形,如果对所有i, j 和 k,满足:

则X、Y和Z是相互独立的。

刚才所说的X、Y的取值都是离散的,还有一种情况下取值是连续的。以人的寿命为例,可以是任意的正实数值。与频率函数相对的是密度函数ƒ(x)。ƒ(x)有这些性质:ƒ(x) ≥ 0,ƒ分段连续且∫ƒ(x)dx = 1。如果X是具有密度函数ƒ的随机变量,那么对于任意的a < b,X落在区间(a, b)上的概率是密度函数从a到b的下方面积:

随机数生成对于随机算法、随机协议和随机性能测试都很有用。MLlib支持均匀分布、标准正态分布、泊松分布等生成随机RDD。

MLlib有关随机数的类如图所示:

以泊松分布为例,先看看它的数学定义。参数为λ(λ>0)的泊松频率函数是

当λ = 0.1、1、5、10时的泊松分布如图所示:

RandomRDDs提供了工厂方法创建RandomRDD和RandomVectorRDD。

5.1线性回归

线性回归是一类简单的指导学习方法。线性回归是预测定量响应变量的有用工具。很多统计学习方法都是从线性回归推广和扩展得到的,所以我们有必要重点理解它。

1.简单线性回归

简单线性回归非常简单,只根据单一的预测变量X预测定量响应变量Y。它假定X与Y之间存在线性关系。其数学关系如下:

≈表示近似。这种线性关系可以描述为Y对X的回归。β0和β1是两个未知的常量,被称为线性模型的系数,它们分别表示线性模型中的截距和斜率。

β0和β1怎么得到呢?通过大量样本数据估算出估计值。假如样本数据如下:

(x1, y1),(x2, y2),….,(x3, y3)

此时问题转换为在坐标中寻找一条与所有点的距离最大程度接近的直线问题,如图11-7所示

使用最小二乘方法最终求得的估计值(β0,β1)。

实际情况,所有的样本或者真实数据不可能真的都在一条直线上,每个坐标都会有误差,所以可以表示为如下关系:

上式也称为总体回归直线,是对X和Y之间真实关系的最佳线性近似。

2.多元线性回归

相比简单线性回归,实践中常常不止一个预测变量,这就要求对简单线性回归进行扩展。虽然可以给每个预测变量单独建立一个简单线性回归模型,但无法做出单一的预测。更好的方法是扩展简单线性回归模型,使它可以直接包含多个预测变量。一般情况下,假设有p个不同的预测变量,多元线性回归模型为:

其中Xj代表第j个预测变量,βj代表第j个预测变量和响应变量之间的关联。

5.2分类

5.2节的线性回归模型中假设响应变量Y是定量的,但很多时候,Y却是定性的。比如杯子的材质是定性变量,可以是玻璃、塑料或不锈钢等。定性变量也叫分类变量。预测定性响应值是指对观测分类。

分类的目标是划分项目分类。最常见的分类类型是二元分类,二元分类有两种分类,通常命名为正和负。如果有两个以上的分类,它被称为多元分类。MLlib支持两种线性方法分类:线性支持向量机和逻辑回归。线性支持向量机仅支持二元分类,而逻辑回归对二元分类和多元分类都支持。对于这两种方法,MLlib支持L1和L2正规化变体。MLlib中使用RDD[LabeledPoint]代表训练数据集,其中标签引从0开始,如0,1,2,…。对于二元标签γ在MLlib中使用0表示负,使用+1表示正。

1.线性支持向量机

线性支持向量机(SVM)是用于大规模分类任务的标准方法。正是在介绍损失函数时提到的:

默认情况下,线性支持向量机使用L2正规化训练。MLlib也支持选择L1正规化,在这种情况下,问题就变成了线性问题。线性支持向量机算法输出SVM模型。给定一个新的数据点,记为X,该模型基于wτx的值做预测。默认情况下,如果wτx ≥ 0则结果是正的,否则为负。

2.逻辑回归

 逻辑回归被广泛用于预测二元响应。它正是在介绍损失函数时提到的:

对于二元分类问题,该算法输出二元逻辑回归模型。给定一个新的数据点,记为X,该模型基于应用逻辑函数

做预测,其中z = wτx。默认情况下,如果ƒ(wτx) > 0.5,输出为正,否则为负。虽然不像线性支持向量机,逻辑回归模型中,ƒ(z)的原始输出具有一概率解释(即X是正概率)。

二元逻辑回归可以推广到多元逻辑回归来训练和预测多元分类问题。对于多元分类问题,该算法将输出一个多元逻辑回归模型,其中包含K-1个二元逻辑回归模型。MLlib实现了两种算法来解决逻辑回归分析:小批量梯度下降和L-BFGS。Spark官方推荐L-BFGS,因为它比小批梯度下降的收敛更快。

1.线性最小二乘、套索和岭回归

线性最小二乘公式是回归问题最常见的公式。在介绍损失函数时也提到过它的公式:

多种多样的回归方法通过使用不同的正规化类型,都派生自线性最小二乘。例如,普通最小二乘或线性最小二乘使用非正规化:岭回归使用L2正规化;套索使用L1正规化。对于所有这些模型的损失和训练误差:

就是均方误差。

5.3决策树

决策树是分类和回归的机器学习任务中常用的方法。决策树广泛使用,因为它们很容易解释,处理分类的功能,延伸到多元分类设置,不需要缩放功能,并能捕捉到非线性和功能的交互。

MLlib使用连续和分类功能支持决策树的二元和多元的分类和回归。通过行实现分区数据,允许分布式训练数以百万计的实例。

决策树是一个贪心算法,即在特性空间上执行递归的二元分割。决策树为每个最底部(叶)分区预测相同的标签。为了在每个树节点上获得最大的信息,每个分区是从一组可能的划分中选择的最佳分裂。

1.节点不纯度和信息增益

节点不纯度是节点上标签的均匀性的量度。当前实现提供了两种分类不纯度测量的方法(基尼不纯度和嫡)和一种回归不纯度测量的方法(方差),如表11-4所示:

信息增益是父节点不纯度与两个子节点不纯度的加权总和之间的差。假设将有s个分区,大小为N的数据集D划分为两个数据集Dleft和Dright,那么信息增益为:

2.划分候选人

(1) 连续特征

对于单机上实现的小数据集,给每个连续特征划分的候选人在此特征上有唯一值。有些实现了对特征值排序,为了加速计算,使用这些有序的唯一值划分候选人。对于大的分布式数据集,排序是很昂贵的。通过在样本数据分数上执行位计算,实现了计算近似的划分候选人集合。有序划分创建了“箱”,可使用maxBins参数指定这样的容器的最大数量。

(2) 分类特征

对于有M种可能值的分类特征,将会有2M-1-1个划分候选人。对于二元(0/1)分类和回归,我们可以通过平均标签排序的分类特征值,减少划分候选人至M-1多得数据量。例如,对于一个有A、B和C三个分类的分类特征的二元分类问题,其相应的标签1的比例是0.2,0.6和0.4时,分类特征是有序的A、C、B。两个划分候选人分别是A|C,B和A,C|B,其中|标记划分。

在多元分类中共有2M-1-1种可能的划分,无论何时都可能被使用。当2M-1-1比参数maxBins大时,我们使用与二元分类和回归相类似的方法。M种分类特征用不纯度排序,最终得到需要考虑的M-1个划分候选人。

3.停止规则

递归树的构建当满足下面三个条件之一时会停在一个节点。

  • 节点的深度与maxBins相等;
  • 没有划分候选人导致信息增益大于minInfoGain;
  • 没有划分候选人产生的子节点都至少有minInstancesPerNode个训练实例。

 合奏是一个创建由其他模型的集合组合而成的模型的学习算法。MLlib支持两个主要的合奏算法:梯度提升决策树和随机森林,它们都使用决策树作为其基础模型。梯度提升决策树和随机森林虽然都是决策树合奏的学习算法,但是训练过程是不同的。关于合奏有以下几个权衡点:

  • GBT每次都要训练一颗树,所以它们比随机森林需要更长的时间来训练。随机森林可以平行地训练多棵树。另一方面,GBT往往比随机森林更合理地使用更小(浅)的树并且训练小树会花费更少的时间。
  • 随机森林更不易发生过度拟合。随机森林训练更多的树会减少多半的过度拟合,而GBT训练更多的树会增加过度拟合。(在统计语言中,随机森林通过使用更多的树木减少方差,而GBT通过使用更多的树木减少偏差。)
  • 随机森林可以更容易调整,因为性能与树木的数量是单调增加的。但如果GBT树木的数量增长过大,性能可能开始下降。

总之,两种算法都是有效的,具体选择应取决于特定的数据集。

5.4随机森林

随机森林是分类与回归中最成功的机器学习模型之一。为了减少过度拟合的风险,随机森林将很多决策树结合起来。和决策树相似,随机森林处理分类的功能,延伸到多元分类设置,不需要缩放功能,并能捕捉到非线性和功能的交互。

MLlib使用连续和分类功能支持随机森林的二元和多元的分类和回归。

随机森林训练一个决策树的集合,所以训练可以并行。该算法随机性注入训练过程,使每个决策树会有一点不同。结合每棵树的预测降低了预测的方差,改进了测试数据的性能。

1.随机注入

算法随机性注入训练的过程包括:

1) 每次迭代对原始数据集进行二次采样获得不同的训练集,即引导。

2) 考虑在树的每个节点上将特征的不同随机子集分割。

除了这些随机性,每个决策树个体都以同样的方法训练。

2.预测

对随机森林做预测,就必须聚合它的决策树集合的预测。分类和回归的聚合是不同的:

  • 分类采用多数表决。每棵树的预测作为对分类的一次投票,收到最多投票的分类就是预测结果。
  • 回归采用平均值。每棵树都有一个预测值,这些树的预测值的平均值就是预测结果。

5.5GBT

GBT迭代训练决策树,以便最小化损失函数。和决策树相似,随机森林处理分类的功能,延伸到多元分类设置,不需要缩放功能,并能捕捉到非线性和功能的交互。

MLlib使用连续和分类功能支持梯度提升决策树的二元和多元的分类和回归。

GBT迭代训练一个决策树的序列。

在每次迭代中,算法使用当前合奏来预测每个训练实例的标签,然后将预测与真实的标签进行比较。数据集被重新贴上标签,将重点放在预测不佳的训练实例上。因此,在下一迭代中,决策树将帮助纠正先前的错误。重贴标签的具体机制是由损失函数定义的。随着每次迭代,GBT进一步减少训练数据上的损失函数。表11-5列出了MLlib中GBT支持的损失函数。请注意,每个损失只适用于分类或回归之一。其中N表示实例数量,y1表示实例i的标签,xi表示实例i的特征,F(Xi)表示实例i的模型预测标签。

参考:https://www.cnblogs.com/swordfall/p/9456222.html#auto_id_11,感谢博主。

Comments ( 7 )

  1. ReplyL
    还是来看预测房价的这个例子,我们先对该数据做线性回归,也就是左边第一张图。 如果这么做,我们可以获得拟合数据的这样一条直线,但是,实际上这并不是一个很好的模型。我们看看这些数据,很明显,随着房子面积增大,住房价格的变化趋于稳定或者说越往右越平缓。因此线性回归并没有很好拟合训练数据。 我们把此类情况称为欠拟合(underfitting),或者叫作叫做高偏差(bias)。 这两种说法大致相似,都表示没有很好地拟合训练数据。高偏差这个词是 machine learning 的研究初期传下来的一个专业名词,具体到这个问题,意思就是说如果用线性回归这个算法去拟合训练数据,那么该算法实际上会产生一个非常大的偏差或者说存在一个很强的偏见。 第二幅图,我们在中间加入一个二次项,也就是说对于这幅数据我们用二次函数去拟合。自然,可以拟合出一条曲线,事实也证明这个拟合效果很好。 另一个极端情况是,如果在第三幅图中对于该数据集用一个四次多项式来拟合。因此在这里我们有五个参数θ0到θ4,这样我们同样可以拟合一条曲线,通过我们的五个训练样本,我们可以得到如右图的一条曲线。 一方面,我们似乎对训练数据做了一个很好的拟合,因为这条曲线通过了所有的训练实例。但是,这实际上是一条很扭曲的曲线,它不停上下波动。因此,事实上我们并不认为它是一个预测房价的好模型。 所以,我们把这类情况叫做过拟合(overfitting),也叫高方差(variance)。 与高偏差一样,高方差同样也是一个历史上的叫法。从第一印象上来说,如果我们拟合一个高阶多项式,那么这个函数能很好的拟合训练集(能拟合几乎所有的训练数据),但这也就面临函数可能太过庞大的问题,变量太多。 同时如果我们没有足够的数据集(训练集)去约束这个变量过多的模型,那么就会发生过拟合。 2 过度拟合的问题通常发生在变量(特征)过多的时候。这种情况下训练出的方程总是能很好的拟合训练数据,也就是说,我们的代价函数可能非常接近于 0 或者就为 0。 但是,这样的曲线千方百计的去拟合训练数据,这样会导致它无法泛化到新的数据样本中,以至于无法预测新样本价格。在这里,术语"泛化"指的是一个假设模型能够应用到新样本的能力。新样本数据是指没有出现在训练集中的数据。 之前,我们看到了线性回归情况下的过拟合。类似的情况也适用于逻辑回归。 3 那么,如果发生了过拟合问题,我们应该如何处理? 过多的变量(特征),同时只有非常少的训练数据,会导致出现过度拟合的问题。因此为了解决过度拟合,有以下两个办法。 方法一:尽量减少选取变量的数量 具体而言,我们可以人工检查每一项变量,并以此来确定哪些变量更为重要,然后,保留那些更为重要的特征变量。至于,哪些变量应该舍弃,我们以后在讨论,这会涉及到模型选择算法,这种算法是可以自动选择采用哪些特征变量,自动舍弃不需要的变量。这类做法非常有效,但是其缺点是当你舍弃一部分特征变量时,你也舍弃了问题中的一些信息。例如,也许所有的特征变量对于预测房价都是有用的,我们实际上并不想舍弃一些信息或者说舍弃这些特征变量。 方法二:正则化 正则化中我们将保留所有的特征变量,但是会减小特征变量的数量级(参数数值的大小θ(j))。 这个方法非常有效,当我们有很多特征变量时,其中每一个变量都能对预测产生一点影响。正如我们在房价预测的例子中看到的那样,我们可以有很多特征变量,其中每一个变量都是有用的,因此我们不希望把它们删掉,这就导致了正则化概念的发生。 接下来我们会讨论怎样应用正则化和什么叫做正则化均值,然后将开始讨论怎样使用正则化来使学习算法正常工作,并避免过拟合。 2. Cost Function 1 在前面的介绍中,我们看到了如果用一个二次函数来拟合这些数据,那么它给了我们一个对数据很好的拟合。然而,如果我们用一个更高次的多项式去拟合,最终我们可能会得到一个曲线,它能很好地拟合训练集,但却并不是一个好的结果,因为它过度拟合了数据,因此,一般性并不是很好。 让我们考虑下面的假设,我们想要加上惩罚项,从而使参数 θ3 和 θ4 足够的小。 这里我的意思就是,上图的式子是我们的优化目标,也就是说我们需要尽量减少代价函数的均方误差。 对于这个函数我们对它添加一些项,加上 1000 乘以 θ3 的平方,再加上 1000 乘以 θ4 的平方, 1000 只是我随便写的某个较大的数字而已。现在,如果我们要最小化这个函数,那么为了最小化这个新的代价函数,我们要让 θ3 和 θ4 尽可能小。因为,如果你在原有代价函数的基础上加上 1000 乘以 θ3 这一项 ,那么这个新的代价函数将变得很大,所以,当我们最小化这个新的代价函数时, 我们将使 θ3 的值接近于 0,同样 θ4 的值也接近于 0,就像我们忽略了这两个值一样。如果我们做到这一点( θ3 和 θ4 接近 0 ),那么我们将得到一个近似的二次函数。 因此,我们最终恰当地拟合了数据,我们所使用的正是二次函数加上一些非常小,贡献很小项(因为这些项的 θ3、 θ4 非常接近于0)。显然,这是一个更好的假设。 2 更一般地,这里给出了正规化背后的思路。这种思路就是,如果我们的参数值对应一个较小值的话(参数值比较小),那么往往我们会得到一个形式更简单的假设。 在我们上面的例子中,我们惩罚的只是 θ3 和 θ4 ,使这两个值均接近于零,从而我们得到了一个更简单的假设,实际上这个假设大抵上是一个二次函数。 但更一般地说,如果我们像惩罚 θ3 和 θ4 这样惩罚其它参数,那么我们往往可以得到一个相对较为简单的假设。 实际上,这些参数的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因此 就不易发生过拟合的问题。 我知道,为什么越小的参数对应于一个相对较为简单的假设,对你来说现在不一定完全理解,但是在上面的例子中使 θ3 和 θ4 很小,并且这样做能给我们一个更加简单的假设,这个例子至少给了我们一些直观感受。 来让我们看看具体的例子,对于房屋价格预测我们可能有上百种特征,与刚刚所讲的多项式例子不同,我们并不知道 θ3 和 θ4 是高阶多项式的项。所以,如果我们有一百个特征,我们并不知道如何选择关联度更好的参数,如何缩小参数的数目等等。 因此在正则化里,我们要做的事情,就是把减小我们的代价函数(例子中是线性回归的代价函数)所有的参数值,因为我们并不知道是哪一个或哪几个要去缩小。 因此,我们需要修改代价函数,在这后面添加一项,就像我们在方括号里的这项。当我们添加一个额外的正则化项的时候,我们收缩了每个参数。 顺便说一下,按照惯例,我们没有去惩罚 θ0,因此 θ0 的值是大的。这就是一个约定从 1 到 n 的求和,而不是从 0 到 n 的求和。但其实在实践中 这只会有非常小的差异,无论你是否包括这 θ0 这项。但是按照惯例,通常情况下我们还是只从 θ1 到 θn 进行正则化。
  2. ReplyL
    GBDT是一个应用很广泛的算法,可以用来做分类、回归。在很多的数据上都有不错的效果。GBDT这个算法还有一些其他的名字,比如说MART(Multiple Additive Regression Tree),GBRT(Gradient Boost Regression Tree),Tree Net等,其实它们都是一个东西(参考自wikipedia – Gradient Boosting),发明者是Friedman Gradient Boost其实是一个框架,里面可以套入很多不同的算法,可以参考一下机器学习与数学(3)中的讲解。Boost是"提升"的意思,一般Boosting算法都是一个迭代的过程,每一次新的训练都是为了改进上一次的结果。 原始的Boost算法是在算法开始的时候,为每一个样本赋上一个权重值,初始的时候,大家都是一样重要的。在每一步训练中得到的模型,会使得数据点的估计有对有错,我们就在每一步结束后,增加分错的点的权重,减少分对的点的权重,这样使得某些点如果老是被分错,那么就会被“严重关注”,也就被赋上一个很高的权重。然后等进行了N次迭代(由用户指定),将会得到N个简单的分类器(basic learner),然后我们将它们组合起来(比如说可以对它们进行加权、或者让它们进行投票等),得到一个最终的模型。 而Gradient Boost与传统的Boost的区别是,每一次的计算是为了减少上一次的残差(residual),而为了消除残差,我们可以在残差减少的梯度(Gradient)方向上建立一个新的模型。所以说,在Gradient Boost中,每个新的模型的简历是为了使得之前模型的残差往梯度方向减少,与传统Boost对正确、错误的样本进行加权有着很大的区别。 在分类问题中,有一个很重要的内容叫做Multi-Class Logistic,也就是多分类的Logistic问题,它适用于那些类别数>2的问题,并且在分类结果中,样本x不是一定只属于某一个类可以得到样本x分别属于多个类的概率(也可以说样本x的估计y符合某一个几何分布),这实际上是属于Generalized Linear Model中讨论的内容,这里就先不谈了,以后有机会再用一个专门的章节去做吧。这里就用一个结论:如果一个分类问题符合几何分布,那么就可以用Logistic变换来进行之后的运算。
  3. Replybeibei
    随机森林是一个最近比较火的算法,它有很多的优点: 在数据集上表现良好 在当前的很多数据集上,相对其他算法有着很大的优势 它能够处理很高维度(feature很多)的数据,并且不用做特征选择 在训练完后,它能够给出哪些feature比较重要 在创建随机森林的时候,对generlization error使用的是无偏估计 训练速度快 在训练过程中,能够检测到feature间的互相影响 容易做成并行化方法 实现比较简单 随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。 在建立每一棵决策树的过程中,有两点需要注意 - 采样与完全分裂。首先是两个随机采样的过程,random forest对输入的数据要进行行、列的采样。对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那么采样的样本也为N个。这样使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现over-fitting。然后进行列采样,从M个feature中,选择m个(m << M)。之后就是对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。一般很多的决策树算法都一个重要的步骤 - 剪枝,但是这里不这样干,由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现over-fitting。 按这种算法得到的随机森林中的每一棵都是很弱的,但是大家组合起来就很厉害了。我觉得可以这样比喻随机森林算法:每一棵决策树就是一个精通于某一个窄领域的专家(因为我们从M个feature中选择m让每一棵决策树进行学习),这样在随机森林中就有了很多个精通不同领域的专家,对一个新的问题(新的输入数据),可以用不同的角度去看待它,最终由各个专家,投票得到结果。
  4. Reply不二
    决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等。但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的。 模型组合(比如说有Boosting,Bagging等)与决策树相关的算法比较多,这些算法最终的结果是生成N(可能会有几百棵以上)棵树,这样可以大大的减少单决策树带来的毛病,有点类似于三个臭皮匠等于一个诸葛亮的做法,虽然这几百棵决策树中的每一棵都很简单(相对于C4.5这种单决策树来说),但是他们组合起来确是很强大。 在最近几年的paper上,如iccv这种重量级的会议,iccv 09年的里面有不少的文章都是与Boosting与随机森林相关的。模型组合+决策树相关的算法有两种比较基本的形式 - 随机森林与GBDT((Gradient Boost Decision Tree),其他的比较新的模型组合+决策树的算法都是来自这两种算法的延伸。本文主要侧重于GBDT,对于随机森林只是大概提提,因为它相对比较简单。 在看本文之前,建议先看看机器学习与数学(3)与其中引用的论文,本文中的GBDT主要基于此,而随机森林相对比较独立。
  5. Reply嘟嘟嘟
    还得努力学习啊
  6. Reply晴雨
    哈哈哈,如何写的更好呢
  7. Reply风儿
    加油!🌝🌝

Leave a reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>