机器学习(2)逻辑回归(LG)推导及公式实现

转载至:https://zhuanlan.zhihu.com/p/158682254

逻辑回归(Logistic Regression)是一个广泛使用的二分类算法,输出标签为y\in{0,1} ,通过sigmoid函数将线性回归模型z=\boldsymbol{w}^T\boldsymbol{x}+b得到的实值转化到0~1,sigmoid函数如下:

y=\frac{1}{1+e^{-(\boldsymbol{w^T\boldsymbol{x}}+b)}}

其曲线形状如下,当y值大于0.5时,标签输出为1,当y值小于0.5时,标签输出为0。


查阅网上关于逻辑回归模型的推导,一般有两种方法,一种是周志华老师的西瓜书中提到的对率回归模型。

方式一:对率回归模型

P_i=(\frac{1}{1+e^{-(\boldsymbol{w}^T\boldsymbol{x_i}+b)}})^{y_i}(\frac{e^{-(\boldsymbol{w}^T\boldsymbol{x_i}+b)}}{1+e^{-(\boldsymbol{w}^T\boldsymbol{x_i}+b)}})^{(1-y_i)}

该模型不容易求导,所以两边取对数,得到如下模型:

l(\boldsymbol{w},b)=\frac{1}{m}\sum_{m}^{i=1}({y_i}ln(\frac{1}{1+e^{-(\boldsymbol{wx_i}+b)}})+(1-y_i)ln(\frac{e^{-(\boldsymbol{wx_i}+b)}}{1+e^{-(\boldsymbol{wx_i}+b)}})))

m为样本的个数,除以m是为了取平均,防止数据过大导致利用梯度算法时变化过大。

 \frac{1}{1+e^{-(\boldsymbol{w}^T\boldsymbol{x_i}+b)}}                                                   --表示标签为1的概率

 \frac{e^{-(\boldsymbol{w}^T\boldsymbol{x_i}+b)}}{1+e^{-(\boldsymbol{w}^T\boldsymbol{x_i}+b)}}=1-\frac{1}{1+e^{-(\boldsymbol{w}^T\boldsymbol{x_i}+b)}}      --表示标签为0的概率

对率回归模型反应的是每个样本其值属于真实标记的概率,概率越大则模型越好,所以这种模型需要求最大值,使用梯度上升法求解:

\boldsymbol{w}=\boldsymbol{w}+\alpha*\frac{\partial{l(\boldsymbol{w},b)}}{\partial(\boldsymbol{w})}

b=b+\alpha*\frac{\partial{l(\boldsymbol{w},b)}}{\partial(b)}

\alpha --学习率

方式二:损失函数

出现最多的模型推导方式还是取交叉熵求损失函数,交叉熵的公式如下:

-xln(p(x))

x为取值,p(x)为取到x的概率,将y_i1-y_i带入得到:

l_2(\boldsymbol{w},b)=-\frac{1}{m}\sum_{m}^{i=1}({y_i}ln(\frac{1}{1+e^{-(\boldsymbol{wx_i}+b)}})+(1-y_i)ln(\frac{e^{-(\boldsymbol{wx_i}+b)}}{1+e^{-(\boldsymbol{wx_i}+b)}})))

损失函数要求越小越好,所以使用梯度下降法:

\boldsymbol{w}=\boldsymbol{w}-\alpha*\frac{\partial{l_2(\boldsymbol{w},b)}}{\partial(\boldsymbol{w})}

b=b-\alpha*\frac{\partial{l_2(\boldsymbol{w},b)}}{\partial(b)}

事实上,可以看出 l(\boldsymbol{w},b)=-l_2(\boldsymbol{w},b),所以最终两种推导方式得到的梯度模型是一样的。下面给出\frac{\partial{l(\boldsymbol{w},b)}}{\partial(\boldsymbol{w})}\frac{\partial{l(\boldsymbol{w},b)}}{\partial(b)}的推导过程。

公式求导

其中\overline{y}_i=\frac{1}{1+e^{-(wx_i+b)}}为样本i的预测值,w\in{R^{n\times{1}}},n为特征数, x_i\in{R^{n\times{1}}}为单个样本。

\frac{\partial{l(\boldsymbol{w},b)}}{\partial(b)}=\frac{1}{m}\sum_{i=1}^{m}{\{y_i(1+e^{(-wx_i+b)})}\frac{e^{-(wx_i+b)}}{(1+e^{-(wx_i+b)})^2} +(1-y_i)\frac{1+e^{-(wx_i+b)}}{e^{-(wx_i+b)}}\frac{e^{-(wx_i+b)}(1+e^{-(wx_i+b)})+e^{-2(wx_i+b)}}{(1+e^{-(wx_i+b)})^2}\} \\= \frac{1}{m}\sum_{i=1}^{m}{(\frac{y_ie^{-(wx_i+b)}}{1+e^{-(wx_i+b)}}+\frac{-(1-y_i)}{1+e^{-(wx_i+b)}})} \\= \frac{1}{m}\sum_{i=1}^{m}{(\frac{y_i(1+e^{-(wx_i+b)})-1}{1+e^{-(wx_i+b)}})}  \\=\frac{1}{m}\sum_{i=1}^{m}{(y_i-\frac{1}{1+e^{-(wx_i+b)}})} \\=\frac{1}{m}\sum_{i=1}^{m}{y_i-\overline{y}_i}

