zoukankan      html  css  js  c++  java
  • Logistic Regression分类器

    1. 两类Logistic回归

    Logistic回归是一种非常高效的分类器。它不仅可以预测样本的类别,还可以计算出分类的概率信息。

    不妨设有$n$个训练样本${x_1, ..., x_n}$,$x_i$是$d$维向量,其类别标签是${y_1, ..., y_n}$。对于一个$c$类问题,$y_i in {1, 2, ..., c}$。Logistic回归学习这样一个函数

    egin{equation}
    f(x) = g( heta^T x) = frac{1}{1+e^{- heta^T x}}
    end{equation}
    其中,
    egin{equation}
    g(z) = frac{1}{1+e^{-z}}
    end{equation}
    被称为Logistic函数或者Sigmoid函数。


    设$x=[x^{(1)}, ..., x^{(d)}]^T$。实际上,$ heta^T x$这儿应该写成$ heta_0 + heta^T x$($ heta$是$d$维向量),要有个常数项。但是为了方便,我们设$x^{(0)}=1$,所以$ heta_0 + heta^T x$可以直接写作$ heta^T x$,而此处的$ heta$是$d+1$维向量,即$ heta^T x = sum_{j=0}^d heta_j x^{(j)}$。

    可以看出来,当$z$无穷大时,$g(z)$趋于1;当$z$无穷小时,$g(z)$趋于0;当$z=0$时,$g(z)=0.5$。 $g(z)$的值域是$[0, 1]$,所以$f(x)$的值域也是$[0, 1]$。

    首先我们考虑$2$类问题,设
    egin{equation}
    P(y=1|x, heta) = f(x)
    end{equation}
    即对于给定的样本$x$,其属于类别$1$的概率是$f(x)$。则属于类别$0$的概率是
    egin{equation}
    P(y=0 | x, heta) = 1-f(x)
    end{equation}

    上述概率也可以写作
    egin{equation}
    P(y | x, heta) = f(x)^y (1-f(x))^{1-y}
    end{equation}


    Logistic回归具有如下的特点。一个事件发生的机率(odds)定义为事件发生的概率与不发生的概率的比值。设$p=P(y=1|x, heta)$,那么事件的机率是$frac{p}{1-p}$。其对数函数是
    egin{equation}
    log frac{p}{1-p} = log frac{P(y=1|x, heta)}{1-P(y=1|x, heta)} = heta x
    end{equation}
    可以看出,输出类别$1$的对数机率是输入$x$的线性函数。

    此外,后验概率也可以写作如下形式:
    egin{equation}
    egin{aligned}
    & P(y=1 | x, heta) = frac{e^{ heta^T x}}{1+e^{ heta^T x}} \
    & P(y=0 | x, heta) = frac{1}{1+e^{ heta^T x}}
    end{aligned}
    end{equation}
    (这与下文将到的多类形式一致)

    学习or训练的过程就是通过训练数据,来求解出最优的参数$ heta$。而预测的方法是计算后验概率$P(y | x, heta)$,如果大于$0.5$,则预测为类别$1$;否则为类别$0$。

    以下使用极大似然估计方法来求解参数。参数$ heta$的似然函数是:
    egin{equation}
    egin{aligned}
    L( heta) & = prod_{i=1}^{n} P(y_i | x_i, heta) \
    & = prod_{i=1}^{n} f(x_i)^{y_i} (1-f(x_i))^{1-y_i}
    end{aligned}
    end{equation}

    最大化似然函数往往比较困难,可以通过最大化对数似然函数来求解。$ heta$的对数似然函数是:
    egin{equation}
    egin{aligned}
    ell( heta) & = log L( heta) \
    & = log prod_{i=1}^{n} f(x_i)^{y_i} (1-f(x_i))^{1-y_i} \
    & = sum_{i=1}^{n} log f(x_i)^{y_i} (1-f(x_i))^{1-y_i} \
    & = sum_{i=1}^{n} y_i log f(x_i) + (1-y_i) log (1-f(x_i))
    end{aligned}
    end{equation}

    实际上,代价函数的形式是:
    egin{equation}
    J( heta) = -frac{1}{n} sum_{i=1}^{n} y_i log f(x_i) + (1-y_i) log (1-f(x_i))
    end{equation}
    所以最小化代价函数就等价于最大化似然估计。


    可以通过梯度下降法来求解$l( heta)$的极大值。即
    egin{equation}
    heta := heta + alpha abla_{ heta} ell( heta)
    end{equation}

    egin{equation}
    egin{aligned}
    frac{partial}{partial heta_j} ell( heta) & = frac{partial}{partial heta_j} sum_{i=1}^{n} y_i log g( heta^Tx_i) + (1-y_i) log (1-g( heta^Tx_i)) \
    & = sum_{i=1}^n (y_i frac{1}{g( heta^T x_i)} - (1-y_i) frac{1}{1-g( heta^T x_i)}) frac{partial}{partial heta_j} g( heta^T x_i) \
    & = sum_{i=1}^n (y_i frac{1}{g( heta^T x_i)} - (1-y_i) frac{1}{1-g( heta^T x_i)}) g( heta^T x_i) (1- g( heta^T x_i))frac{partial}{partial heta_j} heta^Tx_i \
    & = sum_{i=1}^n (y_i (1- g( heta^T x_i)) - (1-y_i)g( heta^T x_i)) x_i^{(j)} \
    & = sum_{i=1}^n (y_i - f(x_i)) x_i^{(j)}
    end{aligned}
    end{equation}
    $x_i^{(j)}$是第$i$个样本的第$j$个特征。

    所以,对于参数$ heta$向量中的任一元素$ heta_j$,迭代方式如下:
    egin{equation}
    heta_j := heta_j + alpha sum_{i=1}^n (y_i - f(x_i)) x_i^{(j)}
    end{equation}
    如此,便可将全部参数求解出来。

    此外,Logistic回归的求解也可以采用Newton迭代法等。


    2. 正则化
    在机器学习中,正则化是非常常用的方法。它用来约束模型的参数,使得求解出来的参数不会太大(模型不能过于复杂),以防止过拟合。

    Logistic回归经常加入$ell_1$正则或者$ell_2$正则。参数求解的问题转变为:
    egin{equation}
    underset{ heta}{arg max} ;; ell( heta) - alpha | heta|^2
    end{equation}


    3. 多类情况

    %可以换一种角度来理解Logistic回归。一个事件发生与不发生的比值被称为机率(odds)。假设发生的概率是$p$,那么发生的几率是$p/(1-p)$。几率越大,发生的可能性越大。


    面向多类分类问题的Logistic回归,也叫softmax regression。假设是一个$c$类问题,则类别标签$y_i in {1, ..., c}$。 使用one-vs-all策略可以将两类分类器扩展为多类分类器,即将选取任意一类,再将其它所有类看成是一类,构建一个两类分类器,这样一共需要$c$个分类器。

    定义
    egin{equation}
    egin{aligned}
    P(y=1 | x) &= frac{e^{ heta_1^T x}}{sum_{k=1}^{c}e^{ heta_k^T x}} \
    P(y=2 | x) &= frac{e^{ heta_2^T x}}{sum_{k=1}^{c}e^{ heta_k^T x}} \
    &... \
    P(y=c | x) &= frac{e^{ heta_c^T x}}{sum_{k=1}^{c}e^{ heta_k^T x}}
    end{aligned}
    end{equation}

    该模型有这样一个性质,对于所有参数$ heta_i$,加上一个向量$v$,后验概率的值不变。即
    egin{equation}
    egin{aligned}
    frac{e^{( heta_1+v)^T x}}{sum_{k=1}^{c}e^{( heta_k+v)^T x}} & = frac{e^{ heta_1^T x + v^T x}}{sum_{k=1}^{c}e^{ heta_k^T x + v^T x}} \
    & = frac{e^{ heta_1^T x} e^{v^T x}}{sum_{k=1}^{c} e^{ heta_k^T x} e^{v^T x}} \
    & = frac{e^{ heta_1^T x}}{sum_{k=1}^{c} e^{ heta_k^T x}}
    end{aligned}
    end{equation}

    我们设$v= heta_c$, 则新的参数为
    egin{equation}
    egin{aligned}
    & heta_1 = heta_1 - heta_c \
    & ... \
    & heta_{c-1} = heta_{c-1} - heta_c \
    & heta_c = 0
    end{aligned}
    end{equation}

    则多类Logistic回归模型可写作
    egin{equation}
    egin{aligned}
    P(y=1 | x) &= frac{e^{ heta_1^T x}}{1 + sum_{k=1}^{c-1}e^{ heta_k^T x}} \
    &... \
    P(y=c-1 | x) &= frac{e^{ heta_{c-1}^T x}}{1 + sum_{k=1}^{c-1}e^{ heta_k^T x}} \
    P(y=c | x) &= frac{1}{1 + sum_{k=1}^{c-1}e^{ heta_k^T x}}
    end{aligned}
    end{equation}


    加入正则项后的代价函数可以表述为
    egin{equation}
    J( heta) = -frac{1}{m} left(sum_{i=1}^n sum_{k=1}^c 1{y_i=k} logfrac{ heta_k x_i}{sum_{l=1}^c heta_l^T x_i} ight)
    end{equation}
    其中,$1{y_i=k}$是指示函数,若$y_i=k$为真,则等于$1$,否则等于$0$。

    对于参数的求解,与两类问题的求解方法一样。

  • 相关阅读:
    获取样式方法
    滚动条--滚动文字
    关于一些英文博客内容
    Don't performan heavy tasks in the MoBu Real-time engine thread, even if it worked before
    Autodesk 2014 M&E Devday is coming
    所有学生和老师的福音,欧特克将在全球免费开放软件给学生老师使用
    Autodesk 年度 AU 大会将在拉斯维加斯举行
    今天折腾了下NodeJs的调试
    如何解决 XMLHttpRequest 跨域请求的问题
    欧特克收购 ShotGun 产品
  • 原文地址:https://www.cnblogs.com/grindge/p/3800519.html
Copyright © 2011-2022 走看看