关闭

优化算法——坐标上升法

标签: 优化算法坐标上升法
6148人阅读 评论(0) 收藏 举报
分类:

一、坐标上升法算法原理

坐标上升法(Coordinate Ascent)每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的。

假设需要求解的优化问题的具体形式如下:

maxαW(α1,α2,,αm)

其中,W是向量α⃗ 的函数。

更新过程为每次固定除αi以外的参数,求得满足条件的αi,直到算法收敛,具体的算法过程如下所示:

这里写图片描述
(图片来自参考文献1)

下面以如下的优化问题为例:

f(x1,x2)=x213x22+2x1x2+6

在迭代的过程中,每次固定x2更新x1,在确定了x1的条件下,固定x1,更新x2,即:

fx1=2x1+2x2

令其为0,得到:

x1=x2

再固定x2,得到:

fx2=6x2+2x1

得到:

x2=13x1

不断按照上述的过程,直到算法收敛。下图是算法在整个过程中的更新曲线:

这里写图片描述

代码如下:

'''
Date: 20160406
@author: zhaozhiyong
'''
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = -(X**2)
Z2 = -(Y**2)
Z = 1.0 * (Z1 + 3 * Z2 + 2 * X * Y)+6.0

plt.figure()

CS = plt.contour(X, Y, Z)

a = []
b = []

a.append(2.0)
b.append(2.0)

j = 1

for i in xrange(200):
    a_tmp = b[j-1]
    a.append(a_tmp)
    b.append(b[j-1])

    j = j+1

    b_tmp = a[j-1] / 3
    a.append(a[j-1])
    b.append(b_tmp)

plt.plot(a,b)

plt.title('Coordinate Ascent')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

二、坐标上升法在函数优化中的应用

下面考虑求解如下的最大值问题:

argmaxx1,x2,x3f(x1,x2,x3)=x212x223x23+2x1x2+2x1x34x2x3+6

将上述函数分别对x1,x2,x3求偏导,并令其为0,得到如下的等式:

x1=x2+x3

x2=12x1x3

x3=13x123x2

最终的结果为:

这里写图片描述

代码如下:

#!/bin/python
'''
Date: 20160406
@author: zhaozhiyong
'''

def f(x):
    x_1 = x[0]
    x_2 = x[1]
    x_3 = x[2]

    result = -(x_1*x_1)-2*(x_2*x_2)-3*(x_3*x_3)+2*x_1*x_2+2*x_1*x_3-4*x_2*x_3+6

    return result


if __name__ == "__main__":
    #print "hello world"
    err = 1.0e-10
    x = [1.0, 1.0, 1.0]
    f_0 = f(x)
    while 1:
        #print "Hello"
        x[0] = x[1] + x[2]
        x[1] = x[0] / 2 - x[2]
        x[2] = x[0] / 3 - 2 * x[1] / 3

        f_t = f(x)

        if (abs(f_t - f_0) < err):
            break

        f_0 = f_t

    print "max: " + str(f_0)
    print x

参考文章

2
0
查看评论

SVM求解之坐标上升算法(Coordinate Ascent)

坐标上升算法(Coordinate Ascent) 坐标上升算法(Coordinate Ascent)及C++编程实现                       &...
  • lch614730
  • lch614730
  • 2013-12-01 14:50
  • 1980

坐标下降法(坐标上升法)matlab程序

起因因为求解SVM的最牛算法SMO算法,使用的时坐标下降法的思路,所以学习一下这个算法。方法某函数包含多个自变量,需要求这个函数的最大或最小值时,可以应用此坐标下降法(最小值)或坐标上升法(最大值)。其过程是,对每个自变量求偏导,交替的对每个自变量进行梯度下降(或上升法)。案例我们使用以下函数作为案...
  • TaiJi1985
  • TaiJi1985
  • 2017-06-12 20:28
  • 1321

优化算法——坐标上升法

