1. model

这里待求解的是一个 binary logistic regression,它是一个分类模型,参数是权值矩阵 W 和偏置向量 b。该模型所要估计的是概率 P(Y=1|x),简记为 p,表示样本 x 属于类别 y=1 的概率:

P(Y=1|x(i))=p(i)=eWx(i)+b1+eWx(i)+b=11+e−Wx(i)−b

当然最终的目标是求解在整个样本集 D={(x(i),y(i)),0<i≤N} 的对数概率(关于 W和 b):

ℓ(W,b)=−1N∑iNy(i)logp(i)+(1−y(i))log(1−p(i))
  • 这里的取均值是为了解耦后续的正则化系数,以及 SGD 时的步长的选择;

当然也可对 W 进行二范数约束(F范数约束,全部项的平方和):

E(W,b)=ℓ(W,b)+0.01W2F

2. theano 的使用

实现 theano 下的最小化问题的求解,涉及如下的四个流程:

  • (1)声明符号变量;

    import numpy
    import theano.tensor as T
    from theano import shared, function x = T.matrix()
    y = T.lvector()
    w = shared(numpy.random.randn(100))
    b = shared(numpy.zeros(()))
    print 'step 1, initial mode: '
    print w.get_value(), b.get_value()
  • (2)使用这些变量构建符号表达式图(symbolic expression graph)


    # hypothesis p_1 = 1/(1+T.exp(-T.dot(x, w)-b))
    xent = -y*T.log(p_1)-(1-y)*T.log(1-p_1)
    cost = xent.mean() + 0.01*(w**2).sum()
    gw, gb = T.grad(cost, [w, b]);
    prediction = p_1 > .5
  • (3)编译 Theano functions;

    train = function(inputs=[x, y], outputs=[predication, xent], updates={w:w-0.1*gw, b:b-0.1*gb})
    
    predict = function(inputs=[x], outputs=predication)
  • (4)调用编译好的函数来执行数值计算;

    N = 4
    feats = 100
    D = (numpy.random.randn(N, feats), numpy.random.randi(low=0, high=2, size=(N,)))
    training_epochs = 10
    for _ in range(training_epochs):
    pred, err = train(D[0], D[1])
    print 'final model: '
    print 'target values for D', D[1]
    print 'predication on D', predict(D[0])

用 theano 求解 Logistic Regression (SGD 优化算法)的更多相关文章

  1. paper 8:支持向量机系列五:Numerical Optimization —— 简要介绍求解求解 SVM 的数值优化算法。

    作为支持向量机系列的基本篇的最后一篇文章,我在这里打算简单地介绍一下用于优化 dual 问题的 Sequential Minimal Optimization (SMO) 方法.确确实实只是简单介绍一 ...

  2. logistic regression二分类算法推导

  3. 原创:logistic regression实战(一):SGD Without lasso

    logistic regression是分类算法中非常重要的算法,也是非常基础的算法.logistic regression从整体上考虑样本预测的精度,用判别学习模型的条件似然进行参数估计,假设样本遵 ...

  4. 线性模型(3):Logistic Regression

    此笔记源于台湾大学林轩田老师<机器学习基石><机器学习技法> (一)Logistic Regression 原理 对于分类问题,假设我们想得到的结果不是(x属于某一类)这种形式 ...

  5. 【 Logistic Regression 】林轩田机器学习基石

    这里提出Logistic Regression的角度是Soft Binary Classification.输出限定在0~1之间,用于表示可能发生positive的概率. 具体的做法是在Linear ...

  6. [OpenCV] Samples 06: [ML] logistic regression

    logistic regression,这个算法只能解决简单的线性二分类,在众多的机器学习分类算法中并不出众,但它能被改进为多分类,并换了另外一个名字softmax, 这可是深度学习中响当当的分类算法 ...

  7. [OpenCV] Samples 06: logistic regression

    logistic regression,这个算法只能解决简单的线性二分类,在众多的机器学习分类算法中并不出众,但它能被改进为多分类,并换了另外一个名字softmax, 这可是深度学习中响当当的分类算法 ...

  8. 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

    http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) z ...

  9. 逻辑回归(Logistic Regression)算法小结

    一.逻辑回归简述: 回顾线性回归算法,对于给定的一些n维特征(x1,x2,x3,......xn),我们想通过对这些特征进行加权求和汇总的方法来描绘出事物的最终运算结果.从而衍生出我们线性回归的计算公 ...

随机推荐

  1. mybatis-generator + mysql/ptsql

    用了mybatis-generator,我就不再想用注解了,这与我之前说的注解与XML并用是矛盾的,知识嘛,本来就是多元化的,今天喜欢这个,明天喜欢那个,哈哈,看了mybatis-generator下 ...

  2. ios开发零散知识点总结

    1:当有导航栏的时候,子视图为UIScrollView,或是继承于UIScrollView的控件如UITableView,UICollectionView等,控制器会自动调用 self.automat ...

  3. 【30.23%】【codeforces 552C】Vanya and Scales

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. 网络异常与SQL Server事务

    SQL Server事务遭遇网络异常时的处理机制浅析 SQL Server数据库中,如果应用程序正在执行一个事务的时候突然遭遇了网络异常,例如网络掉包,网络中断等,那么这个事务会怎么样? SQL Se ...

  5. Android 长按事件和短按事件同时响应

    在长按事件中的return false 改为return true就可以解决这个问题

  6. 利用QPainter绘制各种图形(Shape, Pen 宽带,颜色,风格,Cap,Join,刷子)

    利用QPainter绘制各种图形 Qt的二维图形引擎是基于QPainter类的.QPainter既可以绘制几何形状(点.线.矩形.椭圆.弧形.弦形.饼状图.多边形和贝塞尔曲线),也可以绘制像素映射.图 ...

  7. WPF 在绘图控件(Shape)中添加文字 [2018.7.15]

    原文:WPF 在绘图控件(Shape)中添加文字 [2018.7.15] Q:使用Shape的子类Ellipse画一个圆,如何在圆中添加文字? A:Shape类中不包含Text属性.可使用Shape类 ...

  8. 语言的学习 —— 西班牙语(español)

    联合国六大官方语言:英语.法语.俄语.汉语.西班牙语.阿拉伯语: 在七大洲中,主要是在拉丁美洲国家中(巴西.伯利兹.法属圭亚那.海地等地除外).很多说西班牙语的人把他们的语言称为西班牙语(españo ...

  9. lucene 7.x 查询

    @Test public void indexSearch() throws IOException, ParseException { //Termquery:精确string查询 // Query ...

  10. 【BZOJ 3676】[Apio2014]回文串

    [链接] 链接 [题意] 给你一个字符串s. 定义一个子串的出现值为它出现的次数*字符串的长度. 让你求里面的回文子串的最大出现值 |s|<=3e5 [题解] 马拉车算法里面. 只有在回文往外扩 ...