【BAT 机器学习面试题】前 100 题汇总及勘误(中)



转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com

AIQ 机器学习大数据 知乎专栏 点击关注

61. 说说梯度下降法

  @LeftNotEasy,本题解析来源:http://www.cnblogs.com/LeftNotEasy/archive/2010/12/05/mathmatic_in_machine_learning_1_regression_and_gradient_descent.html

  下面是一个典型的机器学习的过程,首先给出一个输入数据,我们的算法会通过一系列的过程得到一个估计的函数,这个函数有能力对没有见过的新数据给出一个新的估计,也被称为构建一个模型。

 

   

  我们用 X1,X2..Xn 去描述 feature 里面的分量,比如 x1= 房间的面积,x2= 房间的朝向等等,我们可以做出一个估计函数:

  θ在这儿称为参数,在这儿的意思是调整 feature 中每个分量的影响力,就是到底是房屋的面积更重要还是房屋的地段更重要。为了如果我们令 X0 = 1,就可以用向量的方式来表示了:

  我们程序也需要一个机制去评估我们θ是否比较好,所以说需要对我们做出的 h 函数进行评估,一般这个进行评估的函数称为损失函数(loss function),描述 h 函数不好的程度,在下面,我们称这个函数为 J 函数

  在这儿我们可以做出下面的一个损失函数:

 

  换言之,我们把对 x(i) 的估计值与真实值 y(i) 差的平方和作为损失函数,前面乘上的 1/2 是为了在求导的时候,这个系数就不见了。

  如何调整θ以使得 J(θ) 取得最小值有很多方法,其中有最小二乘法 (min square),是一种完全是数学描述的方法,另外一种就是梯度下降法。

  梯度下降法的算法流程如下:

  1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。

  2)改变θ的值,使得 J(θ) 按梯度下降的方向进行减少。

  为了描述的更清楚,给出下面的图:

  这是一个表示参数θ与误差函数 J(θ) 的关系图,红色的部分是表示 J(θ) 有着比较高的取值,我们需要的是,能够让 J(θ) 的值尽量的低,也就是达到深蓝色的部分。θ0,θ1 表示θ向量的两个维度。

  在上面提到梯度下降法的第一步是给θ给一个初值,假设随机给的初值是在图上的十字点。

  然后我们将θ按照梯度下降的方向进行调整,就会使得 J(θ) 往更低的方向进行变化,如下图所示,算法的结束将是在θ下降到无法继续下降为止。

  当然,可能梯度下降的最终点并非是全局最小点,即也可能是一个局部最小点,如下图所示:

  上面这张图就是描述的一个局部最小点,这是我们重新选择了一个初始点得到的,看来我们这个算法将会在很大的程度上被初始点的选择影响而陷入局部最小点。

  下面我将用一个例子描述一下梯度减少的过程,对于我们的函数 J(θ) 求偏导 J:

   

  下面是更新的过程,也就是θi 会向着梯度最小的方向进行减少。θi 表示更新之前的值,- 后面的部分表示按梯度方向减少的量,α表示步长,也就是每次按照梯度减少的方向变化多少。

  一个很重要的地方值得注意的是,梯度是有方向的,对于一个向量θ,每一维分量θi 都可以求出一个梯度的方向,我们就可以找到一个整体的方向,在变化的时候,我们就朝着下降最多的方向进行变化就可以达到一个最小点,不管它是局部的还是全局的。

  用更简单的数学语言进行描述步骤 2)是这样的:

   

62. 梯度下降法找到的一定是下降最快的方向么?
  梯度下降法并不是下降最快的方向,它只是目标函数在当前的点的切平面(当然高维问题不能叫平面)上下降最快的方向。在 practical implementation 中,牛顿方向(考虑海森矩阵)才一般被认为是下降最快的方向,可以达到 superlinear 的收敛速度。梯度下降类的算法的收敛速度一般是 linear 甚至 sublinear 的(在某些带复杂约束的问题)。by 林小溪(https://www.zhihu.com/question/30672734/answer/139689869)。
  一般解释梯度下降,会用下山来举例。假设你现在在山顶处,必须抵达山脚下(也就是山谷最低处)的湖泊。但让人头疼的是,你的双眼被蒙上了无法辨别前进方向。换句话说,你不再能够一眼看出哪条路径是最快的下山路径,如下图(图片来源:http://blog.csdn.net/wemedia/details.html?id=45460):

  最好的办法就是走一步算一步,先用脚向四周各个方向都迈出一步,试探一下周围的地势,用脚感觉下哪个方向是下降最大的方向。换言之,每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向(当前最陡峭的位置向下)走一步。就这样,每要走一步都根据上一步所在的位置选择当前最陡峭最快下山的方向走下一步,一步步走下去,一直走到我们感觉已经到了山脚。
  当然这样走下去,我们走到的可能并不一定是真正的山脚,而只是走到了某一个局部的山峰低处。换句话说,梯度下降不一定能够找到全局的最优解,也有可能只是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

  @zbxzc(http://blog.csdn.net/u014568921/article/details/44856915):更进一步,我们来定义输出误差,即对于任意一组权值向量,那它得到的输出和我们预想的输出之间的误差值。定义误差的方法很多,不同的误差计算方法可以得到不同的权值更新法则,这里我们先用这样的定义:

  上面公式中 D 代表了所有的输入实例,或者说是样本,d 代表了一个样本实例,od 表示感知器的输出,td 代表我们预想的输出。
  这样,我们的目标就明确了,就是想找到一组权值让这个误差的值最小,显然我们用误差对权值求导将是一个很好的选择,导数的意义是提供了一个方向,沿着这个方向改变权值,将会让总的误差变大,更形象的叫它为梯度。

  既然梯度确定了 E 最陡峭的上升的方向,那么梯度下降的训练法则是:

  梯度上升和梯度下降其实是一个思想,上式中权值更新的 + 号改为 - 号也就是梯度上升了。梯度上升用来求函数的最大值,梯度下降求最小值。

这样每次移动的方向确定了,但每次移动的距离却不知道。这个可以由步长(也称学习率)来确定,记为α。这样权值调整可表示为:

  总之,梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是“最速下降法”。最速下降法越接近目标值,步长越小,前进越慢。梯度下降法的搜索迭代示意图如下图所示:

  正因为梯度度下降法在接近最优解的区域收敛速度明显变慢,所以利用梯度下降法求解需要很多次的迭代。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。by@wtq1993,http://blog.csdn.net/wtq1993/article/details/51607040

随机梯度下降

  普通的梯度下降算法在更新回归系数时要遍历整个数据集,是一种批处理方法,这样训练数据特别忙庞大时,可能出现如下问题:

  1)收敛过程可能非常慢;

  2)如果误差曲面上有多个局极小值,那么不能保证这个过程会找到全局最小值。

  为了解决上面的问题,实际中我们应用的是梯度下降的一种变体被称为随机梯度下降。

  上面公式中的误差是针对于所有训练样本而得到的,而随机梯度下降的思想是根据每个单独的训练样本来更新权值,这样我们上面的梯度公式就变成了:

  经过推导后,我们就可以得到最终的权值更新的公式:

  有了上面权重的更新公式后,我们就可以通过输入大量的实例样本,来根据我们预期的结果不断地调整权值,从而最终得到一组权值使得我们的算法能够对一个新的样本输入得到正确的或无限接近的结果。

这里做一个对比

设代价函数为

  批量梯度下降

  参数更新为:

         

  i 是样本编号下标,j 是样本维数下标,m 为样例数目,n 为特征数目。所以更新一个θj 需要遍历整个样本集

随机梯度下降

  参数更新为:

        

  i 是样本编号下标,j 是样本维数下标,m 为样例数目,n 为特征数目。所以更新一个θj 只需要一个样本就可以。

  下面两幅图可以很形象的对比各种优化方法(图来源:http://sebastianruder.com/optimizing-gradient-descent/):

SGD 各优化方法在损失曲面上的表现

  从上图可以看出, Adagrad、Adadelta 与 RMSprop 在损失曲面上能够立即转移到正确的移动方向上达到快速的收敛。而 Momentum 与 NAG 会导致偏离 (off-track)。同时 NAG 能够在偏离之后快速修正其路线,因为其根据梯度修正来提高响应性。

SGD 各优化方法在损失曲面鞍点处上的表现

63. 牛顿法和梯度下降法有什么不同

  @wtq1993,http://blog.csdn.net/wtq1993/article/details/51607040
  1)牛顿法(Newton’s method)

  牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数 f (x) 的泰勒级数的前面几项来寻找方程 f (x) = 0 的根。牛顿法最大的特点就在于它的收敛速度很快。

  具体步骤:

  首先,选择一个接近函数 f (x)零点的 x0,计算相应的 f (x0) 和切线斜率 f  ’ (x0)(这里 f ’ 表示函数 f  的导数)。然后我们计算穿过点 (x0,  f  (x0)) 并且斜率为 f ’(x0) 的直线和 x 轴的交点的 x 坐标,也就是求如下方程的解:

  我们将新求得的点的 x 坐标命名为 x1,通常 x1 会比 x0 更接近方程 f  (x) = 0 的解。因此我们现在可以利用 x1 开始下一轮迭代。迭代公式可化简为如下所示:

  已经证明,如果 f  ’ 是连续的,并且待求的零点 x 是孤立的,那么在零点 x 周围存在一个区域,只要初始值 x0 位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果 f  ’ (x) 不为 0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。

  由于牛顿法是基于当前位置的切线来确定下一次的位置,所以牛顿法又被很形象地称为是 "切线法"。牛顿法的搜索路径(二维情况)如下图所示:

  关于牛顿法和梯度下降法的效率对比:

  a)从收敛速度上看 ,牛顿法是二阶收敛,梯度下降是一阶收敛,前者牛顿法收敛速度更快。但牛顿法仍然是局部算法,只是在局部上看的更细致,梯度法仅考虑方向,牛顿法不但考虑了方向还兼顾了步子的大小,其对步长的估计使用的是二阶逼近。

  b)根据 wiki 上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

  注:红色的牛顿法的迭代路径,绿色的是梯度下降法的迭代路径。

  牛顿法的优缺点总结:

  优点:二阶收敛,收敛速度快;

  缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的 Hessian 矩阵的逆矩阵,计算比较复杂。

