Python在minimize()中将对象作为arg传递
我试图将对象作为额外参数传递给scipy.optimize.minimize(),但它说不能传递对象Python在minimize()中将对象作为arg传递,python,scipy,Python,Scipy,我试图将对象作为额外参数传递给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
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行,在
文件“e:\Anaconda\lib\site packages\spyderlib\widgets\externalshell\sitecustomize.py”,第540行,在runfile中
execfile(文件名、命名空间)
文件“C:/Users/sriramana/svm.py”,第43行,在
C、 gamma,deg=sp.optimize.minimize(fun=myfun,x0=asarray([1,5,3]),args=(mysvc))
文件“e:\Anaconda\lib\site packages\scipy\optimize\\u minimize.py”,第372行,最小化
return _minimize_bfgs(fun、x0、args、jac、callback、**选项)
文件“e:\Anaconda\lib\site packages\scipy\optimize\optimize.py”,第832行,在\u minimize\u bfgs中
gfk=myfprime(x0)
文件“e:\Anaconda\lib\site packages\scipy\optimize\optimize.py”,第281行,在函数包装器中
返回函数(*(包装器参数+参数))
文件“e:\Anaconda\lib\site packages\scipy\optimize\optimize.py”,第604行,约为
f0=f(*(xk,)+args))
文件“e:\Anaconda\lib\site packages\scipy\optimize\optimize.py”,第281行,在函数包装器中
返回函数(*(包装器参数+参数))
TypeError:只能将元组(而不是“SVC”)连接到元组
args=(mysvc)
需要一个逗号来组成元组:args=(mysvc,)
带有一个项的元组是通过在值后面加逗号来构造的(仅将单个值括在括号中是不够的)。丑陋,但有效
是的,那起作用了!!但现在它说“myfun()只接受4个参数,但只提供了2个”。???@user3443615
myfun
应该将参数C、gamma、deg
作为一个数组,我想。我有个问题,我得到的初始参数与作为初始参数传递的结果相同value@user3443615这可能是另一个问题的主题。