logistic 回归

1138-魏同学

发表文章数:75

热门标签

,
首页 » 算法 » 正文

机器学习的步骤:

1、函数的建立/模型的建立
以逻辑回归为例
logistic 回归
2、模型的判定
假设N个训练数据每一个都由后验概率产生,即w,b决定了这个后验概率,我们需要找到一组,w,b使得概率最大化的产生这N个训练数据,利用极大似然估计,最好的那组参数就是最可能产生当前N个训练数据分布的w和b。
似然函数将每一个点产生的概率相乘。
logistic 回归
由于L(w,b)是乘积项的形式,为了方便计算,我们将上式做个变换:
logistic 回归
为了统一格式,将logistic Regression里所有训练数据都打上0,1的标签,即

y

^

/hat{y}

y^ = 1代表类别1,

y

^

/hat{y}

y^ = 0代表类别2,于是上式可以改为:
logistic 回归
logistic 回归
这里的

x

n

x^{^{n}}

xn 表示第n个样本点,

y

^

n

/hat{y}^{_{^{n}}}

y^n表示第n个样本点的分类标签(0,1),最终的形式里,实际上可以看作是两个两点分布的交叉熵。
logistic 回归
如上图的p和q的两个分布,它的交叉熵是H(p,q),交叉熵时表示两个分布之间多近似,如果p和q两个分布相同,则计算出来的交叉熵是0.式子中

f

(

x

n

)

f(x^{^{n}})

f(xn)表示函数的输出值,
式子中的

y

^

n

/hat{y}^{_{^{n}}}

y^n表示预期的target,因此交叉熵实际上表达的是希望这个函数的输出和它的target越接近越好。
实际要找的参数表达式为:logistic 回归
3、找出最好的模型
最好模型实际上就是找到使得损失函数即交叉熵之和最小的那组参数

w

w^{^{*}}

w,

b

b^{^{*}}

b,可以使用梯度下降等方法。
sigmoid函数的微分是:

σ

(

z

)

z

=

σ

(

z

)

(

1

σ

(

z

)

)

/frac{/partial/sigma (z)}{/partial z}= /sigma (z)(1-/sigma (z))

zσ(z)=σ(z)(1σ(z)),sigmoid的图象和其微分图象,如下图:
logistic 回归
计算出

l

n

L

(

w

,

b

)

-lnL(w,b)

lnL(w,b)

w

i

w{_{i}}

wi的偏微分:
logistic 回归
进一步化简知:
logistic 回归
梯度下降每次更新只需要做:
logistic 回归
式子中可以看出,更新参数的三个因素:
1、η学习率,自己设定的。
2、

x

i

x{_{i}}

xi来自于训练集数据。
3、

y

^

n

f

w

,

b

(

x

n

)

/hat{y}^{n} – f{_{w,b}}(x^{^{n}})

y^nfw,b(xn),代表了函数的输出值跟target之间的差距,如果差距越大,更新的步伐就要越大。

逻辑回归和线性回归

1、第一步模型的建立差异:
逻辑回归是吧每一个feature

x

i

x{_{i}}

xi加权求和,加上bias再通过sigmoid函数,当作函数的输出。
因为逻辑回归的输出是通过sigmoid函数产生的,因此是介于0-1之间,而线性回归的输出并没有通过sigmoid函数所以他是一个任意的值。
2、第二不模型的判定
在逻辑回归中我们定义的损失函数(使得损失函数最小化)是所有样本点的输出

f

(

x

n

)

f(x^{^{n}})

f(xn)和实际的target(

y

^

n

/hat{y}^{n}

y^n)在两点分布下的交叉熵总和。在这里交叉熵是我们需要minimize的对象,就是希望输出和真实值越接近越好。
在线性回归中,损失函数的定义就是丹村的函数的输出值和实际值在数值上的平方和的均值。
逻辑回归可以用方差吗
logistic 回归
如图如果逻辑回归使用方差做损失函数,可以看出如果第n个点的target是类别1,则

y

^

n

=

1

/hat{y}^{n} =1

y^n=1 ,此时如果函数的输出

f

w

,

b

(

x

n

)

=

1

f{_{w,b}}(x^{^{n}}) = 1

fw,b(xn)=1,说明输出接近target,则

f

w

,

b

(

x

n

)

y

^

n

=

0

f{_{w,b}}(x^{^{n}}) -/hat{y}^{n}= 0

fw,b(xn)y^n=0于是得到的微分

σ

(

L

)

w

i

/frac{/partial/sigma (L)}{/partial w{_{i}}}

wiσ(L)会变成0,这是合理的。但是当函数的输出

f

w

,

b

(

x

n

)

=

0

f{_{w,b}}(x^{^{n}}) = 0

fw,b(xn)=0,说明与target相差很远,但是由于表达式中有

f

w

,

b

(

x

n

)

f{_{w,b}}(x^{^{n}})

fw,b(xn),因此这时会导致得到的微分

σ

(

L

)

w

i

/frac{/partial/sigma (L)}{/partial w{_{i}}}

wiσ(L)变成0。
把参数的变化对total loss作图的话,loss function选择cross entropy或square error,参数的变化跟loss的变化情况可视化出来如下所示:(黑色的是cross entropy,红色的是square error)
logistic 回归
假设中心点就是距离目标很近的地方,如果是cross entropy的话,距离目标越远,微分值就越大,参数update的时候变化量就越大,迈出去的步伐也就越大

但当你选择square error的时候,因为距离目标远的时候,微分也是非常小的,移动的速度是非常慢,当gradient接近于0的时候,其实就很有可能会停下来,因此使用square error很有可能在一开始的时候就卡住,而且这里也不能随意地增大learning rate,因为在做gradient descent的时候,你的gradient接近于0,有可能离target很近也有可能很远,因此不知道learning rate应该设大还是设小

综上,尽管square error可以使用,但是会出现update十分缓慢的现象,而使用cross entropy可以让你的Training更顺利.

3、参数更新模型选择
逻辑回归和线性回归对

w

i

w{_{i}}

wi的更新方式是一样的,但是逻辑回归的真实值和输出值都在0-1之间,但是线性回归的真实值和输出值的范围可以是任意的。
logistic 回归

生成模型和判别模型

多分类模型

多元分类的原理与二元分类基本一致。假设有三个类别

C

1

C{_{1}}

C1

C

2

C{_{2}}

C2,

C

3

C{_{3}}

C3每个类别都有自己的weight和bias,这里的

w

1

w{_{1}}

w1

w

2

w{_{2}}

w2,

w

3

w{_{3}}

w3分别代表三个向量,

b

1

b{_{1}}

b1,

b

2

b{_{2}}

b2,

b

3

b{_{3}}

b3分别代表三个常数,输入x也是一个向量。
softmax的思想是对最大值做强化,因为在第一步对z取指数时,会使得大值和小值之间的差距更大。
把数据

z

1

z{_{1}}

z1,

z

2

z{_{2}}

z2,

z

3

z{_{3}}

z3输入进softmax函数,他的处理方法是:
1、取指数,得到

e

z

1

e^{{_{z1}}{}}

ez1,

e

z

2

e^{{_{z2}}{}}

ez2,

e

z

3

e^{{_{z3}}{}}

ez3.
2、把三个指数累计求和,得到toal sum =

j

=

1

3

e

z

j

/sum_{j=1}^{3}e^{zj}

j=13ezj
3、total sum分别出去这三项做归一化处理,得到:
logistic 回归
logistic 回归
原始的输出值可以是任意数值,但是经过softmax之后,输出值介于0-1之间,并且他们的和一定是1,即

i

y

i

=

1

/sum_{i}^{}y_{i}=1

iyi=1.
多分类的过程
如下图所示:
输入数据x经过处理分别生成

z

1

z{_{1}}

z1,

z

2

z{_{2}}

z2,

