Python Scipy最小化不执行迭代
我试图使用SciPy优化函数minimize最小化一个函数,但当我运行它时,结果表明该算法没有执行迭代,也没有进行优化。我正在加载的数据大小为(117,3)。运行程序时,我没有收到任何错误或警告,但最小化函数的结果显示: 消息:“由于精度损失,不一定会出现所需的错误。”Python Scipy最小化不执行迭代,python,optimization,scipy,Python,Optimization,Scipy,我试图使用SciPy优化函数minimize最小化一个函数,但当我运行它时,结果表明该算法没有执行迭代,也没有进行优化。我正在加载的数据大小为(117,3)。运行程序时,我没有收到任何错误或警告,但最小化函数的结果显示: 消息:“由于精度损失,不一定会出现所需的错误。” nfev:113 nit:0 njev:101 现状:2 成功:错 有什么问题吗?我已在下面附上我的代码: data = pd.read_csv('ex2data2.txt') data = data.values m
nfev:113
nit:0
njev:101
现状:2
成功:错 有什么问题吗?我已在下面附上我的代码:
data = pd.read_csv('ex2data2.txt')
data = data.values
m = data.shape[0]
X = data[:,0:2]
y = np.c_[data[:,2]]
X_pol = extend_to_degree(X[:,0], X[:,1], 6)
initial_theta = np.zeros(X_pol.shape[1])
lamb = 1 # Regularization parameter
import scipy.optimize as opt
res = opt.minimize(cost_function_reg, x0 = initial_theta, args=(lamb, X_pol, y), method=None, jac=gradient, options={'maxiter':400})
def sigmoid(x):
return 1/(1+np.exp(x))
def cost_function(theta, X, y):
m = X.shape[0]
sum = 0
for i in range(0, m):
xi = X[i,:]
yi = y[i]
h = sigmoid(xi.dot(theta))
if(yi == 0):
sum = sum - np.log(1-h)
elif(yi == 1):
sum = sum - np.log(h)
sum = sum/m
return sum
def cost_function_reg(theta, lamb, X, y):
m = X.shape[0]
sum = cost_function(theta, X, y)
theta[0] = 0 # Do not regularize theta_0.
sum = sum + lamb/(2*m)*np.sum(np.power(theta,2))
return (sum.flatten())
def gradient(theta, lamb, X, y):
n = theta.shape[0]
m = X.shape[0]
sum = np.zeros((n))
for i in range(0,m):
xi = X[i,:]
yi = y[i]
h = sigmoid(xi.dot(theta))
sum = np.add(sum, (h-yi)*xi)
sum = sum + lamb/m*theta
return sum
def predict(theta, X, threshold = 0.5):
res = sigmoid(X.dot(theta)) >= threshold
return res
def extend_to_degree(X1, X2, degree = 6):
m = X1.shape[0]
out = np.ones((m, 1))
for i in range(1,degree+1):
for j in range(0,i+1):
out = np.column_stack([out, np.multiply(np.power(X1,i-j), np.power(X2, j))])
return out
重复以下问题:使用随机数据(例如,
data=np.random.random((117,3))
)我能够通过移除jac=gradient
使最小值“成功终止”。如果这对实际数据有效,那么它建议您需要检查gradient
函数的正确性。