找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

机器学习8大基础算法 (KNN+线性回归+逻辑归回)

admin 2019-10-9 08:16 99人围观 C++相关

    本文介绍机器学习最基础、最常用的8大基础算法,包括KNN、线性回归、逻辑回归、决策树、支持向量机、朴素贝叶斯、PCA和K-Means,每一种算法都有其独特的设计思路。本文从网络资料整理而来,汇集有质量的文章,剔除生僻、冗余、晦涩的部分,以便于理解的方式组织呈现,内容较长,可作为算法参考文档。本文不介绍数学和机器学习基本概念,如特征、拟合、方差、向量、矩阵、点积、叉积等,假设读者已经掌握这些内容。

一、KNN算法


  • 基于实例的学习

1、已知一系列的训练样例,很多学习方法为目标函数建立起明确的一般化描述;但与此不同,基于实例的学习方法只是简单地把训练样例存储起来。

从这些实例中泛化的工作被推迟到必须分类新的实例时。每当学习器遇到一个新的查询实例,它分析这个新实例与以前存储的实例的关系,并据此把一个目标函数值赋给新实例。

2、基于实例的方法可以为不同的待分类查询实例建立不同的目标函数逼近。事实上,很多技术只建立目标函数的局部逼近,将其应用于与新查询实例邻近的实例,而从不建立在整个实例空间上都表现良好的逼近。当目标函数很复杂,但它可用不太复杂的局部逼近描述时,这样做有显著的优势。

3、基于实例方法的不足

       a)分类新实例的开销可能很大。这是因为几乎所有的计算都发生在分类时,而不是在第一次遇到训练样例时。所以,如何有效地索引训练样例,以减少查询时所需计算是一个重要的实践问题。

       b)当从存储器中检索相似的训练样例时,它们一般考虑实例的所有属性。如果目标概念仅依赖于很多属性中的几个时,那么真正最“相似”的实例之间很可能相距甚远。


  • k-最近邻法算法简介

       KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中最简单的算法之一,其指导思想是”近朱者赤,近墨者黑“,即由你的邻居来推断出你的类别。

       KNN最邻近分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近的K个已知样本,根据少数服从多数的投票法则(majority-voting),将未知样本与K个最邻近样本中所属类别占比较多的归为一类。

       以上就是KNN算法在分类任务中的基本原理,实际上K这个字母的含义就是要选取的最邻近样本实例的个数,在 scikit-learn 中 KNN算法的 K 值是通过n_neighbors 参数来调节的,默认值是 5。

       如下图所示,如何判断绿色圆应该属于哪一类,是属于红色三角形还是属于蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被判定为属于红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆将被判定为属于蓝色四方形类。



       由于KNN最邻近分类算法在分类决策时只依据最邻近的一个或者几个样本的类别来决定待分类样本所属的类别,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

       KNN算法的关键:

       (1) 样本的所有特征都要做可比较的量化

       若是样本特征中存在非数值的类型,必须采取手段将其量化为数值。例如样本特征中包含颜色,可通过将颜色转换为灰度值来实现距离计算。

       (2) 样本特征要做归一化处理

       样本有多个参数,每一个参数都有自己的定义域和取值范围,他们对距离计算的影响不一样,如取值较大的影响力会盖过取值较小的参数。所以样本参数必须做一些 scale 处理,最简单的方式就是所有特征的数值都采取归一化处置。

        (3) 需要一个距离函数以计算两个样本之间的距离

       通常使用的距离函数有:欧氏距离、余弦距离、汉明距离、曼哈顿距离等,一般选欧氏距离作为距离度量,但是这是只适用于连续变量。在文本分类这种非连续变量情况下,汉明距离可以用来作为度量。通常情况下,如果运用一些特殊的算法来计算度量的话,K近邻分类精度可显著提高,如运用大边缘最近邻法或者近邻成分分析法。

       以计算二维空间中的A(x1,y1)、B(x2,y2)两点之间的距离为例,欧氏距离和曼哈顿距离的计算方法如下图所示:

   



4) 确定K的值

       K值选的太大易引起欠拟合,太小容易过拟合,需交叉验证确定K值。

  • sklearn中KNN参数使用

由于sklearn中有现成的算法,这里根据算法中的参数来进行说明,我们使用sklearn.neighbors.KNeighborsClassifier就可以是实现上小结,我们实现的k-近邻算法。

KNeighborsClassifier函数一共有8个参数。



KNneighborsClassifier参数说明:




  • 算法小结

       KNN算法是很基本的机器学习算法了,它非常容易学习,在维度很高的时候也有很好的分类效率,因此运用也很广泛,这里总结下KNN的优缺点。

KNN的主要优点有:

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

  2) 可用于非线性分类

  3) 训练时间复杂度比支持向量机之类的算法低,仅为O(n)

  4) 和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感

  5) 由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合

  6)该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分

KNN的主要缺点有:

  1)计算量大,尤其是特征数非常多的时候

  2)样本不平衡的时候,对稀有类别的预测准确率低

  3)KD树,球树之类的模型建立需要大量的内存

  4)使用懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢

  5)相比决策树模型,KNN模型可解释性不强

       KNN适用场合:

       1)KNN是一个有监督算法,需要有标注好的样本。

       2)从算法复杂度的角度来看,更适合特征个数较少,已标注样本数量不是过多的场合。

       3)KNN的可解释性较差。无法给出决策树那样的规则,也无法象逻辑回归那样对数据给出整齐的划分。事实上,KNN更适合处理一些分类规则相对复杂的问题。

二、线性回归算法


  • 算法原理

       针对样本特征特征维度为1的数据数据集x和y,假设预测函数为(x),记为:       



其中为们需要求的参数,而参数的改变将会导致假设函数的变化,如:



在求解上述参数之前,我们有必要找到一种方法来衡量我们找到的函数是否为最优解,即代价函数。

代价函数(Cost Function)

       对于回归问题,常用的用于衡量最优解的代价函数为平方误差。



    平方误差的思想就是将实际样本数据值与我们拟合出的线做对应差值,即计算差距。

    而为了减少由于极端数据的影响而造成的巨大波动,通常采用类似方差来减少个别数据影响,至于选择平方和作为估计函数,则需从概率分布角度了解其公式来源(统计学中,残差平方和函数可以看成n倍的均方误差),除以m则计算平均值,系数1/2则是纯数学简化(最小值的1/2仍然是最小值,不改变整体性质),其目的是当求导后相乘则消去系数,由此导出以下代价函数:



    有了代价函数,从数学上来看,我们求解最优解的问题继而转而变成如何求函数的最小值:



    即cost函数J是基于theta的函数,用来检测我们的theta参数从而得到我们的假设函数。

最小值



简化令之只有theta-1

       上图是当对假设函数进行简化,使得theta-0 = 0,即只有一个参数theta-1,并假设给定样本数据为y ={(1,1), (2,2),(3,3)}; 当我们不断尝试给定theta-1,如0,0.5, 1时也得到J={(0, 2.3),(0.5, 0.58),(1,0)} 等等数据,其连线图形为右边的图形,可以看到对于当前案例,图形其J代价当theta = 1时有极小值。

       其实大家可以看出,从数学角度,上述简化后的代价函数为一元二次方程,其在theta=1可导,并且导数为0,并且在theta=1处二阶可导,二阶导数大于0,所以在theta=1处取得极小值。

       其数学原理见如下定理:



    我们令上式等于零,从而可以得到θ1 和 θ0 的闭式closed-form(解析解,显性表达式;显式解)解:



其中,


是x的均值。




  • 最小二乘法

上述代价函数中使用的均方误差,其实对应了我们常用的欧几里得的距离(欧式距离,Euclidean Distance), 基于均方误差最小化进行模型求解的方法称为“最小二乘法”(least square method),即通过最小化误差的平方和寻找数据的最佳函数匹配;

       当函数子变量为一维时,最小二乘法就蜕变成寻找一条直线;

       推广到n个变量(n维),HypothesisFunction为:



其对应均方误差表示为如下矩阵:



即结果为:



根据微积分定理,令上式等于零,可以得到 θ 最优的闭式解。当



为满秩矩阵或正定矩阵时,可解得



数学原理

       微积分角度来讲,最小二乘法是采用非迭代法,针对代价函数求导数而得出全局极值,进而对所给定参数进行估算。