一、坐标上升法算法原理坐标上升法(Coordinate Ascent)每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的。假设需要求解的优化问题的具体形式如下:maxαW(α1,α2,⋯,αm)\underset{\alpha }{max}W\left ( \alpha _1,\alpha...
  • google19890102
  • google19890102
  • 2016-04-06 15:00
  • 6148

坐标上升算法(Coordinate Ascent)及C++编程实现

坐标上升算法(Coordinate Ascent)及C++编程实现 编程实现: #include using namespace std; #define f(x1,x2,x3) (-x1*x1-2*x2*x2-3*x3*x3+2*x1*x2+2*x1*x3-4*x...
  • NUPTboyZHB
  • NUPTboyZHB
  • 2012-12-20 13:43
  • 6786

坐标上升法算法

坐标上升法(Coordinate Ascent)每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的。 假设需要求解的优化问题的具体形式如下: maxαW(α1,α2,⋯,αm) 其中,W是向量α⃗ 的函数。 更新过程为每次固定除αi以外的参...
  • zb123455445
  • zb123455445
  • 2017-11-01 17:30
  • 107

优化算法——坐标上升法

一、坐标上升法算法原理 坐标上升法(Coordinate Ascent)每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的。 假设需要求解的优化问题的具体形式如下: maxαW(α1,α2,⋯,αm) 其中,W是向量α⃗ 的函数。 更...
  • xiaopihaierletian
  • xiaopihaierletian
  • 2017-06-30 11:12
  • 279

最大似然估计、梯度下降、EM算法、坐标上升

主要讲解的是机器学习中参数学习算法之间的区别,以及应用的场景。 最大似然估计: 其中目标函数是对数似然函数。为了求目标函数取最大值时的theta。有两个关机键步骤,第一个是对目标函数进行求导,第二个是另导数等于0,求解后直接得到最优theta。两个步骤缺一不可。 梯度下降: 对目标函数进行求...
  • u010138758
  • u010138758
  • 2017-03-01 21:31
  • 1451

坐标上升/下降算法

坐标下降(上升)法原理假设要求解下面的优化问题:在这里,我们需要求解m个变量αi,一般来说是通过梯度下降(这里是求最大值,所以应该叫上升)等算法来求解,每一次迭代对所有m个变量αi也就是α向量进行一次性优化。(这里指的是一个向量的所有分量)。通过每次迭代中的误差调整α向量中每个元素的值。而坐标上升法...
  • u010626937
  • u010626937
  • 2017-07-13 10:14
  • 1370

坐标上升算法(Coordinate Ascent)及C++编程实现

 坐标上升算法(Coordinate Ascent)及C++编程实现 编程实现: [cpp] view plain copy print? #include   using namespa...
  • starzhou
  • starzhou
  • 2016-05-30 15:15
  • 642

公开课机器学习笔记(15)支持向量机五 坐标上升法 SMO优化算法

3:SMO算法   a:坐标上升算法(coordinate assent algorithm) 由于种种原因,同时优化所有变量不太可能,为了得到全局最优,一次只优化一个变量,而保持其他变量不动的方法。这种方法可行的原因是通常优化一个变量的效率高且算法会比较容易实现。 特别地,当只有...
  • BlueLoveyyt
  • BlueLoveyyt
  • 2015-03-28 15:56
  • 1680
    个人声明

    欢迎大家加群,探讨与机器学习相关技术相关的话题:


    101620539


    学习网站:www.wanwenonline.cn

    博客的主要内容主要是自己的学习笔记,并结合个人的理解,供各位在学习过程中参考,若有疑问,欢迎提出;若有侵权,请告知博主删除,原创文章转载还请注明出处。

    -----------------

    我写的书:

    Python机器学习算法

    购买链接:

    京东-Python机器学习算法
    个人资料
    • 访问:1451946次
    • 积分:11424
    • 等级:
    • 排名:第1627名
    • 原创:155篇
    • 转载:1篇
    • 译文:1篇
    • 评论:606条
    博客专栏
    联系我
    Email:zhaozhiyong1989@126.com

    最新评论