浅析Logistic Regression

逻辑回归阶段概述 一、逻辑回归 1、逻辑回归解决的是二分类问题 2、逻辑回归的输入就是线性回归的输出 3、激活函数:sigmoid函数 回归的结果输入到sigmoid函数当中,输出结果:[0, 1]区间中的一个概率值,默认为0.5为阈值 阈值意义(默认阈值为0.5):因为逻辑回归解决的是二分类的问题,假如分成A和B两个类,如果一个样本的逻辑回归输出为0.6,0.6大于0.5的阈值所以它就是A类别的,所以只要样本的逻辑回归输出大于0.5那么就是A类别,如果样本的逻辑回归输出小于0.5那么就是B类别 阅读详情

出处:https://chenrudan.github.io/blog/2016/01/09/logisticregression.html#3.2


本文是受rickjin老师的启发,谈谈关于logistic regression的一些内容,虽然已经有珠玉在前,但还是做一下自己的总结。在查找资料的过程中,越看越觉得lr实在是博大精深,囊括的内容太多太多了,本文只能浅显的提到某些方面。文章的内容如下:

1. 起源

logistic regression的起源主要分为几个阶段,从开始想到logistic这个词,到发现logistic function,再推导出logit function,最后才命名logistic regression。这些过程都是大量的研究者们共同努力发现的,只是在历史的长河中,很多人被渐渐遗忘了。

logistic起源于对人口数量增长情况的研究,最重要的工作是Pierre François Verhulst在1838年提出了对人口增长的公式描述(这人是个比利时人,写的文章是法语的,一个字都看不懂,下面的内容都是看了一篇将研究人口数量增长发展历程的书[1]才知道的…),他博士毕业于根特大学的数学系,是个数学教授和人口学家。在1835年Verhulst的同乡人Adolphe Quetelet发表了一篇关于讨论人口增长的文章,文中认为人口不可能一直是几何(指数)增长,而会被与增长速度平方成比例的一种阻力而影响,但是这篇论文只有猜想没有数学理论基础,却极大的启发了Verhulst。因此在1838年Verhulst发表了关于人口数量增长的论文,就是在这篇论文里面他推导出了logistic equation,文章中谈到一个重要观点,随着时间的增加,一个国家的大小(我理解为资源)和这个国家人们的生育能力限制了人口的增长,人口数量会渐渐趋近一个稳定值。厉害的是他将这个过程用公式给描述出来了,他从人口数量增长的速度公式入手,即人口数量 P(t) P(t)对时间t的导数:

∂P∂t=rP(1−PK) ∂P∂t=rP(1−PK)

其中 K K就是他认为人口数量稳定的值,当 P(t) P(t)远小于 K K时,求导公式后一项约等于0,那么就变成了 ∂P∂t≃rP ∂P∂t≃rP,这个阶段人口增长速度与人口数量和一个常数的乘积成正比,并且在渐渐变大。然后对这个式子求解一阶线性微分方程得到 P(t)≃P(0)ert P(t)≃P(0)ert。当 P(t) P(t)接近 K K时,人口增长速度开始渐渐变小,同样求解二阶微分方程(论文中是将二阶转化成一阶求解),然后将二者整合在一起得到最初的形式。

P(t)=P(0)ert1+P(0)(ert−1)/K P(t)=P(0)ert1+P(0)(ert−1)/K

他将法国英国等过十几年的人口实际数据拿来跟这个公式对比之后发现确实拟合的很不错。但他当时并没有那么多年的数据,下图1是在他过世以后人们总结的300年来的人口增长分布,可以看到非常漂亮的拟合了logisitc分布的累积分布函数走势。但是当时这个公式并没有名字,直到1845年他发表了另外一篇重要文章[2],他给这个公式起了一个名字——“logistic”,此外在这篇文章中,他发现在$P(t)K/2 时 时P(t)$呈凹增长(通过求二阶导来分析,这里略)。这个增长的趋势类似logistic分布的概率密度函数。

1

图1 比利时的人口增长数量图(图来源[2])

然而在后来的几十年内人们都没有意识到这个工作的重要性,很多人都独立的研究出了这个增长现象,直到1922年一个叫做Raymond Pearl的人口学家注意到Verhulst在1838年就已经提出了这个现象和公式,并在他的文章中也使用了logistic function来称呼它,并且沿用至今。在1920年Pearl[3]在研究美国人口增长规律时提出了另外一种表示logistic function的方法。

y=beax1+ceax y=beax1+ceax

基于这个表达式,Joseph Berkson在1944年提出了logit function, logit=In(1−QQ) logit=In(1−QQ),假如 Q=11+ea−bx Q=11+ea−bx,结果就是 logit=a−bx logit=a−bx。

后来,在1958年David Cox提出了logistic regression[4]。他的文章是为了解决这样一个问题,有一组取值为0,1的观测值,它们的取值 Yi Yi依赖于一些独立变量 xi xi, 当 Yi=1 Yi=1时对应的概率为 θi=pr(Yi=1) θi=pr(Yi=1)。由于 θi θi限制在[0,1]之间,因此假设 θi θi与 xi xi的关系符合logit function,即 logitθi≡logθi1−θi=α+βxi logitθi≡logθi1−θi=α+βxi,文章主要在分析如何求解里面的参数 β β,这里就不提了。由于用到了logistic function,而这个问题本身又个回归问题(建立观测值与独立变量之间的关系),因而它被称呼为logistic regression。

貌似Cox在这篇文章中并不是刻意提出logistic regression,但确实这个词第一次出现就是在这篇文章中,虽然Cox之前已经有很多人做过这方面的研究了,但是他们没给个名字,因此Cox成了提出logistic regression的人。这个故事告诉我们一个道理,无论是发文章还是写软件一定要取一个言简意赅又好听又好记的名字…

以上是逻辑回归的历史发展中比较有代表性的几件事(我认为的…还有好多论文没时间细看…),J.S Cramer[5]在他的文章中有更加详细的讨论。它是由数学家对人口发展规律研究得出,后来又被应用到了微生物生长情况的研究,后来又被应用解决经济学相关问题,直到发展到今天作为一个非常重要的算法而存在于各行各业。逻辑回归作为Regression Analysis的一个分支,它实际上还受到很多Regression Analysis相关技术的启发,例如Berkson就是基于probit function提出的logit function。光它的起源到应用就能写一本书出来了,难怪rickjin老师说lr其实非常非常复杂…

