在Matlab中使用相同代码的地方,scipy优化不起作用

时间:2019-06-09 18:16:26

标签: python scipy logistic-regression

我正在尝试在没有sckitlearn的情况下在python中实现逻辑回归,我的代码似乎还不错,但是没有一种优化算法能够找到参数(系数)的最优值

我还尝试了是否在优化中通过梯度方法。返回的值是nan,而相同的数据和相同的代码在octave / matlab中可以正常工作。

我已经尝试了scipy.optimize和Minimum中的几乎所有算法 “蜜饯”(请参阅​​此处)

“鲍威尔”(见此处)

“ CG”(请参见此处)

“ BFGS”(请参阅​​此处)

“ Newton-CG”(请参阅​​此处)

“ L-BFGS-B”(请参见此处)

“ TNC”(请参见此处)

def costfunction(theta,X,y):
    m=len(y)
    j = (-1/m)*np.sum( y * log(sigmoid(np.dot(X,theta))) + (1-y)*log(1-sigmoid(np.dot(X,theta))))
    return j

def gradient(theta,X,y):
    hypo = sigmoid(np.dot(X,theta))
    grad = np.dot(np.transpose(X),(hypo - y))
    return grad

def learn_lostisticreg(X,y):
    theta = np.random.rand(X.shape[1])
    from scipy import optimize as opt
    return opt.fmin_cg(f=costfunction,x0=theta,args=(X,y))

def insert_ones(X):
    X_bias = np.c_[np.ones(X.shape[0]),X]
    return X_bias

X_bias = insert_ones(X)
theta=np.zeros(shape=(X_bias.shape[1],1))
print ("Initial Error : ",costfunction(theta,X_bias,y))
print("Learning theta optimum using scipy")
newtheta = learn_lostisticreg(X_bias,y)
print("Error after learning :",costfunction(newtheta,X_bias,y))

我得到的输出:

初始错误:68.542789 使用Scipy学习theta最佳 优化成功终止。          当前函数值:nan          迭代次数:0          功能评估:31          梯度评估:1

学习后出现错误:nan /opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:4:RuntimeWarning:true_divide中遇到无效值   从sys.path中删除cwd之后。

0 个答案:

没有答案