上面两个公式的推导均用到了微积分中两个重要的求导法则一个是求复合函数的链式求导法则,一个是除法求导法则[1]

除法定则:设f(x)、g(x) 为关于x的函数,则\frac{f(x)}{g(x)}关于x的导数可表示为:

\frac{d(\frac{f(x)}{g(x)})}{dx}=\frac{f{\prime}(x)g(x)-f(x)g^{\prime}(x)}{g^{2}(x)}

链式法则 g(f(x))^{\prime}=\frac{dg[f(x)]}{dx}=\frac{dg(f)}{df}\frac{df}{dx}

ln(\frac{1}{1+e^{-(\boldsymbol{wx_i}+b)}})w求导为例:

f(w)=\frac{1}{1+e^{-(\boldsymbol{wx_i}+b)}}

g(w)=ln(f(w))

ln(f(w))^{

其中 \frac{d(lnf(w))}{f(w)}=\frac{1}{f(w)}=1+e^{-(\boldsymbol{wx_i}+b)}

\frac{df(w)}{w}=(\frac{1}{1+e^{-(\boldsymbol{wx_i}+b)}})^{\prime}=\frac{1^{\prime}\ast (1+e^{-(\boldsymbol{wx_i}+b)})-(1+e^{-(\boldsymbol{wx_i}+b)})^{prime}\ast 1}{(1+e^{-(\boldsymbol{wx_i}+b)})^2} \\=\frac{\boldsymbol{x_i}e^{-(\boldsymbol{wx_i}+b)}}{(1+e^{-(\boldsymbol{wx_i}+b)})^2}

g^{\prime}(w)=(1+e^{-(\boldsymbol{wx_i}+b)})\frac{\boldsymbol{x_i}e^{-(\boldsymbol{wx_i}+b)}}{(1+e^{-(\boldsymbol{wx_i}+b)})^2}=\frac{\boldsymbol{x_i}e^{-(\boldsymbol{wx_i}+b)}}{(1+e^{-(\boldsymbol{wx_i}+b)})}

将上面公式转化为矩阵形式:

\frac{\partial{l(\boldsymbol{w},b)}}{\partial(\boldsymbol{w})}=X^T(Y-\overline{Y})

\frac{\partial{l(\boldsymbol{w},b)}}{\partial(b)}=\frac{1}{m}\sum_{i=1}^{m}{y_i-\overline{y}_i}  (求和)

X\in{R^{m\times{n}}}Y,\overline{Y} \in{R^{m\times{1}}}

代入梯度公式:

\boldsymbol{w}=\boldsymbol{w}+\alpha*X^T(Y-\overline{Y})

b=b+\alpha*\frac{1}{m}\sum_{i=1}^{m}{y_i-\overline{y}_i}

matlab代码:

```

load fisheriris %加载数据

%fisheriris的数据包含150*4的样本数据meas以及150*1的标签species,包含三种类别,

%均以字符给出,我们选取两种并将其转化为0,1。特征也是从4个里面选取最后两个。%sigmoid函数

function y=sigmoid(x)

y=zeros(length(x),1);

for i=1:length(x) 

 y(i)=1.0/(1+exp(-x(i)));

end

end

function [label,w,a,b]=logistic(meas,species) 

      meas1=meas(51:150,3:4);

      meas1(:,1)=meas1(:,1)/max(meas1(:,1));

        meas1(:,2)=meas1(:,2)/max(meas1(:,2));

      species=species(51:150);

      label=ones(100,1); 

     for i=1:length(meas1)

%            if species(i)=="setosa"

%                plot(meas1(i,1),meas1(i,2),"r*")

%                hold on            

if species(i)=="versicolor"

              plot(meas1(i,1),meas1(i,2),"bx")

              label(i)=0;              hold on

            elseif species(i)=="virginica"

                plot(meas1(i,1),meas1(i,2),"g+") 

               hold on

          end

      end

      [m,n]=size(meas1); 

     w = ones(n,1); 

     b=1; 

     alpha=0.0001; 

     maxCycle=5000000;

      for k =1:maxCycle

          h=sigmoid(meas1*w+b); 

         error=label-h;

          w=w+alpha*meas1.'*error/m; 

         b=b+alpha*sum(error)/m;

      end

      x=0:0.01:1;

      y=(-w(1)*x-b)/w(2);

      plot(x,y)     

      for i=1:100 

         a=sigmoid(meas1*w+b); 

     end

end

```


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354