Прежде всего, никогда в будущем просто не создавайте свой код! Ваш пост (код + объяснение) должен быть настолько описательным, насколько это возможно! (не многословно, никто не будет читать это). Вот что делает ваш код! Пожалуйста, опубликуйте читаемый код в будущем! Иначе трудно читать и отвечать!
def computeCost(X,y,theta):
'''
Using Mean Absolute Error
X:(100,3)
y: (100,1)
theta:(3,1)
Returns 1D matrix of predictions
Cost = ( log(predictions) + (1-labels)*log(1-predictions) ) / len(labels)
'''
m = len(y)
# calculate the prediction
predictions = sigmoid(np.dot(X,theta))
# error for when label is of class1
class1_cost= -y * np.log(predictions)
# error for when label is of class1
class2_cost= (1-y)*np.log(1-predictions)
# total cost
cost = class1_cost-class2_cost
# averaging cost
cost =cost.sum() / m
return cost
Вы должны сначала понять, как точечный продукт работает в математике и какую форму ввода вы бы использовали в алгоритме, чтобы дать вам правильный ответ! Не бросайте случайные формы! Ваш feature_vector имеет форму (100,3), которая при умножении на вашу тета, какая из фигур (3,1), выведет вектор предсказания формы (100,1).
Matrix multiplication: The product of an M x N matrix and an N x K matrix is an M x K matrix. The new matrix takes the rows of the 1st and columns of the 2nd
Итак, ваше измерение у должно быть в форме (100,1), а не в (100,). Огромная разница! Одним из них является [[3], [4], [6], [7], [9], ...], а другим [3,4,6,7,9, .....].
Ваше измерение должно соответствовать для правильного вывода!
Лучший способ задать вопрос - как рассчитать ошибку / стоимость в логистической регрессии, используя правильные размеры моих меток.!
Для дополнительного понимания!
import numpy as np
label_type1= np.random.rand(100,1)
label_type2= np.random.rand(100,)
predictions= np.random.rand(100,1)
print(label_type1.shape, label_type2.shape, predictions.shape)
# When you mutiply (100,1) with (100,1) --> (100,1)
print((label_type1 * predictions).shape)
# When you do a dot product (100,1) with (100,1) --> Error, for which you have to take a transpose which isn't relavant to the context!
# print( np.dot(label_type1,predictions).shape) # error: shapes (100,1) and (100,1) not aligned: 1 (dim 1) != 100 (dim 0)
print( np.dot(label_type1.T,predictions).shape) #
print('*'*5)
# When you mutiply (100,) with (100,1) --> (100,100) !
print((label_type2 * predictions).shape) #
# When you do a dot product (100,) with (100,1) --> (1,) !
print(np.dot(label_type2, predictions).shape)
print('*'*5)
# what you are doin
label_type1_addDim = np.reshape(label_type2,(-1,1))
print(label_type1_transpose.shape)
Итак, если перейти прямо к делу, то, что вы хотите достичь, это стоимость с dim (100,1)! так что либо вы делаете 1-й, что вы не делаете! или вы делаете пятое, где вы неосознанно добавляете измерение к вашему
сделав его из (100,) в (100,1) и выполнив ту же операцию *
, что и в первом случае! чтобы получить тусклое (100,1).