64. 什么是拟牛顿法(Quasi-Newton Methods)

  @wtq1993,http://blog.csdn.net/wtq1993/article/details/51607040
  拟牛顿法是求解非线性优化问题最有效的方法之一,于 20 世纪 50 年代由美国 Argonne 国家实验室的物理学家 W.C.Davidon 所提出来。Davidon 设计的这种算法在当时看来是非线性优化领域最具创造性的发明之一。不久 R. Fletcher 和 M. J. D. Powell 证实了这种新的算法远比其他方法快速和可靠,使得非线性优化这门学科在一夜之间突飞猛进。

  拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的 Hessian 矩阵的逆矩阵的缺陷,它使用正定矩阵来近似 Hessian 矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。

  具体步骤:

  拟牛顿法的基本思想如下。首先构造目标函数在当前迭代 xk 的二次模型:

  这里 Bk 是一个对称正定矩阵,于是我们取这个二次模型的最优解作为搜索方向,并且得到新的迭代点:

  其中我们要求步长 ak 满足 Wolfe 条件。这样的迭代与牛顿法类似,区别就在于用近似的 Hessian 矩阵 Bk 代替真实的 Hessian 矩阵。所以拟牛顿法最关键的地方就是每一步迭代中矩阵 Bk 的更新。现在假设得到一个新的迭代 xk+1,并得到一个新的二次模型:

  我们尽可能地利用上一步的信息来选取 Bk。具体地,我们要求

  从而得到

  这个公式被称为割线方程。常用的拟牛顿法有 DFP 算法和 BFGS 算法。

**65. 请说说随机梯度下降法的问题和挑战
**
那到底如何优化随机梯度法呢?详情请点击:https://ask.julyedu.com/question/7913

66. 说说共轭梯度法
  @wtq1993,http://blog.csdn.net/wtq1993/article/details/51607040
  共轭梯度法是介于梯度下降法(最速下降法)与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了梯度下降法收敛慢的缺点,又避免了牛顿法需要存储和计算 Hessian 矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有逐步收敛性,稳定性高,而且不需要任何外来参数。

  下图为共轭梯度法和梯度下降法搜索最优解的路径对比示意图:

注:绿色为梯度下降法,红色代表共轭梯度法

67. 对所有优化问题来说, 有没有可能找到比現在已知算法更好的算法?
  @抽象猴,来源:https://www.zhihu.com/question/41233373/answer/145404190
  没有免费的午餐定理:
  对于训练样本(黑点),不同的算法 A/B 在不同的测试样本(白点)中有不同的表现,这表示:对于一个学习算法 A,若它在某些问题上比学习算法 B 更好,则必然存在一些问题,在那里 B 比 A 好。
  也就是说:对于所有问题,无论学习算法 A 多聪明,学习算法 B 多笨拙,它们的期望性能相同。
  但是:没有免费午餐定力假设所有问题出现几率相同,实际应用中,不同的场景,会有不同的问题分布,所以,在优化算法时,针对具体问题进行分析,是算法优化的核心所在。

