我正在尝试在没有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之后。