2.模型介绍与公式推导

上面说过了逻辑斯蒂回归的起源,下面讨论一下完整的模型,首先介绍一下何为逻辑斯蒂分布,再由逻辑斯蒂分布推出逻辑回归。

2.1 Logistic Distribution

随机变量X服从逻辑斯蒂分布,即X的累积分布函数为上文提到过的logistic function。对分布函数求导得到了概率密度函数。公式如下,参数影响参考图2(图来自维基百科,它的参数s就是统计学习方法上的 γ γ)

F(x)=P(X⩽x)=11+e−(x−μ)/γ F(x)=P(X⩽x)=11+e−(x−μ)/γ

f(x)=F′(x)=e−(x−μ)/γγ(1+e−(x−μ)/γ)2 f(x)=F′(x)=e−(x−μ)/γγ(1+e−(x−μ)/γ)2

1

图2 不同参数对logistic分布的影响(图片来源维基百科)

可以看到 μ μ影响的是中心对称点的位置, γ γ越小中心点附近增长的速度越快。而常常在深度学习中用到的非线性变换sigmoid函数是逻辑斯蒂分布的 γ=1,μ=0 γ=1,μ=0的特殊形式。

2.2 Binomial logistic regression model

1

图3 数据示例

逻辑回归是为了解决分类问题,根据一些已知的训练集训练好模型,再对新的数据进行预测属于哪个类。如图3所示,有一些属于两个类的数据,目标是判断圆圈属于哪一类。也就是说逻辑回归的目标是找到一个有足够好区分度的决策边界,从而能够将两类很好的分开。假设已经存在这样一个边界,针对于图中这种线性可分的情况,这条边界是
输入特征向量的线性组合,假设输入的特征向量为 x∈Rn x∈Rn(图中输入向量为二维), Y Y取值为0,1。那么决策边界可以表示为 w1x1+w2x2+b=0 w1x1+w2x2+b=0,假如存在一个例子使得 hw(x)=w1x1+w2x2+b>0 hw(x)=w1x1+w2x2+b>0,那么可以判断它类别为1,这个过程实际上是感知机,即只通过决策函数的符号来判断属于哪一类。而逻辑回归需要再进一步,它要找到分类概率 P(Y=1) P(Y=1)与输入向量 x x的直接关系,然后通过比较概率值来判断类别,而刚好上文中的logit function能满足这样的要求,它令决策函数的输出值 wTx+b wTx+b等于概率值比值取对数 logP(Y=1|x)1−P(Y=1|x) logP(Y=1|x)1−P(Y=1|x),求解这个式子得到了输入向量 x x下导致产生两类的概率为:

P(Y=1|x)=ew⋅x+b1+ew⋅x+b(1) P(Y=1|x)=ew⋅x+b1+ew⋅x+b(1)

P(Y=0|x)=11+ew⋅x+b(2) P(Y=0|x)=11+ew⋅x+b(2)

其中 w w称为权重, b b称为偏置,其中的 w⋅x+b w⋅x+b看成对 x x的线性函数。然后对比上面两个概率值,概率值大的就是x对应的类。有时候为了书写方便,会将 b b写入 w w,即 w=(w0,w1,…,wn) w=(w0,w1,…,wn)其中 w0=b w0=b,并取 x0=1 x0=1。又已知一个事件发生的几率odds是指该事件发生与不发生的概率比值,二分类情况下即 P(Y=1|x)P(Y=0|x)=P(Y=1|x)1−P(Y=1|x) P(Y=1|x)P(Y=0|x)=P(Y=1|x)1−P(Y=1|x)。取odds的对数就是上面提到的logit function, logit(P(Y=1|x))=logP(Y=1|x)1−P(Y=1|x)=w⋅x logit(P(Y=1|x))=logP(Y=1|x)1−P(Y=1|x)=w⋅x。从而可以得到一种对逻辑回归的定义,输出 Y=1 Y=1的对数几率是由输入 x x的线性函数表示的模型,即逻辑斯蒂回归模型(李航.《统计机器学习》)。而直接考察公式1可以得到另一种对逻辑回归的定义,线性函数的值越接近正无穷,概率值就越接近1;线性值越接近负无穷,概率值越接近0,这样的模型是逻辑斯蒂回归模型(李航.《统计机器学习》)。因此逻辑回归的思路是,先拟合决策边界(这里的决策边界不局限于线性,还可以是多项式),再建立这个边界与分类的概率联系,从而得到了二分类情况下的概率。这里有个非常棒的博文[6]推荐,阐述了逻辑回归的思路。

在推导多分类的问题时,是假设 wT1x+b1=P(Y=1|x)P(Y=K|x) w1Tx+b1=P(Y=1|x)P(Y=K|x)、 wT2x+b2=P(Y=2|x)P(Y=K|x) w2Tx+b2=P(Y=2|x)P(Y=K|x)…等,再推导出 P(Y=K|x)=11+∑K−1k=1ewTkx P(Y=K|x)=11+∑k=1K−1ewkTx、 P(Y=1|x)=ewT1x1+∑K−1k=1ewTkx P(Y=1|x)=ew1Tx1+∑k=1K−1ewkTx等。

有了上面的分类概率,就可以建立似然函数,通过极大似然估计法来确定模型的参数。设 P(Y=1|x)=hw(x) P(Y=1|x)=hw(x),似然函数为 ∏[hw(xi)]yi[1−hw(xi)](1−yi) ∏[hw(xi)]yi[1−hw(xi)](1−yi),对数似然函数为

L(w)=∑i=1NlogP(yi|xi;w)=∑i=1N[yiloghw(xi)+(1−yi)log(1−hw(xi))](3) L(w)=∑i=1NlogP(yi|xi;w)=∑i=1N[yiloghw(xi)+(1−yi)log(1−hw(xi))](3)

3.解法