计算数学角度来讲,最小二乘法的本质上是一个线性优化问题,试图找到一个最优解。

       线性代数角度来讲,最小二乘法是求解线性方程组,当方程个数大于未知量个数,其方程本身 无解,而最小二乘法则试图找到最优残差。

       几何角度来讲,最小二乘法中的几何意义是高维空间中的一个向量在低维子空间的投影。

       概率论角度来讲,如果数据的观测误差是/或者满足高斯分布,则最小二乘解就是使得观测数据出现概率最大的解,即最大似然估计-Maximum LikelihoodEstimate,MLE(利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值)。

局限性

       最小二乘法算法简单,容易理解,而然在现实机器学习却有其局限性:

       并非所有函数都可以求出驻点,即导数为0的点,f(x)=0

       求解方程困难,或求根公式复杂(引入泰勒公式展开?)

       导数并无解析解,(多数函数无解析解)

       最小二乘法的矩阵公式,计算一个矩阵的逆是相当耗费时间的, 而且求逆也会存在数值不稳定的情况 (比如对希尔伯特矩阵求逆就几乎是不可能的)




  • 梯度下降算法

梯度下降算法(GradientDescent)

       正是由于在实际中,最小二乘法遇到的困难和局限性,尤其是多数超定方程组不存在解,我们由求导转向迭代逼近。先看一下标准梯度的数学定义:

方向导数

       普通的偏导数是多元函数沿坐标轴的变化率,方向导数则考虑多元函数沿任意方向的变化率。

如下图考虑一个三维空间的方向导数:



简单来说,方向导数即研究在某一点的任意方向的变化率,是偏导数的广义扩展。

梯度

       梯度则基于方向导数,是一个向量而非数,梯度代表了各个导数中,变化趋势最大的那个方向。

       来看一下数学的严谨定义:

       定义 设函数z=f(x, y) 在平面区域D内具有一阶连续偏导数,则对于每一点(x, y) 属于D,都可定出一个向量



这向量称为函数z= f(x, y) 在点P(x, y) 的梯度,记作grad f(x, y),即



    根据数学知识,我们知道上述沿梯度方向的方向导数达最大值,即梯度的方向是函数f(x, y)或者我们关注的目标函数在这点P(x, y)增长最快,或者函数值变化最快的方向,负梯度方向是减小最快的方向,如下图。

   



    在机器学习中,上述的f(x,y)即是我们代价函数,如上图,当我们目标求f(x,y)的极小值时,我们可以先任意选取一个初始点,如x0, 让其沿着梯度负方向,依次走到x1,x2,x3,... xn,迭代n次,这样可以最快到达极小值点xn。

       举个Ng中三维的例子,比如我们站在山上某一地点,梯度所指示的方向是高度变化最快的方向,你沿着这个方向走,可以最快的改变你所在位置的高度(增加或者减少),即如果你一直沿着梯度走,你可以最快到达某个顶峰或者谷底。



可以看出,初始点的选择不同,所计算出的极小值也不尽相同。

数学原理



我们来看一下标准梯度下降定义:

       梯度下降算法也是一种优化算法,是求解无约束多元函数极值最早的数值方法,通常也被称作最速下降法。其目的是找到一个局部极小值点;其目标与最小二乘法相同,都是使得估算值与实际值的总平方差尽量小。

       而其实现上,则采用计算数学,迭代法,先给定一初始点,然后向下降最快的方向调整,在若干次迭代之后找到局部最小。梯度下降法的缺点是到最小点的时候收敛速度变慢,并且对初始点的选择极为敏感,梯度下降算法不可避免的会存在陷入局部极小值的情形,这也是梯度下降算法的重大缺陷,其改进大多是在这两方面下功夫。

单元线性回归梯度算法实现

       给定一个初始的(仅以2参数为例)

       不断改变从而减少J()的值,具体做法是求导。直到最终收敛。

我们仍旧针对线性回归模型,包含两个参数为例:



       把假设函数h带入代价函数J(θ0,θ1)中,并分别求偏导数:

       至此,得到计算机容易迭代的算法,整个过程序算法概括如下:



批次梯度下降(Batch Gradient Descent)

可以看到上述每次迭代都需要计算所有样本的残差并加和,所以又称作批次梯度下降(Batch Gradient Descent)。

