zoukankan      html  css  js  c++  java
  • [Machine Learning]学习笔记-Logistic Regression

    [Machine Learning]学习笔记-Logistic Regression

    模型-二分类任务

    Logistic regression,亦称logtic regression,翻译为“对数几率回归”,是一种分类学习方法。和先前的线性回归模型不同的是,输出的y一般是离散量的集合,如输出(y in {0,1})的二分类任务。
    考虑二分类任务,线性回归模型产生的(Z= heta ^TX)是连续的实值,需要用一个函数(g( heta ^TX))将z转换为0/1值。

    可以采用对数几率函数(Logistic Function,亦称Sigmoid Function):

    [g(z)=frac{1}{1+e^{-z}} ]

    至此,可以确定假设方程(h_ heta(x))的形式:

    [egin{align*}& h_ heta (x) = g ( heta^T x ) ewline ewline& z = heta^T x ewline& g(z) = dfrac{1}{1 + e^{-z}}end{align*} ]

    (y=g(z)),可得:

    [ln frac{y}{1-y}= heta^T x ]

    若将y视为样本为正例的可能性,则1-y为反例可能性。
    上式可重写为:

    [ln frac{p(y=1 | x ; heta)}{p(y=0 | x ; heta)}= heta^T x ]

    显然有:

    [p(y=1 | x ; heta)=frac{e^{ heta^T x}}{1+e^{ heta^T x}}=h_ heta (x) \p(y=0 | x ; heta)=frac{1}{1+e^{ heta^T x}}=1-h_ heta (x) ]

    可以由极大似然法(maximum likelihood method)来估计( heta),
    最大化似然概率(L( heta)),即令每个样本属于其真实标记的概率越大越好:

    [egin{equation*} egin{split} L(oldsymbol{ heta}) & =p(mathbf{y}|mathbf{X}; oldsymbol{ heta}) \ & =prod_{i=1}^{m}p(y_{i}|mathbf{x}_{i}; oldsymbol{ heta}) \ & =prod_{i=1}^{m} (h_{oldsymbol{ heta}}(mathbf{x}_{i}))^{y_{i}} (1-h_{oldsymbol{ heta}}(mathbf{x}_{i}))^{1-y_{i}} end{split} end{equation*} ]

    为了方便求导,对等式两边同时取对数,将(L( heta))转换为凸函数(convex function),可得:

    [egin{equation*} egin{split} l(oldsymbol{ heta}) & = ext{log}L(oldsymbol{ heta}) \ & = sum_{i=1}^{m} y_{i} ext{log} h_(mathbf{x}_{i})+(1-y_{i}) ext{log}(1-h_(mathbf{x_i})) end{split} end{equation*} ]

    要使(l( heta))达到最大值,可以构造代价函数(J( heta)):

    [J( heta) = - frac{1}{m} displaystyle sum_{i=1}^m [y^{(i)}log (h_ heta (x^{(i)})) + (1 - y^{(i)})log (1 - h_ heta(x^{(i)}))] ]

    接下来就可以用梯度下降法求得(J( heta))的最小值了。

    [egin{align*}& Repeat ; lbrace ewline & ; heta_j := heta_j - alpha dfrac{partial}{partial heta_j}J( heta) ewline & braceend{align*} ]

    求偏导:

    [egin{equation*} egin{split} frac{partial }{partial heta_{j}}l(oldsymbol{ heta}) & = -frac{1}{m}left ( frac{y}{g(oldsymbol{ heta}^{T}mathbf{x})}-frac{1-y}{1-g(oldsymbol{ heta}^{T}mathbf{x})} ight) frac{partial }{partial heta_{j}} g(oldsymbol{ heta}^{T}mathbf{x}) \ & =-frac{1}{m}left( frac{y}{g(oldsymbol{ heta}^{T}mathbf{x})}-frac{1-y}{1-g(oldsymbol{ heta}^{T}mathbf{x})} ight) g(oldsymbol{ heta}^{T}mathbf{x}) (1-g(oldsymbol{ heta}^{T}mathbf{x})) frac{partial }{partial heta_{j}} oldsymbol{ heta}^{T}mathbf{x} \ & =-frac{1}{m}left( y(1-g(oldsymbol{ heta}^{T}mathbf{x})) -(1-y) g(oldsymbol{ heta}^{T}mathbf{x}) ight)x_{j} \ & =-frac{1}{m}(y-g(oldsymbol{ heta}^{T}mathbf{x}))x_{j} \ & =frac{1}{m}(h_{oldsymbol{ heta}}(mathbf{x})-y)x_{j} \ end{split} end{equation*}]

    化简后可得:

    [egin{align*} & Repeat ; lbrace ewline & ; heta_j := heta_j - frac{alpha}{m} sum_{i=1}^m (h_ heta(x^{(i)}) - y^{(i)}) x_j^{(i)} ewline & brace end{align*} ]

    week 3的课中介绍了matlab中采用梯度下降法的优化函数:fminunc
    只要写出如下形式的代价函数后:

    function [J, grad] = costFunction(theta, X, y)
    J = 0;
    grad = zeros(size(theta));
    rows=size(X,1);
    cols=size(X,2);
    hx=sigmoid(X*theta);     %rows*1的h_theta(x^i)的值
    for i=1:rows
        J=J-1/m*(y(i)*log(hx(i))+(1-y(i))*log(1-hx(i)));
        for j=1:cols
        grad(j)=grad(j)+1/m*(hx(i)-y(i))*X(i,j);
        end
    end
    

    就可以调用该函数计算出( heta)和J:

    options = optimset('GradObj', 'on', 'MaxIter', 400);
    
    %  Run fminunc to obtain the optimal theta
    %  This function will return theta and the cost 
    [theta, cost] = ...
    	fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
    

    这篇博客中介绍了详细用法,先mark一下。

    多分类任务

    基本解决思路是将多分类任务拆解为若干个二分类任务求解。
    最经典的拆分策略有三种:"一对一"(OvO),“一对其余”(OvR)和多对多(MvM)。
    在这里介绍下OvR:对于N个类别,分别训练N个分类器,每个分类器仅将一个类作为正例,其余作为反例。最后将置信度最大的分类器的结果作为预测的结果。如下:

    [egin{align*}& y in lbrace0, 1 ... n brace ewline& h_ heta^{(0)}(x) = P(y = 0 | x ; heta) ewline& h_ heta^{(1)}(x) = P(y = 1 | x ; heta) ewline& cdots ewline& h_ heta^{(n)}(x) = P(y = n | x ; heta) ewline& mathrm{prediction} = max_i( h_ heta ^{(i)}(x) ) ewlineend{align*} ]

  • 相关阅读:
    病毒软件测试代码
    如何将WIN安全设置重置回默认值
    今天值班非常不爽。
    FTP命令(2)
    WORD操作
    DELPHI事务
    DELPHI一些常用的技巧
    钩子学习心得
    (转 )Delphi指针如何指向使用with开域语句创建的无名组件对象
    WebBrowser 操作记要 (DELPHI)
  • 原文地址:https://www.cnblogs.com/messier/p/7798213.html
Copyright © 2011-2022 走看看