优化逻辑回归的方法有非常多[7],有python的不同实现[8],这里只谈谈梯度下降,牛顿法和BFGS。优化的主要目标是找到一个方向,参数朝这个方向移动之后使得似然函数的值能够减小,这个方向往往由一阶偏导或者二阶偏导各种组合求得。逻辑回归的损失函数是

minJ(w)=min−1m[∑i=1myiloghw(xi)+(1−yi)log(1−hw(xi))](4) minJ(w)=min−1m[∑i=1myiloghw(xi)+(1−yi)log(1−hw(xi))](4)

先把 J(w) J(w)对 wj wj的一阶二阶偏导求出来,且分别用 g g和 H H表示。 g g是梯度向量, H H是海森矩阵。这里只考虑一个实例 yi yi产生的似然函数对一个参数 wj wj的偏导。

gj=∂J(w)∂wj=y(i)hw(x(i))hw(x(i))(1−hw(x(i)))(−x(i)j)+(1−y(i))11−hw(x(i))hw(x(i))(1−hw(x(i)))x(i)j=(y(i)−hw(x(i)))x(i)(5) gj=∂J(w)∂wj=y(i)hw(x(i))hw(x(i))(1−hw(x(i)))(−xj(i))+(1−y(i))11−hw(x(i))hw(x(i))(1−hw(x(i)))xj(i)=(y(i)−hw(x(i)))x(i)(5)

Hmn=∂2J(w)∂wm∂wn=hw(x(i))(1−hw(x(i)))x(i)mx(i)n(6) Hmn=∂2J(w)∂wm∂wn=hw(x(i))(1−hw(x(i)))xm(i)xn(i)(6)

这几种方法一般都是采用迭代的方式来逐步逼近极小值,需要给定参数 w0 w0作为起点,并且需要一个阈值 ϵ ϵ来判断迭代何时停止。

3.1 梯度下降法

梯度下降是通过 J(w) J(w)对 w w的一阶导数来找下降方向,并且以迭代的方式来更新参数,更新方式为 wk+1j=wkj+αgj wjk+1=wjk+αgj, k k为迭代次数。每次更新参数后,可以通过比较 ||J(wk+1)−J(wk)|| ||J(wk+1)−J(wk)||或者 ||wk+1−wk|| ||wk+1−wk||与某个阈值 ϵ ϵ大小的方式来停止迭代,即比阈值小就停止。

3.2 牛顿法

牛顿法的基本思路是,在现有极小点估计值的附近对f(x)做二阶泰勒展开,进而找到极小点的下一个估计值[9]。假设 wk wk为当前的极小值估计值,那么有

φ(w)=J(wk)+J′(wk)(w−wk)+12J′′(wk)(w−wk)2(7) φ(w)=J(wk)+J′(wk)(w−wk)+12J″(wk)(w−wk)2(7)

然后令 φ′(w)=0 φ′(w)=0,得到了 w=wk−J′(wk)J′′(wk) w=wk−J′(wk)J″(wk)。因此有迭代更新式,

wk+1=wk−J′(wk)J′′(wk)=wk−H−1k⋅gk(8) wk+1=wk−J′(wk)J″(wk)=wk−Hk−1⋅gk(8)

此方法中也需要一个阈值 ϵ ϵ,当 ||gk||<epsilon ||gk||<epsilon时停止迭代。此外,这个方法需要目标函数是二阶连续可微的,本文中的 J(w) J(w)是符合要求的。

3.3 BFGS

由于牛顿法中需要求解二阶偏导,这个计算量会比较大,而且有时目标函数求出的海森矩阵无法保持正定,因此提出了拟牛顿法。拟牛顿法是一些算法的总称,它们的目标是通过某种方式来近似表示森海矩阵(或者它的逆矩阵)。例如BFGS就是一种拟牛顿法,它是由四个发明人的首字母组合命名,是求解无约束非线性优化问题最常用的方法之一。目标是用迭代的方式逼近海森矩阵 H H,假设这个逼近值为 Bk≈Hk Bk≈Hk,那么希望通过计算 Bk+1=Bk+ΔBk Bk+1=Bk+ΔBk能够达到目的。并且假设 ΔBk=αuuT+βvvT ΔBk=αuuT+βvvT,而由3.2可知, Δw=wk+1−wk=(H−1)k+1(gk+1−gk)=(H−1)kΔg Δw=wk+1−wk=(H−1)k+1(gk+1−gk)=(H−1)kΔg,将 Bk+1 Bk+1的更新式代入,可以得到

Δg=BkΔg+(αuTΔw)u+(βvTΔw)v(9) Δg=BkΔg+(αuTΔw)u+(βvTΔw)v(9)

此处,直接令 αuTΔw=1 αuTΔw=1、 βvTΔw=−1 βvTΔw=−1、 u=Δg u=Δg和 v=BkΔw v=BkΔw,那么可以求得 α=1(Δg)TΔw α=1(Δg)TΔw和 β=−1(Δw)TBkΔw β=−1(Δw)TBkΔw。从而再代入求 ΔBk ΔBk的式子就可以得到更新的式子

ΔBk=Δg(Δg)T(Δg)TΔw−BkΔw(Δw)TBk(Δw)TBkΔw(10) ΔBk=Δg(Δg)T(Δg)TΔw−BkΔw(Δw)TBk(Δw)TBkΔw(10)

这里还会对(10)进行变换,通过Sherman-Morrison公式直接求出 (B−1)k+1 (B−1)k+1与 (B−1)k (B−1)k,用 Dk+1 Dk+1和 Dk Dk来表。更新公式变成了

Dk+1=(I−Δw(Δg)T(Δg)TΔw)Dk(I−Δg(Δw)T(Δg)TΔw)+Δw(Δw)T(Δg)TΔw(11) Dk+1=(I−Δw(Δg)T(Δg)TΔw)Dk(I−Δg(Δw)T(Δg)TΔw)+Δw(Δw)T(Δg)TΔw(11)

用BFGS来更新参数的流程如下:

  1. 确定改变量, (Δw)k=−Dk⋅gk (Δw)k=−Dk⋅gk
  2. 更新参数, wk+1=wk+λ(Δw)k wk+1=wk+λ(Δw)k
  3. 求出 Δg=gk+1−gk Δg=gk+1−gk
  4. 由(11)求出 Dk+1 Dk+1

