吴恩达机器学习(第五章)——Logistic回归
第五章-Logistic回归
文章目录
- 第五章-Logistic回归
- 分类
- 假设陈述
- 决策边界
- 代价函数
- 代价函数的定义
- 简化代价函数与梯度下降
- 公式的推导
- 高级优化
- 多元分类:一对多
分类
在分类问题中,你要预测的变量 yyy 是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法。
在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。我们从二元的分类问题开始讨论,分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否存在欺诈;判断一个肿瘤是恶性的还是良性的。
我们将因变量(dependent variable)可能属于的两个类分别称为负类(negative class) 和 正类(positive class),则因变量y∈0,1y\in { 0,1 }y∈0,1 ,其中 0 表示负类,1 表示正类。
负向类和正向类的选取没有明确的规定,谁是负类,谁是正类完全取决于你自己的意愿,但是通常情况下我们把负类表示为没有某样东西,把正类表示为具有我们要寻找的东西。比如肿瘤预测,没有恶性肿瘤的选取为负类,有恶性肿瘤的选取为正类。
对于肿瘤预测的分类问题,我们可以用线性回归的方法求出适合数据的一条直线。根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们需要输出0或1,因此我们可以预测:
当hθ(x)>=0.5{h_\theta}\left( x \right)>=0.5hθ(x)>=0.5时,预测 y=1y=1y=1。
当hθ(x)<0.5{h_\theta}\left( x \right)<0.5hθ(x)<0.5时,预测 y=0y=0y=0 。
对于上图的数据而言,这样的一个线性模型似乎能很好地完成分类任务。假使我们又观测到一个非常大尺寸的恶性肿瘤,将其作为实例加入到我们的训练集中来,这将使得我们获得一条新的直线。
这时,再使用0.5作为阀值来预测肿瘤是良性还是恶性便不合适了。
可以看出,线性回归模型,因为其预测的值可以超越[0,1]的范围,并不适合解决这样的问题。使用线性回归的方法来拟合数据的结果显然不是一个好的方法,不建议将线性回归用于分类问题。
如果我们要用线性回归算法来解决一个分类问题,对于分类, yyy 取值为 0 或者1,如果你使用的是线性回归,那么假设函数的输出值可能远大于 1,或者远小于0,即使所有训练样本的标签 yyy 都等于 0 或 1,这样的结果会让人觉得很奇怪。于是我们考虑使用逻辑回归算法,这个算法的性质是:它的输出值永远在0到 1 之间。
逻辑回归算法是分类算法,我们将它作为分类算法使用。有时候可能因为这个算法的名字中出现了“回归”使你感到困惑,但逻辑回归算法实际上是一种分类算法,它适用于标签 yyy 取值离散的情况,如:0 1 2 3。
假设陈述
我们引入一个新的模型,逻辑回归模型,该模型的输出变量范围始终在0和1之间。
逻辑回归模型的假设是: hθ(x)=g(θTX)h_\theta \left( x \right)=g\left(\theta^{T}X \right)hθ(x)=g(θTX)
其中:XXX 代表特征向量,ggg 代表 逻辑函数(logistic function) 是一个常用的逻辑函数为S形函数(Sigmoid function),公式为: g(z)=11+e−zg\left( z \right)=\frac{1}{1+{{e}^{-z}}}g(z)=1+e−z1。
python代码实现:
import numpy as npdef sigmoid(z):return 1 / (1 + np.exp(-z))
合起来,我们得到逻辑回归模型的假设:
logistic函数的图像为
z趋向于负无穷大时,值越接近0;z趋向于正无穷大时,值越接近1。这样就可以使输出值在0到1之间。有了这个假设函数,就可以拟合数据了,根据给定的θ参数值,假设会做出预测。
hθ(x)h_\theta \left( x \right)hθ(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性,hθ(x)=P(y=1∣x;θ)h_\theta \left( x \right)=P\left( y=1|x \ ;\theta \right)hθ(x)=P(y=1∣x ;θ),相应的负类的概率为P(y=0∣x;θ)P\left( y=0|x \ ; \theta \right)P(y=0∣x ;θ)。借助公式 P(y=1∣x;θ)+P(y=0∣x;θ)=1P\left( y=1|x \ ;\theta \right)+P\left( y=0|x \ ; \theta \right)=1P(y=1∣x ;θ)+P(y=0∣x ;θ)=1 就可以根据正类求出负类的概率了。
决策边界
决策边界(Decision Boundary) 的概念能帮助我们更好地理解假设函数在计算什么
在逻辑回归中,我们这样预测:
当 hθ(x)>=0.5{h_\theta}\left( x \right)>=0.5hθ(x)>=0.5 时,预测 y=1y=1y=1。
当 hθ(x)<0.5{h_\theta}\left( x \right)<0.5hθ(x)<0.5 时,预测 y=0y=0y=0 。
根据logistic函数的图像,我们知道
z=0z=0z=0 时 g(z)=0.5g(z)=0.5g(z)=0.5
z>0z>0z>0 时 g(z)>0.5g(z)>0.5g(z)>0.5
z<0z<0z<0 时 g(z)<0.5g(z)<0.5g(z)<0.5
而 z=θTxz={\theta^{T}}xz=θTx ,所以有:
θTx>=0{\theta^{T}}x>=0θTx>=0 时,预测 y=1y=1y=1
θTx<0{\theta^{T}}x<0θTx<0 时,预测 y=0y=0y=0
接下来让我们假设有一个模型(叉叉表示正样本,圆圈表示负样本),并且模型 hθ(x)h_\theta \left( x \right)hθ(x) 的参数 θ=[−311]\theta=\left[ \begin{matrix} {-3} \\ {1} \\ {1} \\ \end{matrix} \right]θ=⎣⎡−311⎦⎤
那么我们知道,当 −3+x1+x2≥0-3+{x_1}+{x_2} \geq 0−3+x1+x2≥0,即 x1+x2≥3{x_1}+{x_2} \geq 3x1+x2≥3时,模型将预测 y=1y=1y=1。
我们可以绘制直线 x1+x2=3{x_1}+{x_2} = 3x1+x2=3,这条线就是我们模型的决策边界,将预测为1的区域和预测为 0的区域分隔开。
这条决策边界以及我们预测 y=1y=1y=1 和 y=0y=0y=0 的区域,它们都是假设函数的属性,取决于其参数。即使去掉了这些数据,它们依然存在且不会改变。
现在我们来看一个更复杂的例子,对于logistic回归,我们在特征中添加额外的高阶多项式项 x12{x_1}^2x12、x22{x_2}^2x22,我们会在之后讨论怎么选择参数 θ\thetaθ 的取值,假设现在我们已经知道了θ=[−10011]\theta=\left[ \begin{matrix} {-1} \\ {0} \\ {0} \\ {1} \\ {1} \\ \end{matrix} \right]θ=⎣⎢⎢⎢⎢⎡−10011⎦⎥⎥⎥⎥⎤
当 −1+x12+x22≥0-1+{x_1}^2+{x_2}^2 \geq 0−1+x12+x22≥0,即 x12+x22≥1{x_1}^2+{x_2}^2 \geq 1x12+x22≥1时,模型将预测 y=1y=1y=1。我们得到的决策边界恰好是圆点在原点且半径为1的圆形。
假设函数越复杂(特征数不断增加),得到的图像和决策边界也就越复杂。
代价函数
代价函数的定义
我们要定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题。
对于线性回归模型,我们定义的代价函数是:J(θ0,θ1)=1m∑i=1m12(hθ(x(i))−y(i))2J \left( \theta_0, \theta_1 \right) = \frac{1}{m}\sum\limits_{i=1}^m \frac{1}{2} \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2}J(θ0,θ1)=m1i=1∑m21(hθ(x(i))−y(i))2
我们定义一个 CostCostCost 函数为:Cost(hθ(x),y)=12(hθ(x(i))−y(i))2Cost \left({h_\theta}\left( x \right), \ y \right)= \frac{1}{2} \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2}Cost(hθ(x), y)=21(hθ(x(i))−y(i))2,则代价函数的公式改写为:J(θ0,θ1)=1m∑i=1mCost(hθ(x),y)J \left( \theta_0, \theta_1 \right) = \frac{1}{m}\sum\limits_{i=1}^m Cost \left({h_\theta}\left( x \right), \ y \right)J(θ0,θ1)=m1i=1∑mCost(hθ(x), y)
从理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将hθ(x)=11+e−θTx{h_\theta}\left( x \right)=\frac{1}{1+{e^{-\theta^{T}x}}}hθ(x)=1+e−θTx1带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convex function)。这意味着我们的代价函数有许多局部最小值,如果我们使用梯度下降算法,根本不能保证算法会收敛到全局最小值。
我们重新定义逻辑回归的代价函数为:J(θ)=1m∑i=1mCost(hθ(x),y)J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}Cost \left({h_\theta}\left( x \right), \ y \right)J(θ)=m1i=1∑mCost(hθ(x), y),而
hθ(x){h_\theta}\left( x \right)hθ(x)与 Cost(hθ(x),y)Cost\left( {h_\theta}\left( x \right),y \right)Cost(hθ(x),y)之间的关系如下图所示:
Cost(hθ(x),y)Cost\left( {h_\theta}\left( x \right),y \right)Cost(hθ(x),y)函数的特点是:
当实际的 y=1y=1y=1 且hθ(x){h_\theta}\left( x \right)hθ(x)也为 1 时误差为 0,当 y=1y=1y=1 但hθ(x){h_\theta}\left( x \right)hθ(x)不为1时误差随着hθ(x){h_\theta}\left( x \right)hθ(x)的变小而变大;
当实际的 y=0y=0y=0 且hθ(x){h_\theta}\left( x \right)hθ(x)也为 0 时代价为 0,当y=0y=0y=0 但hθ(x){h_\theta}\left( x \right)hθ(x)不为 0时误差随着 hθ(x){h_\theta}\left( x \right)hθ(x)的变大而变大。
我们定义了单训练样本的代价函数,凸性分析的内容是超出这门课的范围的,但是可以证明我们所选的代价值函数会给我们一个凸优化问题。代价函数 J(θ)J(\theta)J(θ) 会是一个凸函数,并且没有局部最优值。
简化代价函数与梯度下降
对于我们刚才构建的 CostCostCost 函数,可以将其简化为:
Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right)Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
带入代价函数得到:
J(θ)=1m∑i=1m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}J(θ)=m1i=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))]
=−1m∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
Python代码实现:
import numpy as npdef cost(theta, X, y):theta = np.matrix(theta)X = np.matrix(X)y = np.matrix(y)first = np.multiply(-y, np.log(sigmoid(X* theta.T)))second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T)))return np.sum(first - second) / (len(X))
根据这个代价函数,为了拟合出参数,我们要试图找尽量让 J(θ)J\left( \theta \right)J(θ) 取得最小值的参数 θ\thetaθ,minθJ(θ)\underset{\theta}{\min }J\left( \theta \right)θminJ(θ) 所以我们想要尽量减小这一项,这将使我们得到某个参数 θ\thetaθ。
最小化代价函数的方法,是使用梯度下降法(gradient descent)。
求导后得到
如果你把这个更新规则和我们之前用在线性回归上的规则进行比较的话,你会惊讶地发现,这个式子和我们用来做线性回归梯度下降的公式一模一样。那么,线性回归和逻辑回归是同一个算法吗?
对于线性回归假设函数:
hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn{h_\theta}\left( x \right)={\theta^T}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn
而对于逻辑函数假设函数:
hθ(x)=11+e−θTX{h_\theta}\left( x \right)=\frac{1}{1+{{e}^{-{\theta^T}X}}}hθ(x)=1+e−θTX1
即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降和线性回归的梯度下降实际上是两个完全不同的东西。
当我们在谈论线性回归的梯度下降法时,我们谈到了如何监控梯度下降法以确保其收敛,通常也把同样的方法用在逻辑回归中,来监测梯度下降,以确保它正常收敛。
还有,特征缩放的方法也适用于逻辑回归。如果你的特征范围差距很大的话,那么应用特征缩放的方法,同样也可以让逻辑回归中,梯度下降收敛更快。记住,在运行梯度下降算法之前,进行特征缩放依旧是非常必要的。
公式的推导
推导过程:
J(θ)=−1m∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
考虑:
hθ(x(i))=11+e−θTx(i){h_\theta}\left( {{x}^{(i)}} \right)=\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}}hθ(x(i))=1+e−θTx(i)1
则:
y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))){{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))
=y(i)log(11+e−θTx(i))+(1−y(i))log(1−11+e−θTx(i))={{y}^{(i)}}\log \left( \frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right)=y(i)log(1+e−θTx(i)1)+(1−y(i))log(1−1+e−θTx(i)1)
=−y(i)log(1+e−θTx(i))−(1−y(i))log(1+eθTx(i))=-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^T}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^T}{{x}^{(i)}}}} \right)=−y(i)log(1+e−θTx(i))−(1−y(i))log(1+eθTx(i))
所以:
∂∂θjJ(θ)=∂∂θj[−1m∑i=1m[−y(i)log(1+e−θTx(i))−(1−y(i))log(1+eθTx(i))]]\frac{\partial }{\partial {\theta_{j}}}J\left( \theta \right)=\frac{\partial }{\partial {\theta_{j}}}[-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^{T}}{{x}^{(i)}}}} \right)]}]∂θj∂J(θ)=∂θj∂[−m1i=1∑m[−y(i)log(1+e−θTx(i))−(1−y(i))log(1+eθTx(i))]]
=−1m∑i=1m[−y(i)−xj(i)e−θTx(i)1+e−θTx(i)−(1−y(i))xj(i)eθTx(i)1+eθTx(i)]=-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\frac{-x_{j}^{(i)}{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}{1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}}]=−m1i=1∑m[−y(i)1+e−θTx(i)−xj(i)e−θTx(i)−(1−y(i))1+eθTx(i)xj(i)eθTx(i)]
=−1m∑i=1my(i)xj(i)1+eθTx(i)−(1−y(i))xj(i)eθTx(i)1+eθTx(i)]=-\frac{1}{m}\sum\limits_{i=1}^{m}{{y}^{(i)}}\frac{x_j^{(i)}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}]=−m1i=1∑my(i)1+eθTx(i)xj(i)−(1−y(i))1+eθTx(i)xj(i)eθTx(i)]
=−1m∑i=1my(i)xj(i)−xj(i)eθTx(i)+y(i)xj(i)eθTx(i)1+eθTx(i)=-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}x_j^{(i)}-x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}+{{y}^{(i)}}x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}}=−m1i=1∑m1+eθTx(i)y(i)xj(i)−xj(i)eθTx(i)+y(i)xj(i)eθTx(i)
=−1m∑i=1my(i)(1+eθTx(i))−eθTx(i)1+eθTx(i)xj(i)=-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}\left( 1\text{+}{{e}^{{\theta^T}{{x}^{(i)}}}} \right)-{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}x_j^{(i)}}=−m1i=1∑m1+eθTx(i)y(i)(1+eθTx(i))−eθTx(i)xj(i)
=−1m∑i=1m(y(i)−eθTx(i)1+eθTx(i))xj(i)=-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}}=−m1i=1∑m(y(i)−1+eθTx(i)eθTx(i))xj(i)
=−1m∑i=1m(y(i)−11+e−θTx(i))xj(i)=-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}}=−m1i=1∑m(y(i)−1+e−θTx(i)1)xj(i)
=−1m∑i=1m[y(i)−hθ(x(i))]xj(i)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}-{h_\theta}\left( {{x}^{(i)}} \right)]x_j^{(i)}}=−m1i=1∑m[y(i)−hθ(x(i))]xj(i)
=1m∑i=1m[hθ(x(i))−y(i)]xj(i)=\frac{1}{m}\sum\limits_{i=1}^{m}{[{h_\theta}\left( {{x}^{(i)}} \right)-{{y}^{(i)}}]x_j^{(i)}}=m1i=1∑m[hθ(x(i))−y(i)]xj(i)
高级优化
我们将会介绍一些高级优化算法和高级的优化概念,利用这些方法,可以大大提高逻辑回归的速度,而这也将使算法更加适合解决大型的机器学习问题。
我们需要自己编写代码来计算代价函数J(θ)J(\theta)J(θ)和偏导数项∂∂θjJ(θ)\frac{\partial }{\partial {\theta_j}}J\left( \theta \right)∂θj∂J(θ),在写完能够计算这两者的代码之后,我们就可以使用梯度下降。但梯度下降并不是唯一的算法,我们还能用一些更高级的优化算法:共轭梯度法(Conjugate Gradient)、BFGS (变尺度法) 和 L-BFGS (限制变尺度法) 。
它们需要有一种方法来计算 J(θ)J\left( \theta \right)J(θ),以及需要一种方法计算导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。
这三种算法的具体细节超出了本门课程的范畴,你可以花一些时间来研究这些算法,这里我们仅讨论它们的一些特性:
- 优点1:通常不需要手动选择学习率 α\alphaα。
- 优点2:速度上比梯度下降法更快
- 缺点:它们比梯度下降法复杂多了
对于这些算法的一种思路是,给出计算导数项和代价函数的方法,你可以认为算法有一个智能的内部循环,事实上,他们确实有一个智能的内部循环,称为 线性搜索(line search) 算法,它可以自动尝试不同的学习速率 α\alphaα,并自动选择一个好的学习速率 aaa,因此它甚至可以为每次迭代选择不同的学习速率,那么你就不需要自己选择。这些算法实际上在做更复杂的事情,不仅仅是选择一个好的学习速率,所以它们往往最终比梯度下降收敛得快多了,不过关于它们到底做什么,已经超过了本门课程的范围。
多元分类:一对多
如何使用逻辑回归来解决多类别分类问题,我们通过一个叫做 一对多(one-vs-all) 的分类算法。
例如,你的一个学习算法要将邮件归类到工作、朋友、家人、兴趣4个不同的文件夹,这是一个四元分类问题;如果一个病人因为鼻塞来到你的诊所,他可能没有生病,可能患了感冒,可能得了流感,这是一个三元分类问题。
我们对比一下二元分类和多元分类的情况:
我们现在已经知道如何进行二元分类,可以使用逻辑回归,用直线可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。
现在我们有一个训练集,好比上图表示的有3个类别,我们用三角形表示 y=1y=1y=1,方框表示y=2y=2y=2,叉叉表示 y=3y=3y=3。我们下面要做的就是使用一个训练集,将其分成3个二元分类问题。
我们将多个类中的一个类标记为正向类(y=1y=1y=1),然后将其他所有类都标记为负向类,这个模型记作 hθ(1)(x)h_\theta^{\left( 1 \right)}\left( x \right)hθ(1)(x)。接着,类似地我们选择另一个类标记为正向类(y=2y=2y=2),再将其它类都标记为负向类,将这个模型记作 hθ(2)(x)h_\theta^{\left( 2 \right)}\left( x \right)hθ(2)(x),依此类推。
我们得到一系列的模型简记为: hθ(i)(x)=p(y=i∣x;θ)h_\theta^{\left( i \right)}\left( x \right)=p\left(\ y=i \ |x \ ;\theta \right)hθ(i)(x)=p( y=i ∣x ;θ)其中:i=(1,2,3....k)i=\left( 1,2,3....k \right)i=(1,2,3....k)
我们现在要做的就是训练这个逻辑回归分类器:hθ(i)(x)h_\theta^{\left( i \right)}\left( x \right)hθ(i)(x), 其中 iii 对应每一个可能的 y=iy=iy=i,最后,为了做出预测,我们在几个分类器里面输入 xxx,然后我们选择一个让 hθ(i)(x)h_\theta^{\left( i \right)}\left( x \right)hθ(i)(x) 最大的 iii,即 maxi hθ(i)(x)\mathop{\max}\limits_i\,h_\theta^{\left( i \right)}\left( x \right)imaxhθ(i)(x)。
我们现在知道了基本的挑选分类器的方法,选择出哪一个分类器是可信度最高效果最好的,那么就可认为得到一个正确的分类,无论 iii 值是多少,我们都有最高的概率值,我们预测 yyy 就是那个值。这就是多类别分类问题,以及一对多的方法,通过这个小方法,我们现在也可以将逻辑回归分类器用在多类分类的问题上。
吴恩达机器学习(第五章)——Logistic回归相关推荐
- matlab版吴恩达机器学习第五章笔记
机器学习matlab操作基础 1.基本操作 2.移动数据 3.计算数据 4.绘图数据 5.控制语句:for,while,if语句 6.向量化 1.基本操作 参考视频: 5 - 1 - Basic Op ...
- 吴恩达机器学习训练2:Logistic回归
Logistic Regression问题实则为分类的问题Classification. 1.数学模型 由上图可知,由于最后是要求得y=1的概率,在线性回归的基础上增加了sigmoid函数,将z值映射 ...
- 2.吴恩达机器学习课程-作业2-逻辑回归
fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 2. ...
- 1. 吴恩达机器学习课程-作业1-线性回归
fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 1. ...
- 吴恩达深度学习第二周--logistic回归作业1
吴恩达深度学习第二周–logistic回归作业1 本系列为吴恩达老师深度学习作业的总结,其中参考了很多优秀的文章,本文为了方便日后的复习与巩固,更为详细的作业讲解参考 目录 吴恩达深度学习第二周--l ...
- 逻辑回归python sigmoid(z)_python实现吴恩达机器学习练习2(逻辑回归)-data1
python实现吴恩达机器学习练习2(逻辑回归)-data1 这篇是第一个数据集:这部分练习中,你将建立一个预测学生是否被大学录取的逻辑回归模型. 假如一所大学会每个报名学生进行两项入学考试,根据两项 ...
- 吴恩达机器学习课程-作业1-线性回归(python实现)
Machine Learning(Andrew) ex1-Linear Regression 椰汁学习笔记 最近刚学习完吴恩达机器学习的课程,现在开始复习和整理一下课程笔记和作业,我将陆续更新. Li ...
- 吴恩达机器学习(第一章)——初识机器学习
第一章 初识机器学习 文章目录 第一章 初识机器学习 前言 机器学习定义 机器学习算法 监督学习 无监督学习 学习工具 前言 Machine Learning: Grewout of work in ...
- 吴恩达机器学习(五)正则化(解决过拟合问题)
目录 0. 前言 1. 正则化(Regularization) 2. 线性回归中的正则化 3. 逻辑回归中的正则化 学习完吴恩达老师机器学习课程的正则化,简单的做个笔记.文中部分描述属于个人消化后的理 ...
- 吴恩达机器学习(四)逻辑回归(二分类与多分类)
目录 0. 前言 1. 假设函数(Hypothesis) 2. 决策边界(Decision Boundary) 3. 代价函数(Cost Funciton) 4. 梯度下降(Gradient Desc ...
最新文章
- 周洪立:一个外交官眼里的盛大文化
- Linux crontab 命令格式与具体样例
- java实现图形界面输入半径求圆面积_测试开发工程师系列之Android自动化测试Appium(Python)连载(7)安卓图形界面...
- 实战分享|数据驱动「付费转化」的3个思路
- SAP UI5 初学者教程之八 - 多语言的支持试读版
- java流读写_java流概述以及文件读写示例
- mybatis-config.xml常用的配置信息
- java c s 比 c c s_Java技术学习笔记:C/S 与B/S 区别
- Spring中AOP注解实现
- Linux操作系统下信号处理函数
- day16-面向对象编程进阶
- 操作系统中高响应比优先调度算法例子
- qvod(快播)电影批量下载器(轻松下载连续剧)
- Java 微信公众号消息推送(从零开始)
- LA 3713 Astronauts 2-SAT问题
- 关于迪文屏T5L使用C51编程
- (15,7)循环码的编译码方法
- 【NCRE】初遇 SQL SERVER 的 CASE WHEN
- 开水,送服JavaScript
- 如何理解GPU中的SIMT(单指令流多线程模型)
热门文章
- Spring Boot自动配置原理、实战
- Go语言命令行库urfave/cli简介
- [Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容
- C语言连接MYSQL存取数据的一个例子
- JVM:类加载机制之类加载过程
- vue使用element日期选择器,选择日期少一天的问题
- 计算机网络技术及应用 课程 英语,计算机网络应用—现代英语课堂中的第三种语言...
- mysql 硬盘空间不够_mysql磁盘空间不足的查排
- 弱电工程项目综合布线估算方法和公式
- 机房中铅酸蓄电池的性能参数及优缺点