美文网首页
Logistic Regression(逻辑回归)

Logistic Regression(逻辑回归)

作者: 没天赋的学琴 | 来源:发表于2020-02-04 00:58 被阅读0次

    Logistic Regression

       逻辑回归通常用来做一种二分类问题,构造一个线性模型,将相应的数据分成两类,线性模型一侧的属于一类,另一侧归为另一类。按照机器学习的套路步骤:

    1. 模型

       逻辑回归模型形式如下:h_ \theta(x)=\frac{1}{1+e^{-\theta ^T x}}
    当我们将相应数据x代入到h_\theta(x),会得到一个实数值,若大于0.5,则将x归类为正类1;否则归类为负类0。h_\theta(x)被称为sigmoid函数,其意义是表示x属于正类1的概率(p(x = 1))

    2. 损失函数

       在逻辑回归中,常用的损失函数是cross-entropy loss(交叉熵),形式如下:\begin{aligned} L(\theta) & = -( y * log (h_\theta(x)) + (1 - y) * log( 1 - h_\theta(x) ) ) \\ {\partial L \over \partial \theta} & = (h_\theta(x) - y) * x \end{aligned}

    3. 迭代更新

       利用梯度下降法法来迭代求解模型系数 \begin{aligned} \theta & = \theta - \alpha {\partial L \over \partial \theta} \\ \theta & = \theta - \alpha x^T (h_\theta(x) - y) \end{aligned}    和线性回归一样,利用迭代法最小化损失函数,降低真值与预测值之间的差距。
    具体实现如下:

    def sigmoid(X, theta):
        """
        compute 1 / ( 1 + exp(-theta * x) )
        
        Inputs:
        - X: numpy array contains datas, of shape(m, n)
        - theta: numpy array about weight, of shape(n, 1)
        
        Return:
        - hx: sigmoid value about X, of shape(m, 1)
        """
        
        hx = 1 / ( 1.0 + np.exp( -1.0 * np.dot(X, theta) ) )
        
        return hx
    
    def SGD(X, y, alpha=0.01, maxIter=40):
        """
        stochastic gradient descent for logitstic regression
        
        Inputs:
        - X: numpy array contains datas, of shape(m, n)
        - y: numpy array about datas' labels, of shape(n, 1)
        - alpha: a float, learning rate
        - maxIter: a int, the maximum of iterations
        
        Return:
        - theta: param of logistic model, of shape(n, 1)
        """
        
        m, n = X.shape
        theta = np.zeros((n, 1))
        
        for i in range(maxIter):
            hx = sigmoid(X, theta)
            theta = theta - alpha * np.dot(-X.T, (y - hx))
            
        return theta
    
    def classify(X, theta):
        """
        classify X based on theta
        
        Inputs:
        - X: numpy array about datas, of shape(m, n)
        - theta: numpy array about model param, of shape(n, 1)
        
        Returns:
        
        """
        
        hx = sigmoid(X, theta)
        hx[ np.where(hx > 0)[0] ] = 1
        hx[ np.where(hx <= 0)[0] ] = 0
        
        return hx
    

    概率角度

       和线性回归模型一样,可以通过参数估计这一角度,对逻辑回归进行解释。如上述所说,模型h_\theta(x)其实可以理解为,x可以归类为1的概率,即:p(y=1|x;\theta)=h_\theta(x),那么x归类为0的概率:p(y=0|x;\theta)=1-h_\theta(x)
    那么可以合在一起写成:p(y|x;\theta)=(h_\theta(x))^y(1-h_\theta(x))^{1-y}
    现在拥有训练数据集(x,y),那就可以利用极大似然估计来估计参数\theta的值。
       极大似然方程就为:L(\theta)=\prod_{i=1} ^{m} {( h_\theta (x^{(i)})^{y^{(i)}}(1-h_\theta(x))^{1-y^{(i)}} )}取对数后就可得到:l(\theta)=\sum_{i=1} ^{m} { y^{(i)}logh_\theta(x^{(i)}) + (1 - y^{(i)})log(1 - h_\theta(x^{(i)}) ) } 可以看到cross-entropy loss(交叉熵)就是上述取对数后的极大似然方程的负数。这就是为什么可以通过梯度下降法,对交叉熵进行最小化,得到逻辑回归的参数。


    总结

       逻辑回归的模型是sigmoid函数形式,但其决策边界是直线,因此它属于一种线性模型;其中的sigmoid函数值代表的是样本x属于正类的概率(P(y = 1 | x ))。在逻辑回归模型中,常用的损失函数是cross-entropy loss(交叉熵),该损失函数有多分类的形式,对应的是多分类的模型。这里简单说明一下,softmax回归是多分类常用的一种模型,其大概流程就是,通过sigmoid(\theta X^T),(\theta \in R^{C \times N}, X \in R^{M \times N})得到激活值后,再利用softmax函数将激活值转为概率分布,再由交叉熵来衡量计算后的分布与目标分布的差距;通过最小化上述差距来得到模型参数\theta
       逻辑回归的正则化与线性回归一样,只需在损失函数中加入相应正则项即可;加入正则项后的推导,与线性回归的没有差别。

    相关文章

      网友评论

          本文标题:Logistic Regression(逻辑回归)

          本文链接:https://www.haomeiwen.com/subject/ewscactx.html