首页 > 代码库 > Logistic Regression to do Binary Classification

Logistic Regression to do Binary Classification


使用python的theano编写Logistic Regression进行二分类学习,使用到的数据集可以到这里下载

我们知道Logistic Regression是在一个多元线性函数的基础上加了一个非线性函数,常用的非线性函数是Sigmoid函数。加上sigmoid之后的输出我们认为是对应分类为1的概率,所以需要学习的参数就是线性加权的系数和截距(bias)。

h(x) = wx + b

g(x) = 1 / ( 1 + exp(-h(x)) ) = 1 / ( 1 + exp( -wx-b ) )

那么对应的分类为1的概率可表示为:

p(y=1 | x; w, b) = g(x)

那么对于一个已知数据的概率表示为:

p(y | x; w, b) = g(x)^y  (1 - g(x))^(1-y)

于是最后训练的目标函数就是要最大化已知数据的似然函数,将上面的概率进行连乘就是拟合训练数据的似然函数了。但是由于连乘在计算和精度上的问题,通常对似然函数进行log,如果是单个实例进行对数化结果就是:

log(p) = ylog(g(x)) + (1-y)log(1-g(x))

这个看起来有点像交叉熵,将这个对训练数据进行累加就是最后的log似然了。当然前面加一个符号就是负log似然,参数求解就是要最小化这个负log似然时对应的参数情况。常采用的方法是梯度下降。

下面贴上一份借助python theano实现的二分类Logistic Regression,最后输出的是在训练数据上的错误率,有兴趣的同学可以看看。代码中使用到的训练数据可以到这里下载。

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 16 21:37:43 2014
@author: BrightHush
Example for Logistic Regression
"""

import time

import numpy

import theano
import theano.tensor as T

rng = numpy.random

class LogisticRegression(object):
    def __init__(self, input, n_in):
        self.w = theano.shared(
            value=http://www.mamicode.com/rng.randn(n_in), >



Logistic Regression to do Binary Classification