Python:scipy的优化功能不起作用/给出尺寸错误

时间:2018-12-20 11:24:17

标签: python arrays optimization scipy dimensions

我正在Python上执行Andrew Ng的机器学习课程,但是我被卡住了,因为scipy的优化功能使我无法工作/给我尺寸错误,这给我带来了麻烦

目标是找到成本函数(将theta (dimension (1,401))X (dimension (5000,401))和y (dimension (5000,1))作为输入的标量函数)的最小值。我已经定义了这样的成本函数及其梯度wrt参数。当运行其中一个优化函数(我尝试过fmin_tncminimizeNelder-Mead等都没有用)时,它们运行了很长时间,或者一直给我报错,说该数组尺寸错误,或者他们发现被0除以...我无法发现的错误。 最奇怪的是,这个问题首先在我进行逻辑回归练习2时突然出现,然后神奇地消失了,而我却没有做任何改变。现在,实现多分类逻辑回归,它再次出现,即使我确实复制并粘贴了练习2的代码也无法解决!

代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.io import loadmat
import scipy.misc 
import matplotlib.cm as cm 
from scipy.optimize import minimize,fmin_tnc
import random

def sigmoid(z):
    return 1/(1+np.exp(-z))

def J(theta,X,y):
    theta_t=np.transpose(theta)
    prod=np.matmul(X,theta_t)
    sigm=sigmoid(prod)
    vec=y*np.log(sigm)+(1-y)*np.log(1-sigm)
    return -np.sum(vec)/len(y)

def grad(theta,X,y):
    theta_t=np.transpose(theta)
    prod=np.matmul(X,theta_t)
    sigm=sigmoid(prod)
    one=sigm-y
    return np.matmul(np.transpose(one),X)/len(y)


data=loadmat('/home/marco/Desktop/MLang/mlex3/ex3/ex3data1.mat')

X,y = data['X'],data['y']

X=np.column_stack((np.ones(len(X[:,0])),X))

initial_theta=np.zeros((1,len(X[0,:])))
res=fmin_tnc(func=J, x0=initial_theta.flatten(), args=(X,y.flatten()), fprime=grad)
theta_opt=res[0]

它不会返回使函数最小化的theta值,而是说:

/home/marco/anaconda3/lib/python3.6/site-packages ipykernel_launcher.py:8: RuntimeWarning: divide by zero encountered in log

我不知道这种零除发生在哪里,因为除了len(y)(即5000的除法和sigmoid函数(1/(1+exp(-z)),永远不能成为0

有什么建议吗?

0 个答案:

没有答案