式子的系数 λ=argminJ(wk+λ(Δw)k) λ=argminJ(wk+λ(Δw)k),即在求得下降方向上来从很多值中搜索最优的下降大小,这里我觉得可以用学习率替代。因此,这个更新方法跟牛顿法的区别是,它是在更新参数 w w之后更新一下近似森海矩阵的值,而牛顿法是在更新 w w之前完全的计算一遍森海矩阵。还有一种从计算上改进BFGS的方法称为L-BFGS,不直接存储森海矩阵,而是通过存储计算过程中产生的部分 Δw(g)k−m+1,k−m+2,…,k Δw(g)k−m+1,k−m+2,…,k,从而减少了参数存储所需空间。

4.正则化

正则化不是只有逻辑回归存在,它是一个通用的算法和思想,所以会产生过拟合现象的算法都可以使用正则化来避免过拟合,在谈正则化之前先聊聊什么是过拟合。

4.1 过拟合

之前的模型介绍和算法求解可以通过训练数据集(图2中的三角形和星形)将分类模型训练好,从而可以预测一个新数据(例如图2中的粉色圆圈)的分类,这种对新数据进行预测的能力称为泛化能力。而对新数据预测的结果不好就是泛化能力差,一般来说泛化能力差都是由于发生了过拟合现象。过拟合现象是指对训练数据预测很好但是对未知数据预测不行的现象,通常都是因为模型过于复杂,或者训练数据太少。即当 complexityofthemodeltrainingsetsize complexityofthemodeltrainingsetsize比值太大的情况下会发生过拟合。模型复杂体现在两个方面,一是参数过多,二是参数值过大。参数值过大会导致导数非常大,那么拟合的函数波动就会非常大,即下图所示,从左到右分别是欠拟合、拟合和过拟合。

1

图4 同样数据下欠拟合,拟合和过拟合(图片来源[12])

在模型过于复杂的情况下,模型会学习到很多特征,从而导致可能把所有训练样本都拟合到,就像上图中一样,拟合的曲线将每一个点都正确的分类了。举个例子,假如要预测一个房子是贵还是便宜,房子的面积和所属的地区是有用的特征,但假如训练集中刚好所有贵的房子都是开发商A开发,便宜的都是开发商B开发,那么当模型变复杂能学习到的特征变多之后,房子是哪个开发商的会被模型认为是个有用特征,但是实际上这点不能成为判断的标准,这个现象就是过拟合。因此在这个例子中可以看到,解决的方法有两个,一个是减少学习的特征不让模型学到开发商的特征,一是增加训练集,让训练集有贵房子是B开发的样本。

从而,解决过拟合可以从两个方面入手,一是减少模型复杂度,一是增加训练集个数。而正则化就是减少模型复杂度的一个方法。

4.2 正则化的两种方法

由于模型的参数个数一般是由人为指定和调节的,所以正则化常常是用来限制模型参数值不要过大,也被称为惩罚项。一般是在目标函数(经验风险)中加上一个正则化项 Φ(w) Φ(w)即

J(w)=−1m[∑i=1myiloghw(xi)+(1−yi)log(1−hw(xi))]+λΦ(w)(12) J(w)=−1m[∑i=1myiloghw(xi)+(1−yi)log(1−hw(xi))]+λΦ(w)(12)

而这个正则化项一般会采用L1范数或者L2范数。其形式分别为 Φ(w)=||x||1 Φ(w)=||x||1和 Φ(w)=||x||2 Φ(w)=||x||2。

首先针对L1范数 ϕ(w)=|w| ϕ(w)=|w|,当采用梯度下降方式来优化目标函数时,对目标函数进行求导,正则化项导致的梯度变化当 wj>0 wj>0是取1,当 wj<0 wj<0时取-1.

从而导致的参数 wj wj减去了学习率与(13)式的乘积,因此当 wj wj大于0的时候, wj wj会减去一个正数,导致 wj wj减小,而当 wj wj小于0的时候, wj wj会减去一个负数,导致 wj wj又变大,因此这个正则项会导致参数 wj wj取值趋近于0,也就是为什么L1正则能够使权重稀疏,这样参数值就受到控制会趋近于0。L1正则还被称为 Lasso regularization。

然后针对L2范数 ϕ(w)=∑nj=1w2j ϕ(w)=∑j=1nwj2,同样对它求导,得到梯度变化为 ∂Φ(w)∂wj=2wj ∂Φ(w)∂wj=2wj(一般会用 λ2 λ2来把这个系数2给消掉)。同样的更新之后使得 wj wj的值不会变得特别大。在机器学习中也将L2正则称为weight decay,在回归问题中,关于L2正则的回归还被称为Ridge Regression岭回归。weight decay还有一个好处,它使得目标函数变为凸函数,梯度下降法和L-BFGS都能收敛到全局最优解。

需要注意的是,L1正则化会导致参数值变为0,但是L2却只会使得参数值减小,这是因为L1的导数是固定的,参数值每次的改变量是固定的,而L2会由于自己变小改变量也变小。而(12)式中的 λ λ也有着很重要的作用,它在权衡拟合能力和泛化能力对整个模型的影响, λ λ越大,对参数值惩罚越大,泛化能力越好。

此外,从贝叶斯的角度而言,正则化项实际上是给了模型一个先验知识,L2正则相当于添加了一个均值为0协方差为 1/λ 1/λ的高斯分布先验(将L2正则表示为 λ2wTw λ2wTw),当 λ λ为0,即不添加正则项,那么可以看成协方差是无穷大, w w可以不受控制变成任意大。当 λ λ越大,即协方差越小,那么参数值的取值方差会变小,模型会趋向于稳定(参考[10]最高票答案)。

5. 逻辑回归与其他模型的关系

5.1 逻辑回归与线性回归