学习率

       上图中的系数a,通常称作学习率,用来控制下降的幅度。如果学习率太小,θ的值每次变化很小,梯度下降会很慢;



多元线性回归梯度算法实现

上述都是简单的单元线性回归-梯度下降,我们再继续扩展至多元回归的梯度下降。对于多元来讲(即由多个维度的样本数据,比如房价数据除了房屋面积大小,还有房间数,楼层,房龄,朝向,地理位置等,增加到多维)。

     其对应的假设函数为如下:



    或者用代数的简化记法:



    其对应的多元代价函数:



    所以对应的多元梯度算法如下:



梯度向量:

线性回归模型的成本函数定义为



那么成本函数偏导数为



成本函数的梯度向量即可描述为:



梯度下降的步长为:


其中为学习率。

一个一元一次方程的批量梯度下降拟合算法可以简单实现为:



随机梯度下降与小批量梯度下降

    批量梯度下降需要整个训练集来计算每一步的梯度,随意训练集很大时,算法会特别慢,因此引入引入随机梯度下降,每一步在训练集中随机的选择一个实例,并且基于该单个实例来计算梯度。随机梯度下降算法永远不会停止,即便它达到了最小值,需要为其制定一个学习计划。小批量梯度下降就是批量和随机的折中,每一步计算梯度时,基于一小部分随机的实例集。相较于随机梯度下降其主要优势在于可以从矩阵运算的硬件优化中获得性能提升,特别是需要用到图形处理器时。

  • 多项式回归

       当数据的分布比较复杂时简单的直线无法描述,可以采用多项式回归,其原理是将每一个特征的幂次方作为一个新特征来拟合非线性,当存在多个特征时,多项式回归能够发现特征与特征之间的关系,因为特征生成器会子给定的多项式阶数下添加所有的特征组合。

  • 正则线性模型

概念回顾:

       L0范数是指向量中非0的元素的个数;

       L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization);L1范数和L0范数可以实现稀疏,L1因具有比L0更好的优化求解特性而被广泛应用。

       L2范数是指向量各元素的平方和然后求平方根,我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。它也不逊于L1范数,它有两个美称,在回归里面,有人把有它的回归叫“岭回归”(Ridge Regression),有人也叫它“权值衰减weight decay”。L2范数不但可以防止过拟合,还可以让我们的优化求解变得稳定和快速。

       对线性模型来说,正则化是通过约束模型的权重来实现,通常包括岭回归(Ridge Regression)、套索回归(Lasso Regression)、弹性网络(Elastic Net)三种方法。

       岭回归和套索回归的的正则化因子分别对弈L1、L2范数,弹性网络就是二者的中间地带,其正则项就是岭回归和套索回归的正则项的混合,成本函数如下:



在scikit-learn中,岭回归使用方式如下:

a.岭回归

from sklearn.liner_model import Ridge

ridge_reg = Ridge(alpha =1,solver='cholesky'),其中alpha为控制正则化程度的超参数,solver表示权重参数的求解方法。

b.随机梯度下降+L2正则化

sgd_reg = SGDRegressor(penalty="L2"),超参数penalty表示使用正则项的类型。

套索回归的使用方法如下:

a.套索回归

from sklearn.liner_model import Lasso

ridge_reg = Lasso (alpha =a)

b.随机梯度下降+L1正则化

sgd_reg = SGDRegressor(penalty="L1")

弹性网络回归使用方法如下:

from sklearn.liner_model import ElasticNet

aaa = ElasticNet(alpha=01,l1_ratio=0.5),其中超参数l1_ratio对应成本函数中的混合比例r。

       线性回归、岭回归、Lasso回归、弹性网络如何选择?

       通常来说,有正则化--哪怕是很小,总是比没有更可取一些。所有大多数情况下你应该避免使用纯线性回归。岭回归是个不错的默认选择,但是如果你觉得实际使用到的特征只有少数几个那就更倾向于Lasso或者ElasticNet,因为它们会将无用的特征值的权重降为零。一般而言,ElasticNet优于Lasso,因为当特征数量超过训练的实例数量,又或是几个特征强相关时,Lasso的表象可能非常不稳定。可以简单记为Ridge  > ElasticNet  > Lasso。

三、逻辑回归


1、逻辑回归基本概念

Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)。

