def inti():
ini = {'theta' : np.array((1e6 , 1e7 , 1e7, 1e7 , 1e7) , dtype = 'float64').reshape(5 , 1) ,
'b' : 1.2}
return ini
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def net_input(theta, x):
# Computes the weighted sum of inputs
return np.dot(x , theta)
def prob(theta , x):
return sigmoid(np.array(net_input(theta , x)) + inti()['b'])
def loss(theta , x , y):
temp1 = np.dot(y.T , np.log(prob(theta , x)))
temp2 = np.dot((1- y).T ,(1 - np.log(pdef grad(theta , x , y):
return (np.dot(x.T , prob(theta , x ) - y))
#temp = (-1/m)* temp
return ((-1/m)* temp[0])
def grad(theta , x , y):
return (np.dot(x.T , prob(theta , x ) - y))
cost =[]
#inti()
def params(x , y , theta , learning_rate):
theta = inti()['theta']
for i in np.arange(10000):
cost.append((loss(theta , x, y)))
theta = theta + (learning_rate) * grad(theta , x , y)
print(grad(theta , x, y))
return theta
# Function to get theta matrix
parameters = params(X_train , y_train , inti()['theta'] , 20)`
Я новичок в Python и ML, и у меня есть написанные выше функции для выполнения Logisti c Регрессия. Все размеры матрицы правильно определены таким образом, чтобы при умножении матрицы не возникало ошибок. Я столкнулся с довольно странной проблемой здесь. Тета-матрица не просто увеличивается. Я напечатал стоимость каждой эпохи, чтобы увидеть, насколько хорошо была инициализация, но стоимость оказалась одинаковой все время без градиента матрицы, равной нулю. Матрица градиента также была постоянной в каждую эпоху.
Я думал, что это может быть из-за низкой скорости обучения. Но даже после увеличения скорости обучения до 20 я обнаружил, что она не меняется.
Я просмотрел код, и он кажется логически правильным.
Размеры матрицы:
X_train: (700, 5) y_train: (700, 1) тета: (5, 1)