0
0 Комментариев

Есть функции:

def split_data_lambda(X, y, t):
    predicate = X < t
    xL, yL = map(lambda x: np.take(x, np.where(predicate)), (X, y))
    xR, yR = map(lambda x: np.take(x, np.where(~predicate)), (X, y))
    return xL, yL, xR, yR
 
def regression_var_criterion_lambda(X, y, t):
    xL, yL, xR, yR = split_data_lambda(X, y, t)
    return np.var(y) - np.size(yL) / float(np.size(y)) * np.var(yL) - np.size(yR) / float(np.size(y)) * np.var(yR)

Если я вычисляю строку в regression_var_criterion_lambda:

return np.var(y) - np.size(yL) / float(np.size(y)) * np.var(yL) - np.size(yR) / float(np.size(y)) * np.var(yR)

то получаю верный ответ. Строю график:

threshold = np.arange(-1.9, 1.9, 0.01)
total = [regression_var_criterion_lambda(X, y, t) for t in threshold]
plt.plot(linspace, total, '-');

Верный график

Если я вычисляю строку в regression_var_criterion_lambda с заменой на len():

return np.var(y) - len(yL) / float(len(y)) * np.var(yL) - len(yR) / float(len(y)) * np.var(yR)

то получаю неверный график:

Неверный график

Подскажите причины


Добавить комментарий