Logistic回归的主要用途:

寻找危险因素:寻找某一疾病的危险因素等;

预测:根据模型,预测在不同的自变量情况下,发生某病或某种情况的概率有多大;

判别:实际上跟预测有些类似,也是根据模型,判断某人属于某病或属于某种情况的概率有多大,也就是看一下这个人有多大的可能性是属于某病。

Logistic回归主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率,等等。例如,想探讨胃癌发生的危险因素,可以选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群肯定有不同的体征和生活方式等。这里的因变量就是是否胃癌,即“是”或“否”,自变量就可以包括很多了,例如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。

这里也记录一下逻辑回归的应用。

一个是在美团上的应用,主要作用是:

a、预测一个用户是否点击特定的商品

b、判断用户的性别

c、预测用户是否会购买给定的品类

d、判断一条评论是正面的还是负面的

第二个应用是腾讯APP的推荐,据说也是使用逻辑回归预测应用宝里用户是否会下载某个APP。

2、由来

       要说逻辑回归,我们得追溯到线性回归,想必大家对线性回归都有一定的了解,即对于多维空间中存在的样本点,我们用特征的线性组合去拟合空间中点的分布和轨迹。如下图所示:



    线性回归能对连续值结果进行预测,而现实生活中常见的另外一类问题是,分类问题。最简单的情况是是与否的二分类问题。比如说医生需要判断病人是否生病,银行要判断一个人的信用程度是否达到可以给他发信用卡的程度,邮件收件箱要自动对邮件分类为正常邮件和垃圾邮件等等。

       当然,我们最直接的想法是,既然能够用线性回归预测出连续值结果,那根据结果设定一个阈值是不是就可以解决这个问题了呢?事实是,对于很标准的情况,确实可以的,这里我们套用Andrew Ng老师的课件中的例子,下图中X为数据点肿瘤的大小,Y为观测结果是否是恶性肿瘤。通过构建线性回归模型,如hθ(x)所示,构建线性回归模型后,我们设定一个阈值0.5,预测hθ(x)≥0.5的这些点为恶性肿瘤,而hθ(x)<0.5为良性肿瘤。



     但很多实际的情况下,我们需要学习的分类数据并没有这么精准,比如说上述例子中突然有一个不按套路出牌的数据点出现,如下图所示:



    你看,现在你再设定0.5,这个判定阈值就失效了,而现实生活的分类问题的数据,会比例子中这个更为复杂,而这个时候我们借助于线性回归+阈值的方式,已经很难完成一个鲁棒性很好的分类器了。

        在这样的场景下,逻辑回归就诞生了。它的核心思想是,如果线性回归的结果输出是一个连续值,而值的范围是无法限定的,那我们有没有办法把这个结果值映射为可以帮助我们判断的结果呢。而如果输出结果是 (0,1) 的一个概率值,这个问题就很清楚了。我们在数学上找了一圈,还真就找着这样一个简单的函数了,就是很神奇的sigmoid函数(如下):



    如果把sigmoid函数图像画出来,是如下的样子:



       从函数图上可以看出,函数y=g(z)在z=0的时候取值为1/2,而随着z逐渐变小,函数值趋于0,z逐渐变大的同时函数值逐渐趋于1,而这正是一个概率的范围。

      

 所以我们定义线性回归的预测函数为

,那么逻辑回归的输出

,其中y=g(z)函数正是上述sigmoid函数(或者简单叫做S形函数)。

