我试图将对象作为额外参数传递给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
答案 0 :(得分:1)
args=(mysvc)
需要逗号来制作元组:args=(mysvc,)
Tutorial 5.3. Tuples and Sequences
通过使用逗号跟随值来构造具有一个项目的元组(仅在括号中包含单个值是不够的)。丑陋但有效。