我的代码:
from scipy.optimize import minimize
import numpy as np
class Least_squares:
def __init__(self):
self.d = 2 #decision_demension
self.parameter_sets = np.ones(6) #Parameters_sets = 1+1 +d+ d (alpha+ beta_0 +...+...)
def func(self,x):
parameter_sets= self.parameter_sets
alpha = parameter_sets[0]
Phi = parameter_sets[1]
T = 1
for i in range(2, self.d + 2):
Phi += x[:, i - 2] * parameter_sets[i]
for j in range(self.d + 2, len(parameter_sets)):
Phi += x[:, j - self.d - 2] * x[:, j - self.d - 2] * parameter_sets[j]
Phi += alpha * T
return Phi
def Euclidean_distance(self,a, b):
dis = 0
for i in range(self.d):
dis += (a[i] - b[i]) ** 2
return dis ** 0.5
def residuals(self, y, x):
parameter_sets = self.parameter_sets
alpha = parameter_sets[0]
mu_0 = 1
residu = 0
transfer = (y - self.func(x))
for i in range(x.shape[1]):
residu += (transfer[i] / (1 + self.Euclidean_distance(x[i, :], x[-1, :]))) ** 2
for j in range(1, len(parameter_sets)):
residu += (mu_0 * parameter_sets[j]) ** 2
residu += (mu_0 * (alpha - 1)) ** 2
return residu
def run(self,y,x):
plsq = minimize(self.residuals, self.parameter_sets ,args=(y, x))
return plsq.x
x = np.array([[0.1,0.2],[0.3,0.4],[0.4, 0.5],[0.6, 0.7],[0.8,0.9],[0.9,1],[1,1.1]])
y = np.array([1,2,3,4,5,6,7])
least_squares = Least_squares()
print(least_squares.run(y,x))
Error:TypeError: residuals() takes 3 positional arguments but 4 were given
问题:除了
def run
之外,所有def都可以独立工作。有人可以帮我解决一下吗?
我修好了,这是我的代码:
from scipy.optimize import minimize
import numpy as np
class Least_squares:
def __init__(self):
self.d = 2 # decision_demension
self.parameter_sets = np.ones(6)
def func(self, x, parameter_sets):
alpha = parameter_sets[0]
Phi = parameter_sets[1]
T = 1
for i in range(2, self.d + 2):
Phi += x[:, i - 2] * parameter_sets[i]
for j in range(self.d + 2, len(parameter_sets)):
Phi += x[:, j - self.d - 2] * x[:, j - self.d - 2] * parameter_sets[j]
Phi += alpha * T
return Phi
def Euclidean_distance(self, a, b):
dis = 0
for i in range(self.d):
dis += (a[i] - b[i]) ** 2
return dis ** 0.5
def residuals(self, parameter_sets, y, x):
alpha = parameter_sets[0]
mu_0 = 1
residu = 0
transfer = (y - self.func(x, parameter_sets))
for i in range(x.shape[0]): # Fix: iterate over rows, not columns
residu += (transfer[i] / (1 + self.Euclidean_distance(x[i, :], x[-1, :]))) ** 2
for j in range(1, len(parameter_sets)):
residu += (mu_0 * parameter_sets[j]) ** 2
residu += (mu_0 * (alpha - 1)) ** 2
return residu
def run(self, y, x):
plsq = minimize(self.residuals, self.parameter_sets, args=(y, x), method='BFGS')
return plsq.x
x = np.array([[0.1, 0.2], [0.3, 0.4], [0.4, 0.5], [0.6, 0.7], [0.8, 0.9], [0.9, 1], [1, 1.1]])
y = np.array([1, 2, 3, 4, 5, 6, 7])
least_squares = Least_squares()enter code here
print(least_squares.run(y, x))
我对格式感到抱歉,我是第一个使用堆栈溢出来提问和回答问题的人。
我