在谈两者关系之前,需要讨论的是,逻辑回归中使用到的sigmoid函数到底起到了什么作用。下图的例子中,需要判断肿瘤是恶性还是良性,其中横轴是肿瘤大小,纵轴是线性函数 hw(x)=wTx+b hw(x)=wTx+b的取值,因此在左图中可以根据训练集(图中的红叉)找到一条决策边界,并且以0.5作为阈值,将 hw(x)⩾0.5 hw(x)⩾0.5情况预测为恶性肿瘤,这种方式在这种数据比较集中的情况下好用,但是一旦出现如右图中的离群点,它会导致学习到的线性函数偏离(它产生的权重改变量会比较大),从而原先设定的0.5阈值就不好用了,此时要么调整阈值要么调整线性函数。如果我们调节阈值,在这个图里线性函数取值看起来是0~1,但是在其他情况下可能就是从 −∞ −∞到 ∞ ∞,所以阈值的大小很难确定,假如能够把 wTx+b wTx+b的值变换到一个能控制的范围那么阈值就好确定了,所以找到了sigmoid函数,将 wTx+b wTx+b值映射到了(0,1),并且解释成概率。而如果调节线性函数,那么最需要的是减少离群点的影响,离群点往往会导致比较大的 |wTx+b| |wTx+b|值,通过sigmoid函数刚好能够削弱这种类型值的影响,这种值经过sigmoid之后接近0或者1,从而对 wj wj的偏导数为 hw(x(i))(1−hw(x(i)))x(i)j hw(x(i))(1−hw(x(i)))xj(i),无论接近0还是1这个导数都是非常小的。因此可以说sigmoid在逻辑回归中起到了两个作用,一是将线性函数的结果映射到了(0,1),一是减少了离群点的影响。

1

图5 良性恶性肿瘤分类(图来源[12])

有了上面的分析基础,再来看看逻辑回归和线性回归的关系(线性回归我这里就不展开说了,不清楚的可以看看[11]),有的人觉得逻辑回归本质上就是线性回归,它们俩都要学习一个线性函数,逻辑回归无非是多加了一层函数映射,但是我对线性回归的理解是在拟合输入向量x的分布,而逻辑回归中的线性函数是在拟合决策边界,它们的目标是不一样的。所以我不觉得逻辑回归比线性回归好,它们俩要解决的问题不一样。但它们都可以用一个东西来概括,那就是广义线性模型GLM(Generalized linear models)[12]。先介绍何为指数簇(exponential family),当某个随机变量的概率分布可以表示为 p(y;η)=b(y)exp(ηTT(y)−a(η)) p(y;η)=b(y)exp(ηTT(y)−a(η))时就可以说它属于指数簇,通过调整 η η可以获得不同的分布。对应于线性回归与逻辑回归的高斯分布与伯努利分布就是属于指数簇的,例如取 T(y)=y T(y)=y、 a(η)=−log(1−ϕ)=log(1+eη) a(η)=−log(1−ϕ)=log(1+eη)以及 b(y)=1 b(y)=1代入上式得到 p(y;η)=exp(ylog(ϕ1−ϕ)+log(1−ϕ))=exp(ylogϕ+log(1−ϕ))=ϕy(1−ϕ)1−y p(y;η)=exp(ylog(ϕ1−ϕ)+log(1−ϕ))=exp(ylogϕ+log(1−ϕ))=ϕy(1−ϕ)1−y。

GLM需要满足下面三个条件。

  1. 在给定观测值x和参数w情况下,输出y服从参数为 η η的指数簇分布
  2. 预测的值 hw(x)=E[y|x] hw(x)=E[y|x]
  3. η=wTx η=wTx

因此,选择合适的参数就能分析出线性回归和逻辑回归都是GLM的一种特例,有时会看到有的人会从GLM出发将逻辑回归的公式给推导出来。总之,线性回归和逻辑回归是属于同一种模型,但是它们要解决的问题不一样,前者解决的是regression问题,后者解决的是classification问题,前者的输出是连续值,后者的输出是离散值,而且前者的损失函数是输出y的高斯分布,后者损失函数是输出的伯努利分布。

5.2 逻辑回归与最大熵

最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。为了证明最大熵模型跟逻辑回归的关系,那么就要证明两者求出来的模型是一样的,即求出来的h(x)的形式应该是一致的。由于最大熵是通过将有约束条件的条件极值问题转变成拉格朗日对偶问题来求解,模型的熵为

−∑v=1k∑i=1mh(x(i))vlog(h(x(i))v)(14) −∑v=1k∑i=1mh(x(i))vlog(h(x(i))v)(14)

并假设约束条件如下,其中 v,u v,u是输出类别的index, j j是对应输入向量 x x的index, A(u,y(i)) A(u,y(i))是指示函数,两个值相等输出1,其他输出0[13]。而第三个约束是通过令公式(5)等于0得来的,它的意义是参数 wu,j wu,j最好的取值是让每一个样本i对应 h(x(i))u h(x(i))u的行为接近指示函数 A(u,y(i)) A(u,y(i))。

