Python和科学计算认证群组  - 讨论区

标题:Scipy中优化模块的问题

2012年11月02日 星期五 10:43

 

我最近在写一个程序,要用到Scipy的optimize模块,不过我不知道该选用哪个函数,所以来问问。这个是我要优化的目标函数,其中y是一个378*1的数组W是378*144的数组X为144*1的数组Cx为144*144的数组。
 

 

2012年11月02日 星期五 14:48

我觉得最好是用所有的优化函数跑一遍,看看哪个的速度快,结果好。

2012年11月03日 星期六 11:21

我在考虑求解这个目标函数是否要用到Scipy的优化模块,是否可以直接根据推导出的公式求解出来

我把上面的目标函数给展开了得到这个:

张老师,这个需不需要用优化模块啊?还是直接按照公式求解出来就好了?

 

2012年11月06日 星期二 08:38

我运行了一下你的程序,添加了一些信息的输出:

def func(X):
    print "start", Y.shape, W.shape, Cx.shape, X0.shape
    r = np.sum((Y-np.dot(W,X))**2)+0.5*np.dot(np.dot(X.T,ln.inv(Cx)),X) 
    print "end"
    return r



发现输出为:

start (378,) (378, 4900) (4900, 4900) (4900,)

你的Cx矩阵是4900x4900的吗?和之前你给的公式不一样啊,4900x4900求逆运算可购费劲的了。

2012年11月06日 星期二 09:57

可以是144*144,但为了提高精度,我改成了4900x4900的了

2012年11月06日 星期二 10:11

4900x4900的逆矩阵要算几分钟吧,你可以先把它算出来保存到文件中。在优化的目标函数func中Cx的逆矩阵是不变的,所以不需要每次都算一遍。你可以直接将Cx逆矩阵传递给test_fmin()。

另外,那个L2_distance中的distance函数在scipy中有直接可以计算的:

from scipy.spatial.distance import cdist

注意cdist和你的distance函数所需要的参数矩阵正好是转置的。

2012年11月06日 星期二 10:14

我正在这样做,我的优化函数那一部分代码,是对的吗?我对这个不是很确定

2012年11月06日 星期二 10:49

应该没有问题吧,那个X.T没有必要,用X就可以。我觉得你可以先用144x144做一遍,看看程序是否正确。找到比较好的优化算法之后,再尝试用高精度的运算。这个优化程序中变量太多了,可能要花很长时间。

2012年11月06日 星期二 10:52

为什么?矩阵乘积不是要满足一个矩阵的列数和另一个矩阵的行数相同吗?我是这样打算的,嘿嘿...先弄着,到时候出问题了,再来请教,嘿嘿

2012年11月06日 星期二 13:20

张老师,代码写出来了,不过结果与直接用公式求解出来的结果相差挺大的,而且赋予不同的初始值优化得到的结果是不一样的,这种现象是正常的吗?我该如何选择初始值。以下是我选取的不同的初始值(初始值为[0,1]区间内的值):

这个是用公式求解代码:

 

2012年11月06日 星期二 18:27

优化是这样的,会收敛到某些局域最小值。如果有全局最小值的话,应该能找到的。你把公式求得的最小值对应的X带入到你的目标函数中试试看,然后将它随机变动点,看看它是不是最小值对应的点。

2012年11月07日 星期三 10:08

我把用公式求到的X带入目标函数,发现np.sum((Y-np.dot(W,X))**2)+0.5*np.dot(np.dot(X.T,ln.inv(Cx)),X) 的值比用优化估计得到的值要大很多,这是不是说明它其实不是最小值对应的点?

这样一来,我也不能确定到底优化得到的结果是不是对的,是不是我想要的。

我是否能够根据np.sum((Y-np.dot(W,X))**2)+0.5*np.dot(np.dot(X.T,ln.inv(Cx)),X)的值的大小来判定结果?

2012年11月08日 星期四 14:56

显然要么是目标函数错了,要么是理论最小值错了。你的目标函数中为什么没有1/(2*delta_N^2)这个因子呢?

2012年11月08日 星期四 15:01

哦,现在发现没有标上去,嘿嘿

2012年11月08日 星期四 15:25

我加上去了,然后试着以公式求解出来的X为初始值进行优化,发现这样优化得到的结果比较符合,但是还是有些误差

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号