68. 什么最小二乘法?

  我们口头中经常说:一般来说,平均来说。如平均来说,不吸烟的健康优于吸烟者,之所以要加“平均”二字,是因为凡事皆有例外,总存在某个特别的人他吸烟但由于经常锻炼所以他的健康状况可能会优于他身边不吸烟的朋友。而最小二乘法的一个最简单的例子便是算术平均。

  最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。用函数表示为:

  使误差「所谓误差,当然是观察值与实际真实值的差量」平方和达到最小以寻求估计值的方法,就叫做最小二乘法,用最小二乘法得到的估计,叫做最小二乘估计。当然,取平方和作为目标函数只是众多可取的方法之一。

  最小二乘法的一般形式可表示为:

  有效的最小二乘法是勒让德在 1805 年发表的,基本思想就是认为测量中有误差,所以所有方程的累积误差为

  我们求解出导致累积误差最小的参数即可:

  勒让德在论文中对最小二乘法的优良性做了几点说明:

  •  最小二乘使得误差平方和最小,并在各个方程的误差之间建立了一种平衡,从而防止某一个极端误差取得支配地位

  •  计算中只要求偏导后求解线性方程组,计算过程明确便捷

  • 最小二乘可以导出算术平均值作为估计值

  对于最后一点,从统计学的角度来看是很重要的一个性质。推理如下:假设真值为 θ, x1,⋯,xn 为 n 次测量值, 每次测量的误差为 ei=xi−θ,按最小二乘法,误差累积为

  求解 使达到最小,正好是算术平均

  由于算术平均是一个历经考验的方法,而以上的推理说明,算术平均是最小二乘的一个特例,所以从另一个角度说明了最小二乘方法的优良性,使我们对最小二乘法更加有信心。

  最小二乘法发表之后很快得到了大家的认可接受,并迅速的在数据分析实践中被广泛使用。不过历史上又有人把最小二乘法的发明归功于高斯,这又是怎么一回事呢。高斯在 1809 年也发表了最小二乘法,并且声称自己已经使用这个方法多年。高斯发明了小行星定位的数学方法,并在数据分析中使用最小二乘方法进行计算,准确的预测了谷神星的位置。
  对了,最小二乘法跟 SVM 有什么联系呢?请参见http://blog.csdn.net/v_july_v/article/details/7624837

69. 看你 T 恤上印着:人生苦短,我用 Python,你可否说说 Python 到底是什么样的语言?你可以比较其他技术或者语言来回答你的问题。
  @David 9,  http://nooverfit.com/wp/15%E4%B8%AA%E9%87%8D%E8%A6%81python%E9%9D%A2%E8%AF%95%E9%A2%98-%E6%B5%8B%E6%B5%8B%E4%BD%A0%E9%80%82%E4%B8%8D%E9%80%82%E5%90%88%E5%81%9Apython%EF%BC%9F/ 

  这里是一些关键点:Python 是解释型语言。这意味着不像 C 和其他语言,Python 运行前不需要编译。其他解释型语言包括 PHP 和 Ruby。

  Python 是动态类型的,这意味着你不需要在声明变量时指定类型。你可以先定义 x=111,然后 x=”I’m a string”。

  Python 是面向对象语言,所有允许定义类并且可以继承和组合。Python 没有访问访问标识如在 C++ 中的 public, private, 这就非常信任程序员的素质,相信每个程序员都是“成人”了 ~

  在 Python 中,函数是一等公民。这就意味着它们可以被赋值,从其他函数返回值,并且传递函数对象。类不是一等公民。

  写 Python 代码很快,但是跑起来会比编译型语言慢。幸运的是,Python 允许使用 C 扩展写程序,所以瓶颈可以得到处理。Numpy 库就是一个很好例子,因为很多代码不是 Python 直接写的,所以运行很快。

  Python 使用场景很多 – web 应用开发、大数据应用、数据科学、人工智能等等。它也经常被看做“胶水”语言,使得不同语言间可以衔接上。

  Python 能够简化工作  ,使得程序员能够关心如何重写代码而不是详细看一遍底层实现。

  @July:Python 目前早已成为 AI 时代的第一语言,为帮助大家更好的学习 Python 语言、数据分析、爬虫等相关知识,七月在线特开一系列 Python 课程,有需要的亲们可以看下,比如《Python 数据分析集训营》http://www.julyedu.com/weekend/python
70.Python 是如何进行内存管理的?

  @Tom_junsong,来源:http://www.cnblogs.com/tom-gao/p/6645859.html
  从三个方面来说, 一对象的引用计数机制, 二垃圾回收机制, 三内存池机制
一、对象的引用计数机制
  Python 内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。
