Две разные стоимости в функции затрат логистической регрессии

Как указывали другие, popen() является наиболее стандартным способом. И поскольку ни один из ответов не предоставил пример с использованием этого метода, вот он:

#include <stdio.h>

#define BUFSIZE 128

int parse_output(void) {
    char *cmd = "ls -l";    

    char buf[BUFSIZE];
    FILE *fp;

    if ((fp = popen(cmd, "r")) == NULL) {
        printf("Error opening pipe!\n");
        return -1;
    }

    while (fgets(buf, BUFSIZE, fp) != NULL) {
        // Do whatever you want here...
        printf("OUTPUT: %s", buf);
    }

    if(pclose(fp))  {
        printf("Command not found or exited with error status\n");
        return -1;
    }

    return 0;
}
0
задан Gaurav Sahu 18 January 2019 в 17:27
поделиться

1 ответ

Прежде всего, никогда в будущем просто не создавайте свой код! Ваш пост (код + объяснение) должен быть настолько описательным, насколько это возможно! (не многословно, никто не будет читать это). Вот что делает ваш код! Пожалуйста, опубликуйте читаемый код в будущем! Иначе трудно читать & amp; ответ!

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-й, что вы не делаете! или вы делаете пятое, где вы неосознанно добавляете измерение к своему y, делая его из (100,) в (100,1) и выполняя ту же операцию *, что и в первом случае! чтобы получить тусклое (100,1).

0
ответ дан anu 18 January 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: