Странное поведение функции стоимости по отношению к параметру регуляризации (линейная регрессия) - PullRequest
0 голосов
/ 07 июля 2019

Я построил линейный регрессионный классификатор.

import numpy as np
np.seterr(all='ignore');
def normalize(X):
    X = np.array(X)
    mean = X.mean(axis=0)
    std = X.std(axis=0)
    return (np.nan_to_num(np.divide(np.subtract(X, mean), std)), mean, std)
class LinearModel():

    def fit(self, X=[[]], y=[], alpha=0, lambda_=0, tol=0):
        try:
            X = np.array(X)
            X, self.mean, self.std = normalize(X)
            m = X.shape[0]
            X = np.concatenate([np.ones((m, 1)), X], axis=1)
            n = X.shape[1]
            theta = np.zeros((n, 1))
            J_hist = np.array([-1, 0])
            y = np.array(y).reshape(-1, 1)
        except ValueError:
            self.theta = theta
            return theta, J_hist[2:]
        while not np.isclose(J_hist[-1], J_hist[-2], rtol=tol):
            pred = np.matmul(X, theta)
            J = 1/(2*m) * np.sum((pred - y) ** 2) + lambda_/(2*m) * np.sum(theta ** 2)
            grad = 1/m * np.matmul(X.T, pred - y)
            grad[2:] += lambda_/m * theta[2:]
            theta -= alpha * grad
            J_hist = np.append(J_hist, J)
        self.J_hist_ = J_hist[2:]
        self.theta_ = theta
        return self

    def predict(self, X=[[]]):
        X = np.array(X)
        X = np.nan_to_num((X - self.mean) / self.std)
        m = X.shape[0]
        return np.matmul(np.concatenate([np.ones((m, 1)), X], axis=1), self.theta_)

в питоне.В модели я попытался построить функцию стоимости

(1/(2*#of_training_examples)*sum((prediction - target)^2))

на наборе проверки для различных параметров лямбда регуляризации.Сюжет о стоимости выглядел так:

(y axis cost, x axis lambda)

Почему он ведет себя так странно и прыгает повсюду?Есть ли ошибка в коде?или это какое-то логическое / математическое свойство функции стоимости?Кстати, я попробовал это для другого набора, и функция стоимости вела себя так же ...

...