引用计数增加的情况:
  1,一个对象分配一个新名称
  2,将其放入一个容器中(如列表、元组或字典)
引用计数减少的情况:
  1,使用 del 语句对对象别名显示的销毁
  2,引用超出作用域或被重新赋值
  sys.getrefcount( ) 函数可以获得对象的当前引用计数
  多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。
二、垃圾回收
  1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。
  2,当两个对象 a 和 b 相互引用时,del 语句可以减少 a 和 b 的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。
三、内存池机制
  Python 提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
  1,Pymalloc 机制。为了加速 Python 的执行效率,Python 引入了一个内存池机制,用于管理对小块内存的申请和释放。
  2,Python 中所有小于 256 个字节的对象都使用 pymalloc 实现的分配器,而大的对象则使用系统的 malloc。
  3,对于 Python 对象,如整数,浮点数和 List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

71. 请写出一段 Python 代码实现删除一个 list 里面的重复元素

@Tom_junsong,http://www.cnblogs.com/tom-gao/p/6645859.html
1,使用set函数,set(list)
2,使用字典函数,
>>>a=[1,2,4,2,4,5,6,5,7,8,9,0]
>>> b={}
>>>b=b.fromkeys(a)
>>>c=list(b.keys())
>>> c

72. 编程用 sort 进行排序,然后从最后一个元素开始判断
  a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
  @Tom_junsong,http://www.cnblogs.com/tom-gao/p/6645859.html
a.sort()
last=a[-1]
for i inrange(len(a)-2,-1,-1):
if last==a[i]:
del a[i]
else:last=a[i]
print(a)

73.Python 里面如何生成随机数?
  @Tom_junsong,http://www.cnblogs.com/tom-gao/p/6645859.html
  random 模块
  随机整数:random.randint(a,b):返回随机整数 x,a<=x<=b
  random.randrange(start,stop,[,step]):返回一个范围在 (start,stop,step) 之间的随机整数,不包括结束值。
  随机实数:random.random( ): 返回 0 到 1 之间的浮点数
  random.uniform(a,b): 返回指定范围内的浮点数。更多 Python 笔试面试题请看:http://python.jobbole.com/85231/

74. 说说常见的损失函数

  对于给定的输入 X,由 f(X) 给出相应的输出 Y,这个输出的预测值 f(X) 与真实值 Y 可能一致也可能不一致(要知道,有时损失或误差是不可避免的),用一个损失函数来度量预测错误的程度。损失函数记为 L(Y, f(X))。

  常用的损失函数有以下几种(基本引用自《统计学习方法》):

      

  如此,SVM 有第二种理解,即最优化 + 损失最小,或如 @夏粉 _ 百度所说“可从损失函数和优化算法角度看 SVM,boosting,LR 等算法,可能会有不同收获”。关于 SVM 的更多理解请参考:http://blog.csdn.net/v_july_v/article/details/7624837

75. 简单介绍下 logistics 回归

  Logistic 回归目的是从特征学习出一个 0/1 分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用 logistic 函数(或称作 sigmoid 函数)将自变量映射到 (0,1) 上,映射后的值被认为是属于 y=1 的概率。

  假设函数

  其中 x 是 n 维特征向量,函数 g 就是 logistic 函数。

  而的图像是

  可以看到,将无穷映射到了 (0,1)。

  而假设函数就是特征属于 y=1 的概率。

  从而,当我们要判别一个新来的特征属于哪个类时,只需求即可,若大于 0.5 就是 y=1 的类,反之属于 y=0 类。

  此外,只和有关,>0,那么,而 g(z) 只是用来映射,真实的类别决定权还是在于。再者,当时,=1,反之=0。如果我们只从出发,希望模型达到的目标就是让训练数据中 y=1 的特征,而是 y=0 的特征。Logistic 回归就是要学习得到,使得正例的特征远大于 0,负例的特征远小于 0,而且要在全部训练实例上达到这个目标。

  接下来,尝试把 logistic 回归做个变形。首先,将使用的结果标签 y = 0 和 y = 1 替换为 y = -1,y = 1,然后将)中的替换为 b,最后将后面的替换为(即)。如此,则有了。也就是说除了 y 由 y=0 变为 y=-1 外,线性分类函数跟 logistic 回归的形式化表示没区别。

  进一步,可以将假设函数中的 g(z) 做一个简化,将其简单映射到 y=-1 和 y=1 上。映射关系如下:


更多高质资源 尽在AIQ 机器学习大数据 知乎专栏 点击关注

转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com