Алгоритм градиентного спуска не сходится

Я пытаюсь написать немного кода для алгоритма градиентного спуска, объясненного в лекции Стэнфордского машинного обучения ( лекция 2 примерно в 25:00 ). Ниже представлена ​​реализация, которую я использовал вначале, и я думаю, что она правильно скопирована из лекции, но она не сходится, когда я добавляю большие числа (> 8 ) в обучающий набор.

Я ввожу число X , а точка (X, X) добавляется в обучающий набор, поэтому на данный момент я только пытаюсь получить он сходится к y = ax + b , где a = 1 = theta \ [1 \] и b = 0 = theta \ [0 \] . Обучающий набор - это массив x и y , где (x [i], y [i]) - точка.

void train()
{
    double delta;
    for (int i = 0; i < x.size(); i++)
    {
        delta = y[i]-hypothesis(x[i]);
        theta[1] += alpha*delta*x[i];
        theta[0] += alpha*delta*1;
    }
}

void C_Approx::display()
{
    std::cout< решение  масштабирования шага и получил аналогичные результаты. 
Что я делаю не так? 

8
задан Community 23 May 2017 в 12:34
поделиться