z

3

z{_{3}}

z3,经过softmax转化成输出

y

1

y{_{1}}

y1,

y

2

y{_{2}}

y2,

y

3

y{_{3}}

y3,他们分别是这三个类别的后验概率,由于summation=1,因此做完softmax之后就可以把y的分布当作是一个概率贡献,三个类别,输出是三维的,对应的target也是三维的,为了保证类别之间的关系一致,使用one-hot编码的方式
logistic 回归

logistic 回归
这时就可以通过极大似然估计法得到最终的交叉熵表达式,输出y和target

y

^

/hat{y}^{}

y^之间的交叉熵为:

i

=

1

3

y

^

l

n

y

i

-/sum_{i=1}^{3}/hat{y}ln_{yi}

i=13y^lnyi
逻辑回归模型的限制
如下图给定的训练模型,用逻辑回归来做分类不可行
logistic 回归
因为Logistic Regression在两个class之间的boundary就是一条直线,但是在这个平面上无论怎么画直线都不可能把图中的两个class分隔开来。
特征变换
特征变换可以解决上述提出的逻辑回归模型的限制。
原来的特征不好划分,我们可以找出一个比较好划分的特征空间,使得逻辑回归可以划分。
假设定义

x

1

x_{1}^{'}

x1是原来的点到

[

0

0

]

/begin{bmatrix} 0// 0 /end{bmatrix}

[00]之间的距离,

x

2

x_{2}^{'}

x2是原来的点到

[

1

1

]

/begin{bmatrix} 1// 1 /end{bmatrix}

[11]之间的距离,重新映射之后如下图右侧,红色两个点此时将会重合,此时的逻辑回归就可以把这两个类别分开。
logistic 回归
怎么进行特征变换
让输入数据x的两个特征

x

1

x{_{1}}

x1,

x

2

x{_{2}}

x2经过两个逻辑回归的变换,得到新的特征

x

1

x_{1}^{'}

x1

x

2

x_{2}^{'}

x2,在这个新的特征空间上,类别1和类别2是可以用一条直线分开的,最后再接一个逻辑回归的模型(此时模型的样本点的特征是

x

1

x_{1}^{'}

x1

x

2

x_{2}^{'}

x2),它根据新的特征,就可以分出类别1和类别2.
logistic 回归
因此整个流程是,先用n个Logistic Regression做feature Transformation(n为每个样本点的feature数量),生成n个新的feature,然后再用一个Logistic Regression作classifier

Logistic Regression的boundary一定是一条直线,它可以有任何的画法,但肯定是按照某个方向从高到低的等高线分布,具体的分布是由Logistic Regression的参数决定的,每一条直线都是由

z

=

b

+

i

n

w

i

x

i

z = b + /sum_{i}^{n}w_{i}x_{i}

z=b+inwixi组成的(二维feature的直线画在二维平面上,多维feature的直线则是画在多维空间上)

下图是二维特征的例子,分别表示四个点经过transform之后的

x

1

x_{1}^{'}

x1

x

2

x_{2}^{'}

x2,在新的feature space中可以通过最后的Logistic Regression划分开来.
logistic 回归
注意,这里的Logistic Regression只是一条直线,它指的是“属于这个类”或“不属于这个类”这两种情况,因此最后的这个Logistic Regression是跟要检测的目标类相关的,当只是二元分类的时候,最后只需要一个Logistic Regression即可,当面对多元分类问题,需要用到多个Logistic Regression来画出多条直线划分所有的类,每一个Logistic Regression对应它要检测的那个类
强大的逻辑回归级联模型
通过上面的例子,我们发现,多个Logistic Regression连接起来会产生powerful的效果,我们把每一个Logistic Regression叫做一个neuron(神经元),把这些Logistic Regression串起来所形成的network,就叫做Neural Network,就是类神经网路,这个东西就是Deep Learning

logistic 回归

未经允许不得转载:作者:1138-魏同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《logistic 回归》 发布于2020-11-06

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录