参与:Nurhachu Null、黄小天 本文介绍了牛顿法(Newton's Method),以及如何用它来解决 logistic 回归。logistic 回归引入了伯努利分布(Bernoulli distribution)中的对数似然概念,并涉及到了一个称作 sigmoid 函数的简单变换。本文还介绍了海森矩阵(这是一个关于二阶偏微分的方阵),并给出了如何将海森矩阵与梯度结合起来实现牛顿法。 与最初的那篇介绍线性回归和梯度的文章相似,为了理解我们的数学思想是如何转换成在二元分类问题中的解决方案的实现,我们也会用 Python 语言以一种可视化、数学化的方式来探索牛顿法:如何解决 logistic 回归问题。 读者需知的先验知识: 1. 微分和链式法则(微积分) 2. 偏微分与梯度(多元微积分) 3. 基本向量运算(线性代数) 4. NumPy 的基本理解 5. 独立概率的基本理解 数据 我们的数据集来自南波士顿的房地产,包括每套房子的价格以及一个表明这套房子是否具有两个浴室的布尔值。 x 是房产价格的向量,y 是房产是否具有两个浴室的向量 蓝色点代表具有两个以上浴室的房产,橙色点代表具有 2 个或者少于两个浴室的房产,横坐标是房产价格。 模型 我们将会学习一个 logistic 回归模型,它将会作为一个二元分类器来预测一套给定价格(单位是美元)的房产是否具有两间或者两间以上的浴室。 我们仍然需要解决一个关于权重和特征的线性组合,但是我们需要结合一个平滑的、而且值域在 [0,1] 之间的函数来对这个线性组合做一个变换(因为我们需要将线性组合与一个二值输出 0 或者 1 映射起来。) logistic 函数,也就是 sigmoid 函数,能够完成所有这些事情,函数表达式如下: 注意:为了让函数具有更多的灵活性,我们在指数项上添加了 θ2 作为一个截距;我们只有一维的数据,即 house_value,但是我们要解决一个二维的模型。 在线性回归问题中我们定义了我们的平方和目标函数,与这种方法类似,我们想使用假设函数 h(x),并且定义似然函数(likelihood function)来最大化目标函数,拟合出我们的参数。下面是相关内容的数学分析: 数学:定义似然函数 首先,我们要定义一个概率质量函数(Probability Mass Function): 注意:第一个式子中,左侧代表得失:在给定的参数 θ 和特征向量 x 的情况下,结果为 1 的概率,我们的假设函数 h_θ(x)来计算这个概率。两个表达式可以结合成一个,如下所示: 下表展示了使用假设函数得到的错误结果是如何通过生成一个较小的值来接受惩罚的(例如,h(x)=.25,y=1h(x)=.25,y=1)。这也有助于理解我们如何把两个式子合并成一个。 自然而然,我们想把上述正确预测结果的值最大化,atv,这恰好就是我们的似然函数。 我喜欢将似然函数描述成「在给定 y 值,给定对应的特征向量 x^ 的情况下,我们的模型正确地预测结果的似然度。」然而,区分概率和似然值非常重要。 现在我们将似然函数扩展到训练集中的所有数据上。我们将每一个单独的似然值乘起来,以得到我们的模型在训练数据上准确地预测 y 值的似然值的连乘。如下所示: 可以看到我们把 n 个似然值乘了起来(每个似然值都小于 1.0),其中 n 是训练样本的数量,我们最后得到的结果的数量级是 10^(-n)。这是不好的一点!最终可能会由于数值太小而用尽计算机的精度,Python 会把特别小的浮点数按照 0 来处理。 我们的解决办法就是给似然函数取对数,如下所示: 注意:log(x*y) = log(x)+log(y);log(x^n) = n*log(x)。这是我们的假设函数的对数似然值。 记住,我们的假设函数通过生成一个很小的值来惩罚错误的预测,所以我们要将对数似然函数最大化。对数似然函数的曲线如下图所示: (责任编辑:本港台直播) |