1、线性回归
回归问题就是拟合输入变量x与数值型的目标变量y之间的关系,而线性回归就是假定了x和y之间的线性关系,公式如下:
如下图所示,我们可以通过绘制绘制(x,y)的散点图的方式来查看x和y之间是否有线性关系,线性回归模型的目标是寻找一条穿过这些散点的直线,让所有的点离直线的距离最短。这条完美直线所对应的参数就是我们要找的线性回归模型参数w1,w2,w3……b
最小二乘法是一种求解回归模型参数w1,w2,w3……b的方法,线性回归模型中,能让预测值和真实值误差平方和最小的这条直线就是完美直线。
y^i表示第i个数据点的预测值,也就是对应完美直线的y值。最小二乘法通过求偏导数的方法让误差平方和取得最小值w1,w2,w3……b。
损失函数定义:
监督学习算法的目标就是为了让目标变量y的预测值和真实值尽量吻合,定义预测值与真实值之间的差异方法就叫损失函数。损失函数值越小,说明差异越小,模型的预测效果越好。线性回归中最小二乘法就是这个损失函数。
梯度下降法
在机器学习领域中,梯度下降法是更加通用的一种求解参数的方法。它的核心思想是 通过迭代逼近的方法寻找到让损失函数取得最小值的参数,如下图所示
上图中,J(ð)是损失函数,a是学习率,初始要设的小一点,这样用梯度下降法时,才会更快的迭代到。迭代过程如下所示:
最终求出最合适的参数值
2、逻辑回归
一、逻辑回归概念
线性回归可以拟合X与Y之间的关系,但回归模型中Y值是连续的,如果换成一个二分类标签,Y只能取两个值0、1,这时候就不能用线性回归了,这样就有了逻辑回归。
针对Y的值域在区间[0-1]的问题,我们不能寻找到一条完美曲线,用于拟合二分类模型,但我们可以寻找一条完美的S型曲线,S型曲线叫Sigmoid曲线,
二、Sigmoid函数介绍
Sigmoid函数数学表达示
以二分类为例,逻辑回归就是假设y=1的概率为(P(Y = 1))与X之间是S曲线关系,数学表达式为
逻辑回归核心原理是在线性回归的基础上加上一个Sigmoid函数,把训练数据通过Sigmoid函数整合到(0—1)之间。
逻辑回归的损失函数为
逻辑回归只能用梯度下降法来求解参数w,b,不能用最小二乘法。
逻辑回归虽然有“回归”两字,但是他解决的是分类问题,而不是回归问题,逻辑回归是最经典和最常用的一个分类算法
随机梯度下降:每次只考虑一个样本
批量梯度下降:考虑所有样本
3、支持向量机(SVM算法)
一、概念:SVM思想和线性回归很相似,两个都是寻找一条最佳直线。
不同点:最佳直线的定义方法不一样,线性回归要求的是直线到各个点的距离最近,SVM要求的是直线离两边的点距离尽量大。
SVM本质,
距离测度,即把点的坐标转换成点到几个固定点的距离 ,从而实现升维。
如下所示
因为SVM要映射到高维空间,再来求分离超平面,但是这样的话,运算量会非常庞大,又因为上面的核函数和和映射到高维空间的解类似,所以求SVM分离超平面时,可以用求核函数方法代替在高维空间中计算,从而实现在一维平面上计算达到高维空间计算的效果
模型融合算法概念
它不是具体的指某一个算法,而是一种把多个弱模型融合合并在一起变成一个强模型的思想
用模型融合算法的原因
1、单个模型容易过拟合,多个模型融合可以提高范化能力
2、单个模型预测能力不高,多个模型往往能提高预测能力
3、对于数据集过大或过小,可以分别进行划分和有放回的操作,产生不同的数据子集,然后通过数据子集训练不同的分类模型,最终合并成一个大的分类器
4、对于多个异构的特征集的时候,很难进行融合,可以考虑每个数据集构建一个分类模型,然后将多个模型融合
5、模型融合算法成功的关键在于能保证弱分类器(弱模型)的多样性,融合不稳定的学习算法能得到更明显的性能提升
融合模型示例
一个天气预报的示例,可以看到多个模型融合后可以显著提升预测效果:5个子模型平均都会有两个到三个的错误,但是使用少数服从多数的投票法融合之后,最终的预测结果100%正确
模型融合基础算法:
投票法(Voting):如果是分类模型,每个模型都会给出一个类别预测结果,通过投票的方式,按照少数服从多数的原则融合得到一个新的预测结果。
均值法(Averaging):如果是回归模型,每个模型给出的预测结果都是数值型的,这时候我们可以通过求所有子模型的预测结果的均值作为最终的融合结果
Bagging融合框架:
Bagging融合的原理是采用有放回的抽样,即每次从训练样本中随机取出一个样本,而且每次抽取的样本数量与总体的样本数量一致,取K次样本,对K个抽样得到的训练样本进行训练得到K个子模型,然后对K个子模型结果进行融合,分类采用投票法,回归采用均值法。典型算法是随机森林。下图即为Bagging框架示意图。
因Bagging融合算法各子模型间没有相互联系,所以它是一种并行的融合方法,可同时并行处理K个子模型,这样大大提升算法执行效率。
Boosting融合框架
Boosting融合在每次训练模型时更关注上一次的模型错判的样例,并且会给这些错判的样例更大的权重,这样做的目的是就是为了加强对错判样本的学习,让模型通过不断的迭代,效果越来越好。最终将多次迭代的训练得到的弱模型进行加权求和,得到最终的强模型。因为Boosting框架各模型间是有依赖关系存在的,所以它是一种串行的融合方法。
如上图所示,使用Boosting融合方法迭代了3轮得到3个弱分类器,每一轮的训练样本权重是不一样的,它会根据上一轮的预测结果对错判的样本进行加权,目的是为了在下一轮的训练学习中更加关注这些错判的样本,最后把每一轮训练得到的模型加权融合起来。典型算法是Adaboost,GBDT(梯度提升决策权)
Bagging融合更加关注的是得到一个更稳定的模型,而Boosting融合关注的是得到一个预测能力更强的模型。
5、随机森林
算法概述
随机森林,顾名思义就是由很多决策树融合在一起的算法,它属于Bagging框架的一种算法。
随机森林的“森林”,它的弱模型是由决策树算法训练的(CART算法),CART算法即能做回归也能做分类,“随机”是指构造的模型有一定的随机性。
每一颗决策树模型的训练是通过自助采样法(Boostrap抽样)抽出来的,所以每一个子模型的训练样本并不是完全相同的,每一个子模型都存在一些样本不在该模型的训练集中,那些没有被该子模型抽中的样本可作为这个子模型的测试集。
每一颗决策树模型在构建的时候并没有使用所有的特征变量,而是随机的从所有特征中抽取一个子集来训练模型,这样保证了子模型不但训练样本不完全一样,连特征变量也不完全一样,这样就很好的保证了多个子模型的随机性。
所以随机森林算法的随机性主要体现在以下两个方面:
1、子模型的训练样本是随机抽取的
2、子模型的特征变量也是随机抽取的
随机性的引入使得随机森林模型不容易陷入过拟合,具有很好的抗噪能力。而且随机性保证了各子模型间的多样性,子模型间差异越大,模型融合起来的效果会越好,如下图所示:
6、ADBOOST
一、基本原理
AdaBoost是adaptive boosing的缩写,它是一种基于Boosting框架的算法。下图为该算法的迭代过程。
AdaBoost从原始数据集D1开始学习第个模型,经过三轮的迭代,得到三个弱分类器,每一轮的迭代都要评估下模型的分类误差,在一轮时把分错的样本进行加权,最后把三个分类器按照一定的权重组合起来得到一个强分类器。
从上图可以看出,每一个弱分类器的模型都很简单,示例图中的它们只是一个一层的决策树,每一个弱分类器在融合的时候都有一个权重,三个弱分类器融合后,变成一个能力更强的复杂模型。
由上图可知,AdaBoost是由多个弱分类器组成,每次由一个弱分类器训练数据集,然后把这个训练器分错的数据集权重加大,没分错的减小权重,再由下一个弱学习器训练这个数据集,这样一直迭代下去,最后融合成一个最强的学习器。
AdaBoost算法构建过程,
1、假设训练集T = {(X1,Y1),(X2,Y2)……(Xn,Yn)}
2、初始化训练数据权重分布,
D1 = (Wl1,Wl2……Wln),Wli = 1/n,i=1,2……n
3、使用具有权值分布的Dm的训练集学习,得到基本分类器
4、计算Gm(x)在训练集上的分类误差
5、计算Gm(x)模型的权重系数am
6、权重训练集的权值分布
7、这里Zm是规范化因子(规一化)
8、构建分类器的线性组合
9、得到最终分类器
AdaBoost算法推导
算法的直观理解
AdaBoost小结
1、AdaBoost是一种Boosting的融合算法,它通过级联的方式,把一系列的弱学习模型融合在一起变成一个强分类器。
2、AdaBoost既可以做分类,也可以做回归
3、AdaBoost做分类模型的时候,默认的基学习类型是决策树。
4、AdaBoost的多个子模型通过加权求和的方式融合,并不是简单的求平均,子模型的权重取决于子模型的误差率大小,误差率越小,权值越大
7、GBDT
GBDT又叫梯度提升决策树,它也属于Boosting框架。GBDT核心原理如下:
如图所示,用GBDT预测年龄,第一轮,预测到年龄为20,它和真实值之间的残差为10,第二轮,GBDT开始预测上一轮的残差10,预测结果为6,这一轮 的残差为4,第三轮,以年龄4为预测目标,预测来的值为3,和真实值之间相差1,最后以残差1为预测目标,预测结果为1,此时残差为0,预测结束,最后把之前模型预测的结果全部相加,就得到预测的真实值为30岁
所以,GBDT的核心原理是先用初始值预测一颗决策树,得到本轮的残差,即真实值减预测值,然后用残差作为下一轮决策树的预测对象,这时会再产生一个残差,再用这个残差作为下一轮的预测对象,以此循环迭代直到最后一轮的预测残差为0或非常小的时候就停止迭代,然后把所有轮的模型预测结果相加得到最终预测结果,GBDT核心原理如下图所示
GBDT和AdaBoost的异同
相似之处:
都是基于Boosting思想的融合算法
默认的基分类器都是决策树
AdaBoost其实是GBDT的一个特例
不同之处:
AdaBoost的基分类器可以选择更多的算法,而GBDT只能选决策树
GBDT的模型提升方法与AdaBoost不同,AdaBoost是通过不断加强对错判数据的权重学习来提升模型的预测效果,而GBDT则是通过不断降低模型误差来(学习残差)的思想来提升模型的预测效果
1. 线性回归
在统计学和机器学习领域,线性回归可能是最广为人知也最易理解的算法之一。
预测建模主要关注的是在牺牲可解释性的情况下,尽可能最小化模型误差或做出最准确的预测。我们将借鉴、重用来自许多其它领域的算法(包括统计学)来实现这些目标。
线性回归模型被表示为一个方程式,它为输入变量找到特定的权重(即系数 B),进而描述一条最佳拟合了输入变量(x)和输出变量(y)之间关系的直线。
线性回归
例如:y = B0 + B1 * x
我们将在给定输入值 x 的条件下预测 y,线性回归学习算法的目的是找到系数 B0 和 B1 的值。
我们可以使用不同的技术来从数据中学习线性回归模型,例如普通最小二乘法的线性代数解和梯度下降优化。
线性回归大约有 200 多年的历史,并已被广泛地研究。在使用此类技术时,有一些很好的经验规则:我们可以删除非常类似(相关)的变量,并尽可能移除数据中的噪声。线性回归是一种运算速度很快的简单技术,也是一种适合初学者尝试的经典算法。
2. Logistic 回归
Logistic 回归是机器学习从统计学领域借鉴过来的另一种技术。它是二分类问题的首选方法。
像线性回归一样,Logistic 回归的目的也是找到每个输入变量的权重系数值。但不同的是,Logistic 回归的输出预测结果是通过一个叫作「logistic 函数」的非线性函数变换而来的。
logistic 函数的形状看起来像一个大的「S」,它会把任何值转换至 0-1 的区间内。这十分有用,因为我们可以把一个规则应用于 logistic 函数的输出,从而得到 0-1 区间内的捕捉值(例如,将阈值设置为 0.5,则如果函数值小于 0.5,则输出值为 1),并预测类别的值。
Logistic 回归
由于模型的学习方式,Logistic 回归的预测结果也可以用作给定数据实例属于类 0 或类 1 的概率。这对于需要为预测结果提供更多理论依据的问题非常有用。
与线性回归类似,当删除与输出变量无关以及彼此之间非常相似(相关)的属性后,Logistic 回归的效果更好。该模型学习速度快,对二分类问题十分有效。
3. 线性判别分析
Logistic 回归是一种传统的分类算法,它的使用场景仅限于二分类问题。如果你有两个以上的类,那么线性判别分析算法(LDA)是首选的线性分类技术。
LDA 的表示方法非常直接。它包含为每个类计算的数据统计属性。对于单个输入变量而言,这些属性包括:
- 每个类的均值。
- 所有类的方差。
线性判别分析
预测结果是通过计算每个类的判别值、并将类别预测为判别值最大的类而得出的。该技术假设数据符合高斯分布(钟形曲线),因此最好预先从数据中删除异常值。LDA 是一种简单而有效的分类预测建模方法。
4. 分类和回归树
决策树是一类重要的机器学习预测建模算法。
决策树可以被表示为一棵二叉树。这种二叉树与算法设计和数据结构中的二叉树是一样的,没有什么特别。每个节点都代表一个输入变量(x)和一个基于该变量的分叉点(假设该变量是数值型的)。
决策树
决策树的叶子结点包含一个用于做出预测的输出变量(y)。预测结果是通过在树的各个分叉路径上游走,直到到达一个叶子结点并输出该叶子结点的类别值而得出。
决策树的学习速度很快,做出预测的速度也很快。它们在大量问题中往往都很准确,而且不需要为数据做任何特殊的预处理准备。
5. 朴素贝叶斯
朴素贝叶斯是一种简单而强大的预测建模算法。
该模型由两类可直接从训练数据中计算出来的概率组成:1)数据属于每一类的概率;2)给定每个 x 值,数据从属于每个类的条件概率。一旦这两个概率被计算出来,就可以使用贝叶斯定理,用概率模型对新数据进行预测。当你的数据是实值的时候,通常假设数据符合高斯分布(钟形曲线),这样你就可以很容易地估计这些概率。
贝叶斯定理
朴素贝叶斯之所以被称为「朴素」,是因为它假设每个输入变量相互之间是独立的。这是一种很强的、对于真实数据并不现实的假设。不过,该算法在大量的复杂问题中十分有效。
6. K 最近邻算法
K 最近邻(KNN)算法是非常简单而有效的。KNN 的模型表示就是整个训练数据集。这很简单吧?
对新数据点的预测结果是通过在整个训练集上搜索与该数据点最相似的 K 个实例(近邻)并且总结这 K 个实例的输出变量而得出的。对于回归问题来说,预测结果可能就是输出变量的均值;而对于分类问题来说,预测结果可能是众数(或最常见的)的类的值。
关键之处在于如何判定数据实例之间的相似程度。如果你的数据特征尺度相同(例如,都以英寸为单位),那么最简单的度量技术就是使用欧几里得距离,你可以根据输入变量之间的差异直接计算出该值。
K 最近邻
KNN 可能需要大量的内存或空间来存储所有数据,但只有在需要预测时才实时执行计算(或学习)。随着时间的推移,你还可以更新并管理训练实例,以保证预测的准确率。
使用距离或接近程度的度量方法可能会在维度非常高的情况下(有许多输入变量)崩溃,这可能会对算法在你的问题上的性能产生负面影响。这就是所谓的维数灾难。这告诉我们,应该仅仅使用那些与预测输出变量最相关的输入变量。
7. 学习向量量化
KNN 算法的一个缺点是,你需要处理整个训练数据集。而学习向量量化算法(LVQ)允许选择所需训练实例数量,并确切地学习这些实例。
学习向量量化
LVQ 的表示是一组码本向量。它们在开始时是随机选择的,经过多轮学习算法的迭代后,最终对训练数据集进行最好的总结。通过学习,码本向量可被用来像 K 最近邻那样执行预测。通过计算每个码本向量与新数据实例之间的距离,可以找到最相似的邻居(最匹配的码本向量)。然后返回最匹配单元的类别值(分类)或实值(回归)作为预测结果。如果将数据重新放缩放到相同的范围中(例如 0 到 1 之间),就可以获得最佳的预测结果。
如果你发现 KNN 能够在你的数据集上得到不错的预测结果,那么不妨试一试 LVQ 技术,它可以减少对内存空间的需求,不需要像 KNN 那样存储整个训练数据集。
8. 支持向量机
支持向量机(SVM)可能是目前最流行、被讨论地最多的机器学习算法之一。
超平面是一条对输入变量空间进行划分的「直线」。支持向量机会选出一个将输入变量空间中的点按类(类 0 或类 1)进行最佳分割的超平面。在二维空间中,你可以把他想象成一条直线,假设所有输入点都可以被这条直线完全地划分开来。SVM 学习算法旨在寻找最终通过超平面得到最佳类别分割的系数。
支持向量机
超平面与最近数据点之间的距离叫作间隔(margin)。能够将两个类分开的最佳超平面是具有最大间隔的直线。只有这些点与超平面的定义和分类器的构建有关,这些点叫作支持向量,它们支持或定义超平面。在实际应用中,人们采用一种优化算法来寻找使间隔最大化的系数值。
支持向量机可能是目前可以直接使用的最强大的分类器之一,值得你在自己的数据集上试一试。
9. 袋装法和随机森林
随机森林是最流行也最强大的机器学习算法之一,它是一种集成机器学习算法。
自助法是一种从数据样本中估计某个量(例如平均值)的强大统计学方法。你需要在数据中取出大量的样本,计算均值,然后对每次取样计算出的均值再取平均,从而得到对所有数据的真实均值更好的估计。
Bagging 使用了相同的方法。但是最常见的做法是使用决策树,而不是对整个统计模型进行估计。Bagging 会在训练数据中取多个样本,然后为每个数据样本构建模型。当你需要对新数据进行预测时,每个模型都会产生一个预测结果,Bagging 会对所有模型的预测结果取平均,以便更好地估计真实的输出值。
随机森林
随机森林是这种方法的改进,它会创建决策树,这样就不用选择最优分割点,而是通过引入随机性来进行次优分割。
因此,为每个数据样本创建的模型比在其它情况下创建的模型更加独特,但是这种独特的方式仍能保证较高的准确率。结合它们的预测结果可以更好地估计真实的输出值。
如果你使用具有高方差的算法(例如决策树)获得了良好的结果,那么你通常可以通过对该算法执行 Bagging 获得更好的结果。
10. Boosting 和 AdaBoost
Boosting 是一种试图利用大量弱分类器创建一个强分类器的集成技术。要实现 Boosting 方法,首先你需要利用训练数据构建一个模型,然后创建第二个模型(它企图修正第一个模型的误差)。直到最后模型能够对训练集进行完美地预测或加入的模型数量已达上限,我们才停止加入新的模型。
AdaBoost 是第一个为二分类问题开发的真正成功的 Boosting 算法。它是人们入门理解 Boosting 的最佳起点。当下的 Boosting 方法建立在 AdaBoost 基础之上,最著名的就是随机梯度提升机。
AdaBoost
AdaBoost 使用浅层决策树。在创建第一棵树之后,使用该树在每个训练实例上的性能来衡量下一棵树应该对每个训练实例赋予多少权重。难以预测的训练数据权重会增大,而易于预测的实例权重会减小。模型是一个接一个依次创建的,每个模型都会更新训练实例权重,影响序列中下一棵树的学习。在构建所有的树之后,我们就可以对新的数据执行预测,并根据每棵树在训练数据上的准确率来对其性能进行加权。
由于算法在纠正错误上投入了如此多的精力,因此删除数据中的异常值在数据清洗过程中是非常重要的。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/302711.html