scipy.optimize.fmin_tnc не работает.это дает ошибку о несоответствии размеров.
Я оптимизирую функцию стоимости логистической регрессии.Я также рассчитал градиент.Я векторизовал мою реализацию.Может кто-нибудь любезно помочь.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.optimize as opt
data = pd.read_csv('ex2data1.txt',header = None)
X = data.iloc[:,:-1]
y = data.iloc[:,2]
data.head()
mask = (y==1)
adm = plt.scatter(X[mask][0].values,X[mask][1].values)
not_adm = plt.scatter(X[~mask][0].values,X[~mask][1].values)
plt.xlabel('exam 1 score')
plt.ylabel('exam 2 score')
plt.legend((adm,not_adm),('admitted','not admitted'))
plt.show()
m,n = X.shape
theta = np.zeros((n+1,1))
X = np.hstack((np.ones((m,1)),X))
y = y[y,np.newaxis]
#only data reading and preparation so far.
def sigmoid(z):
return 1/(1+np.exp(-z))
def computeCost(X,y,theta):
h = sigmoid(np.dot(X,theta))
J = (-1/m)*(np.dot(y.T,np.log(h))+np.dot((1-y).T,np.log(1-h)))
return J
def gradient(X,y,theta):
h = sigmoid(np.dot(X,theta))
beta = h-y
return np.dot(X.T,beta)*(1/m)
temp = opt.fmin_tnc(func = computeCost,x0 = theta.flatten(),fprime =gradient, args = (X, y.flatten()))
Это дает ошибку несоответствия размеров.Я проверил функции computeCost и градиента, они работают правильно.Х 100х3, у 100х1, тета 3х1.https://i.stack.imgur.com/0hlKA.jpg это ссылка на изображение ошибки