3、判定边界

       我们现在再来看看,为什么逻辑回归能够解决分类问题。这里引入一个概念,叫做判定边界,可以理解为是用以对不同类别的数据分割的边界,边界的两旁应该是不同类别的数据。

       从二维直角坐标系中,举几个例子,大概是如下这个样子:



     有时候是这个样子:



    甚至可能是这个样子:



    上述三幅图中的红绿样本点为不同类别的样本,而我们划出的线,不管是直线、圆或者是曲线,都能比较好地将图中的两类样本分割开来。这就是我们的判定边界,下面我们来看看,逻辑回归是如何根据样本点获得这些判定边界的。

    我们依旧借用Andrew Ng教授的课程中部分例子来讲述这个问题。

    回到sigmoid函数,我们发现:

        当g(z)≥0.5时, z≥0;

        对于hθ(x)=g(θTX)≥0.5, 则θTX≥0, 此时意味着预估y=1;

        反之,当预测y = 0时,θTX<0;

    所以我们认为θTX =0是一个决策边界,当它大于0或小于0时,逻辑回归模型分别预测不同的分类结果。

    先看第一个例子hθ(x)=g(θ0+θ1X1+θ2X2),其中θ0 ,θ1 ,θ2分别取-3, 1, 1。则当−3+X1+X2≥0时, y = 1; 则X1+X2=3是一个决策边界,图形表示如下,刚好把图上的两类点区分开来:



    例1只是一个线性的决策边界,当hθ(x)更复杂的时候,我们可以得到非线性的决策边界,例如:



    这时当x12+x22≥1时,我们判定y=1,这时的决策边界是一个圆形,如下图所示:



    所以我们发现,理论上说,只要我们的hθ(x)设计足够合理,准确的说是g(θTx)中θTx足够复杂,我们能在不同的情形下,拟合出不同的判定边界,从而把不同的样本点分隔开来。

4、代价函数与梯度下降

       我们通过对判定边界的说明,知道会有合适的参数θ使得θTx=0成为很好的分类判定边界,那么问题就来了,我们如何判定我们的参数θ是否合适,有多合适呢?更进一步,我们有没有办法去求得这样的合适参数θ呢?

       这就是我们要提到的代价函数与梯度下降了。

       所谓的代价函数Cost Function,其实是一种衡量我们在这组参数下预估的结果和实际结果差距的函数,比如说线性回归的代价函数定义为:



    当然我们可以和线性回归类比得到一个代价函数,实际就是上述公式中hθ(x)取为逻辑回归中的g(θTx),但是这会引发代价函数为“非凸”函数的问题,简单一点说就是这个函数有很多个局部最低点,如下图所示:



    而我们希望我们的代价函数是一个如下图所示,碗状结构的凸函数,这样我们算法求解到局部最低点,就一定是全局最小值点。



     因此,上述的Cost Function对于逻辑回归是不可行的,我们需要其他形式的CostFunction来保证逻辑回归的成本函数是凸函数。

我们跳过大量的数学推导,直接出结论了,我们找到了一个适合逻辑回归的代价函数:



 Andrew Ng老师解释了一下这个代价函数的合理性,我们首先看当y=1的情况:



如果我们的类别y = 1, 而判定的hθ(x)=1,则Cost = 0,此时预测的值和真实的值完全相等,代价本该为0;而如果判断hθ(x)→0,代价->∞,这很好地惩罚了最后的结果。

而对于y=0的情况,如下图所示,也同样合理:



    下面我们说说梯度下降,梯度下降算法是调整参数θ使得代价函数J(θ)取得最小值的最基本方法之一。从直观上理解,就是我们在碗状结构的凸函数上取一个初始值,然后挪动这个值一步步靠近最低点的过程,如下图所示:



    我们先简化一下逻辑回归的代价函数:



    从数学上理解,我们为了找到最小值点,就应该朝着下降速度最快的方向(导函数/偏导方向)迈进,每次迈进一小步,再看看此时的下降最快方向是哪,再朝着这个方向迈进,直至最低点。

    用迭代公式表示出来的最小化J(θ)的梯度下降算法如下:





5、总结

       最后我们总结一下逻辑回归。它始于输出结果为有实际意义的连续值的线性回归,但是线性回归对于分类的问题没有办法准确而又具备鲁棒性地分割,因此我们设计出了逻辑回归这样一个算法,它的输出结果表征了某个样本属于某类别的概率。

      逻辑回归的成功之处在于,将原本输出结果范围可以非常大的θTX 通过sigmoid函数映射到(0,1),从而完成概率的估测。

       而直观地在二维空间理解逻辑回归,是sigmoid函数的特性,使得判定的阈值能够映射为平面的一条判定边界,当然随着特征的复杂化,判定边界可能是多种多样的样貌,但是它能够较好地把两类样本点分隔开,解决分类问题。

      求解逻辑回归参数的传统方法是梯度下降,构造为凸函数的代价函数后,每次沿着偏导方向(下降速度最快方向)迈进一小部分,直至N次迭代后到达最低点。


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:网界游骑,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......