⎧⎩⎨⎪⎪⎪⎪h(x)v⩾0∑kv=1h(x)v=1∑mi=1h(x(i))ux(i)j=∑mi=1A(u,y(i))x(i)j always  always  for all u,j(15) {h(x)v⩾0 always ∑v=1kh(x)v=1 always ∑i=1mh(x(i))uxj(i)=∑i=1mA(u,y(i))xj(i) for all u,j(15)

通过约束条件(15)可以直接推导出softmax的公式。基于这一点,再回过头来看《统计学习方法》上的约束条件,如果假设 P(y|x)=h(x) P(y|x)=h(x),公式左边的 f(x,y) f(x,y)实际上取值一直为1,那么这两个约束条件实际上是一样的。

∑x,yP(x)˜P(y|x)f(x,y)=∑x,yP(x,y)˜f(x,y)(16) ∑x,yP(x)~P(y|x)f(x,y)=∑x,yP(x,y)~f(x,y)(16)

因此,可以这样说,最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。此外,最大熵与逻辑回归都称为对数线性模型(log linear model)。

5.3 逻辑回归与svm

逻辑回归和svm作为经典的分类算法,被放在一起讨论的次数特别多,知乎和Quora上每种意见都非常有意思都从不同角度有分析,建议都可以看看[14][15][16]。这里只讨论一些我赞同的观点。要是不清楚svm的由来,建议看JerryLead的系列博客[17],我这里就不提了。

相同点:

  1. 都是分类算法
  2. 都是监督学习算法
  3. 都是判别模型
  4. 都能通过核函数方法针对非线性情况分类
  5. 目标都是找一个分类超平面
  6. 都能减少离群点的影响

不同点:

  1. 损失函数不同,逻辑回归是cross entropy loss,svm是hinge loss
  2. 逻辑回归在优化参数时所有样本点都参与了贡献,svm则只取离分离超平面最近的支持向量样本。这也是为什么逻辑回归不用核函数,它需要计算的样本太多。并且由于逻辑回归受所有样本的影响,当样本不均衡时需要平衡一下每一类的样本个数。
  3. 逻辑回归对概率建模,svm对分类超平面建模
  4. 逻辑回归是处理经验风险最小化,svm是结构风险最小化。这点体现在svm自带L2正则化项,逻辑回归并没有
  5. 逻辑回归通过非线性变换减弱分离平面较远的点的影响,svm则只取支持向量从而消去较远点的影响
  6. 逻辑回归是统计方法,svm是几何方法
5.4 逻辑回归与朴素贝叶斯

这两个算法有一些相似之处,并且在对比判别模型和生成模型,它们作为典型的分类算法经常被提及,因此这里也做一个小小的总结。

相同点是,它们都能解决分类问题和都是监督学习算法。此外,有意思的是,当假设朴素贝叶斯的条件概率 P(X|Y=ck) P(X|Y=ck)服从高斯分布时Gaussian Naive Bayes,它计算出来的 P(Y=1|X) P(Y=1|X)形式跟逻辑回归是一样的[18]。

不同的地方在于,逻辑回归为判别模型求的是 p(y|x) p(y|x),朴素贝叶斯为生成模型求的是 p(x,y) p(x,y)。前者需要迭代优化,后者不需要。在数据量少的情况下后者比前者好,数据量足够的情况下前者比后者好。由于朴素贝叶斯假设了条件概率 P(X|Y=ck) P(X|Y=ck)是条件独立的,也就是每个特征权重是独立的,如果数据不符合这个情况,朴素贝叶斯的分类表现就没有逻辑回归好。

5.5 逻辑回归与能量模型

(3月3日补充)

基于能量的模型不是一个具体的算法,而是一种框架思想,它认为输入输出变量之间的依赖关系用一个值表示 E(x,y) E(x,y),这个值称为能量,对关系建模的这个函数叫能量函数 。如果在保持输入变量不变的情况下,对应正确输出时能量低,对应错误输出时能量高,那么这个模型就是有用的。

因此当给定了训练集S,能量模型的构造和训练由四部分组成[19]:

  1. 有合适的能量函数 E(W,Y,X) E(W,Y,X)
  2. inference算法,针对一个给定的输入变量X和能量函数形式,找到一个Y值使得能量最小,即 Y∗=argminY∈yE(W,Y,X) Y∗=argminY∈yE(W,Y,X)
  3. 有loss函数 L(W,S) L(W,S),用来衡量在训练集S下能量函数的好坏
  4. learning算法,用来找合适的参数W,在一系列能量函数中选择让损失函数最小化的能量函数。

可以看出13步通过选择不同的能量函数和损失函数来构造不同的模型,24步是如何训练这样的一个模型。

因此当我们假设要解决二分类问题时,y取值为-1和1,如果假设能量函数为 E(W,Y,X)=−YGw(X)=WTX E(W,Y,X)=−YGw(X)=WTX,损失函数采用negative log-likelihood loss,那么可以求得损失函数具体形式为 Lnll(W,S)=1P∑Pi=1log(1+exp(−2YiWTX)) Lnll(W,S)=1P∑i=1Plog(1+exp(−2YiWTX)),这个形式与把(1)(2)代入公式(3)后得到的损失函数公式是一致的,说明这种组合下,产生的算法就是逻辑回归。因此逻辑回归是能量模型的一种特例。

而此处,同样针对二分类问题,假如能量函数保持不变,损失函数采用hinge loss,并加上一个正则化项,那么就能够推导出SVM的损失函数表达式(SVM的核函数体现在能量函数中,这里为了方便解释没有具体展开说)。这也是为什么说逻辑回归与svm最本质的区别就是损失函数不同。

6. 并行化

由于找不到特别多的并行化资料,这里就分析一下博主冯扬给出的实现[20]。实际上逻辑回归的并行化最主要的目标就是计算梯度。将目标的label变为-1和1,那么梯度公式可以整合在一起变成 ∑Mi=1(11+exp(y(i)wTx(i))−1)y(i)x(i) ∑i=1M(11+exp(y(i)wTx(i))−1)y(i)x(i),梯度计算里面最主要的就是矩阵乘法,一般的做法都是想办法将矩阵切割成大小合适的块。针对二分类,现在有M个样本,N个特征,假如有m*n个计算节点,并且将计算节点排列成m行n列,那么每个节点分配M/m个样本,N/n个特征,如下图所示。

1

图6 并行LR的数据分割(图片来源[20])

原文的标示我不太习惯,下面都改成了ij,并画出了矩阵运算的过程图。其中 X(i,j),i∈[1,m],j∈[1,n] X(i,j),i∈[1,m],j∈[1,n]表示输入数据被分块后的第i行第j列的块。

X(i,j),k X(i,j),k表示这个块中的第k行, Wj Wj表示参数的第j块。

第一步计算

d(i,j),k=WTjX(i,j),k d(i,j),k=WjTX(i,j),k

第二步计算

di,k=∑j=1nd(i,j),k di,k=∑j=1nd(i,j),k

1

图7 并行LR的求梯度12步

第三步计算

G(i,j)=∑k=1M/m(11+exp(yi,kdi,k)−1)yi,kX(i,j),k G(i,j)=∑k=1M/m(11+exp(yi,kdi,k)−1)yi,kX(i,j),k

第四步计算

Gj=∑i=1mG(i,j) Gj=∑i=1mG(i,j)

1

图6 并行LR的求梯度34步

从而,经过上面的分解步骤可以将逻辑回归来做并行化计算。



手写算法-python代码实现逻辑回归(带L1、L2正则项) 手写算法-python代码实现逻辑回归逻辑回归原理解析损失函数定义以及数学公式推导过程解释1:通俗易懂的手推损失函数:解释2:最大似然估计求解参数对损失函数推导梯度python代码实现逻辑回归 逻辑回归原理解析 前面我们系统性的介绍了线性回归,初学者建议把我前面的文章看完,再来看逻辑回归。写得应该算是容易看懂的了,且都有实例辅证,大家看的时候要自己跑一边代码,多动手、多思考。 今天,我们来讲逻辑回归。 逻辑回归是LogisticRegression的直译,它不是用来解决回归问题的,而是用来解决分类问题的,它 阅读详情

相关推荐

详解机器学习经典模型(原理及应用)——逻辑回归

本文详细介绍了逻辑回归的定义,原理以及计算公式,并给出了逻辑回归应用于二分类和多标签分类的示例代码,可以用于面试八股或业务开发参考。

学习与分享人工智能技术 5441

(转载)【机器学习算法系列之二】浅析Logistic Regression

(原文:https://chenrudan.github.io/blog/2016/01/09/logisticregression.html) 发表于 2016-01-09 | 分类于 project experience | 9条评论 |  872 本文是受rickjin老师的启发,谈谈关于logistic regression的一些内容,虽然已经有珠玉在前,但还是做一

ligang_csdn的博客 2286

推荐系统遇上深度学习(十七)--探秘阿里之MLR算法浅析及实现

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tsaiedu,并注明消息来源,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。 本文来自天善智能社区专栏作者[文文](https://ask.h...

简书博客搬家测试账号 1232

推荐系统学习笔记-Part6 GBDT+LR

GDBT+LR 前面介绍的协同过滤和矩阵分解存在的劣势就是仅利用了用户与物品相互行为信息进行推荐, 忽视了用户自身特征, 物品自身特征以及上下文信息等,导致生成的结果往往会比较片面。 而这次介绍的这个模型是2014年由Facebook提出的GBDT+LR模型, 该模型利用GBDT自动进行特征筛选和组合, 进而生成新的离散特征向量, 再把该特征向量当做LR模型的输入, 来产生最后的预测结果, 该模型能够综合利用用户、物品和上下文等多种不同的特征, 生成较为全面的推荐结果, 在CTR点击率预估场景下使用较为广泛

qq_39544991的博客 470

《AI赋能行业实战:‌揭秘企业数字化转型最佳实践,‌落地案例深度解析!‌》 ---- 总目录

文章大纲金融行业 落地实践浅析大健康行业 落地实践浅析传统行业深度融合升级参考文献 AI 相关技术伴随着2006年 计算机算力的膨胀开始,蓬勃发展至今。从传统机器学习到深度学习再到大力出奇迹的BERT , GPT 经历了一轮又一轮的热潮。 现代公司制度已有近百年,更是在近年来积累了大量数据。每个企业都将不可避免的面对堆积如山的海量数据,如何处理并从海量数据中挖掘信息,进行信息化转型,提升企业战斗力,是含金量极高的一门技艺。 大数据技术为AI 技术提供了大量弹药,从上帝视角出发解读世界。本专栏,带你从上帝

shiter编写程序的艺术 2024

别再手动配电脑了!手把手教你用Windows Server 2022搭建企业AD域(附DNS配置避坑指南)

本文详细介绍了如何使用Windows Server 2022搭建企业AD域,提升20+终端的管理效率。通过实战案例和避坑指南,解析AD域的核心价值、部署步骤及DNS配置技巧,帮助企业实现集中权限管理、安全策略统一部署,显著降低IT运维成本。

weixin_30652897的博客 349

浅析logistic regression

逻辑回归是一种应用非常广泛的分类算法,同时也广泛地用于排序场景。如果样本集是线性可分的,逻辑回归是一个效果比较好的分类器。对于非线性特征,可以通过特征工程将其线性化。这种...

hestendelin的专栏 458

python等级考试——一级知识点汇总(不包含turtle画图)

本篇文章是针对中国电子学会青少年编程等级考试的,适合初学者以及青少年编程学习者

weixin_65350557的博客 9025

logistic regression浅析

最近开始学习机器学习的相关理论知识,准备把自己的整个学习心得整理汇集成博客,一来可以督促自己,二来可以整理思路,对问题有一个更加透彻的理解,三来也可以放在网上和大家分享讨论,促进交流。 由于这次的学习过程主要是以数学理论以及对应的编程为主,因此,整个过程中,我将以Kaggle上的Titanic上的数据作为练习背景。 今天以logistic regression为主,主要包括理论部分以及对应的编...

weixin_30548917的博客 123

RV1126双摄IMX577驱动移植避坑:从RK3588到RV1126的dts配置与内存崩溃解决实录

本文详细记录了在RV1126平台上移植RK3588的IMX577双摄驱动的完整过程,重点解决了dts配置与内存崩溃问题。通过分析硬件架构差异、驱动移植关键点及CMA内存越界问题,提供了两种有效解决方案,并分享了双摄同步优化与网络调试的实战经验,为嵌入式视觉系统开发提供实用参考。

weixin_42641741的博客 405

[Ethernet in CANoe]2--如何在CANoe中去仿真CP版本的SOME/IP通信

上篇文章()介绍了SOME/IP的两种类型的数据格式,根据作者目前的项目经验,目前在CANoe V18之前的版本,CP版本的arxml是最方便实现SOME/IP以太网仿真的。作者目前只有CANoe V17的license,所以本片文章是在CANoe 17上基于CP版本的arxml去做仿真模拟。

汽车ECU自动化测试 1764

浅析LR,Logistic Regression,逻辑回归

【机器学习算法系列之二】浅析Logistic Regression https://chenrudan.github.io/blog/2016/01/09/logisticregression.html LR(Logistic Regression) 逻辑回归模型 进行二分类或多分类 及梯度下降学习参数 https://blog.youkuaiyun.com/asd136912/article/d...

apache的专栏 188

Python画常见分布的概率密度图

因为做概随大作业,了解了一些python画概率分布图的方法。

qq_44807946的博客 5204

sklearn浅析(四)——Generalized Linear Models之三

BayesianRidge  贝叶斯岭回归,求解的是基于gamma先验(假设噪音是服从高斯分布的,那么gamma分布就是其共轭先验)的岭回归,可以理解为正则化项是gamma先验(其实贝叶斯方法中的先验概率在一定程度即是正则化项的作用): w=(XTX+λαI)−1XTyw = (X^TX+\frac{\lambda}{\alpha}I)^{-1}X^Ty   其中λ\lambda的初始值1,α\

起风之后,只剩沙丘 3525

人大金仓的‘影子表’sys_user:搞懂Schema优先级,告别字段不存在的报错

本文深入解析人大金仓数据库中‘影子表’sys_user的Schema优先级问题,帮助开发者解决字段不存在的报错。通过分析Schema搜索路径机制,提供四种解决方案,包括连接时指定Schema、动态调整搜索路径、永久修改用户设置和使用完全限定表名,确保查询准确无误。

weixin_30329623的博客 596

AI大模型探索之路-认知篇1-全景透视:揭秘AIGC技术的进化之路

随着人工智能技术的突飞猛进,内容创作方式的发生了革命性的转变;从早期专业人员主导的内容生产,到现如今生成式人工智(AIGC)能创作时代;本篇文章主要讲解AIGC技术的演变历程。

寻道AI,探索AI无限可能! 1648

Spark内置逻辑斯谛回归LR实现(python)

1. Spark版LR from pyspark.ml import Pipeline from pyspark.ml.classification import LogisticRegression from pyspark.ml.linalg import Vectors spark.conf.set("spark.sql.execution.arrow.enabled", "true") ...

rosefun96的博客 696

PCL 点云配准-ICP算法(精配准)

ICP(Iterative Closest Point)算法是一种常用的点云精细配准算法。它通过迭代计算将一组点云变换到另一组点云的最佳位置,最终实现精确的对齐。ICP算法在每次迭代中选择与目标点云最接近的点作为对应点,通过计算最小化源点云和目标点云之间的均方误差(MSE)来进行刚性变换(包括平移和旋转)。

纵马踏花向自由 1724

logistic回归 ROC AUC L1正则化

逻辑回归 logistic 1.logistic回归是一种极其高效的概率计算机制 2.logistic返回的是概率,可以”原样”使用返回的概率来代表某件事情发生的可能性,也可以将返回的概率转换成二元值(0和1) 3.logistic回归模型用于分类 设置阈值 评估的话用 准确率 常见的S型曲线 y′=11+e−zy′=11+e−zy'= \frac{1}{1+e^{-z}} z=w...

wangqi1113的博客 3852

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

逻辑回归详解

逻辑回归通常用于解决分类问题,比如:客户是否该买某个商品,借款人是否会违约等。实际上,“分类”是逻辑回归的目的和结果,中间过程依旧是“回归”,因为通过逻辑回归模型,我们得到的是0-1之间的连续数字,即概率,类似借款人违约的可能性。然后给这个可能性加上一个阈值,就变成了分类。 逻辑回归与线性模型的关系 逻辑回归是线性模型,但属于广义线性模型。普通线性模型与广义线性模型的联系: 1、普通线性模型 普通线性模型的表达式: 是截距项,是未知参数。 普通线性模型具备以下特点: 响应变量y服从正.

choven_meng的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

逻辑回归L1和L2正则化

正则化 正则化是用来防止模型过拟合的过程,常用的有L1正则化和L2正则化两种选项,分别通过在损失函数后加上参数向 量 的L1范式和L2范式的倍数来实现。这个增加的范式,被称为“正则项”,也被称为"惩罚项"。损失函数改变,基 于损失函数的最优化来求解的参数取值必然改变,我们以此来调节模型拟合的程度。 L1范式表现为参数向量中 的每个参数的绝对值之和, L2范数表现为参数向量中的每个参数的平方和的开方值。 重要参数penalty & C 参数 说明 penalty...

sshi9的博客 6211

机器学习之逻辑回归模型

其次,逻辑回归提供了对结果的解释和推断能力,模型的系数可以揭示哪些特征对分类结果的影响较大或较小。最后,逻辑回归对于数据中的噪声和缺失值具有一定的鲁棒性,能够适应现实世界中的不完美数据。综上所述,逻辑回归是一种强大而实用的分类算法,在许多实际应用中被广泛采用。逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是一种机器学习算法,属于分类和预测算法中的一种,主要用于解决二分类问题。例如,我们可以将购买的概率设置为因变量,将用户的特征属性,例如性别,年龄,注册时间等设置为自变量。

十年以上架构设计经验,专注于软件架构和人工智能领域,对机器视觉、NLP、音视频等领域都有涉猎 4287

逻辑回归_正则化之L1和L2范数

正则化(RegularizationRegularizationRegularization)是机器学习中一种常用的技术,其主要目的是控制模型复杂度,减小过拟合。

weixin_42471573的博客 1593

模型评估方法:ROC曲线与KS曲线

本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》 对于二分类模型来说,主流的评估方法有ROC曲线和KS曲线两种。 一、ROC曲线 如果把假警报率理解为代价的话,那么命中率就是收益,所以也可以说在阈值相同的情况下,希望假警报率(代价)尽可能小,命中率(收益)尽可能高,该思想反映在图形上就是ROC曲线尽可能地陡峭。曲线越靠近左上角,说明在相同的阈值条件下,命中率越高,假警报率越低,模型越完善。 #混淆矩阵的Python代码实现 from sklearn.metrics import c.

m0_46388544的博客 5135

解析逻辑回归模型

介绍 逻辑回归模型是业界运用最为广泛的模型,我们从下面几个方面讨论这个模型: 1. 在模型层面上,逻辑回归模型是被用来解决分类问题的。由于分类是一个非线性问题,所以建模的主要难点是如何将非线性问题转化为线性问题。主要从两方面入手: - 从分解问题的角度入手:通过引入隐含变量(这里举一个例子,来解释什么是隐含变量:当人们在购买衣服的时候,能被其他人观察到的只有购买与否这个行为,而忽略了在这...

星影L的博客 5969
上一篇: 以性别预测为例,谈谈数据挖掘中的分类问题
下一篇: 拉格朗日乘子法的数学基础
kejiaming
博客等级 码龄15年 19粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值