Python在minimize()中传递对象作为参数
我想把一个对象作为额外的参数传给scipy.optimize.minimize(),但是它说不能传对象。
def myfun(C,gamma,deg,mysvc):
from sklearn import cross_validation
if(mysvc.kernel=="linear"):
mysvc.C=C
elif(mysvc.kernel=="rbf" or mysvc.kernel=="sigmoid"):
mysvc.C=C
myscv.gamma=gamma
else:
mysvc.deg=deg
scores = cross_validation.cross_val_score(mysvc,cross[:,:95], cross[:,96], cv=5)
return mean(scores)
from scipy import optimize
for mysvc in [gsn,ply,sig,lin]:
C,gamma,deg=sp.optimize.minimize(fun=myfun,x0=asarray([1,.5,3]),args=(mysvc))
print [C,gamma,deg]
这个元组不灵活吗?mysvc是来自sklearn的SVC类的一个对象。我遇到了以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "e:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "C:/Users/sriramana/svm.py", line 43, in <module>
C,gamma,deg=sp.optimize.minimize(fun=myfun,x0=asarray([1,.5,3]),args=(mysvc))
File "e:\Anaconda\lib\site-packages\scipy\optimize\_minimize.py", line 372, in minimize
return _minimize_bfgs(fun, x0, args, jac, callback, **options)
File "e:\Anaconda\lib\site-packages\scipy\optimize\optimize.py", line 832, in _minimize_bfgs
gfk = myfprime(x0)
File "e:\Anaconda\lib\site-packages\scipy\optimize\optimize.py", line 281, in function_wrapper
return function(*(wrapper_args + args))
File "e:\Anaconda\lib\site-packages\scipy\optimize\optimize.py", line 604, in approx_fprime
f0 = f(*((xk,) + args))
File "e:\Anaconda\lib\site-packages\scipy\optimize\optimize.py", line 281, in function_wrapper
return function(*(wrapper_args + args))
TypeError: can only concatenate tuple (not "SVC") to tuple
1 个回答
1
args=(mysvc)
需要一个逗号才能变成一个元组:args=(mysvc,)
一个只有一个元素的元组是通过在一个值后面加上逗号来创建的(仅仅把一个值放在括号里是不够的)。虽然看起来不太好,但确实有效。