2

Я знаю решение, но я не понимаю, как следующее уравнение было переведено в код.Градиент спуск математика осуществление требуется требуется.

Gradient Descent

  • Почему сумма не хватает?
  • Почему мы транспозиции ((сигмовидной (X * тета) -y) выражение?

Решение

grad = (1/m) * ((sigmoid(X * theta)-y)' * X); 
+0

Сумма не пропущена. Знак суммирования в левой квадратной скобке применяется ко всем членам. – duffymo

ответ

1

Первоначальный J (тета) представляет собой стоимостную функцию для логистической регрессии .

код, который вы показали, grad = ..., является градиент из J (тета) по отношению к параметрам, то есть grad является реали (dtta J (theta)). Производная важна, потому что она используется в градиентном спуске для перемещения параметров к их оптимальным значениям (чтобы минимизировать стоимость J (theta)).

Ниже приведена формула для градиента, обозначенная красным цветом, взятая с первого link ниже. Заметим, что J (theta) совпадает с вашей формулой выше, а h (x) представляет собой сигмоидную функцию.

Общий градиент по всем примерам обучения требует суммирования по m. В вашем коде для grad выше вы вычисляете градиент над одним примером обучения из-за отсутствия суммирования; таким образом, ваш код, вероятно, вычисляет градиент для stochastic gradient descent, а не полный градиентный спуск.

enter image description here

Для получения дополнительной информации, вы можете Google для «логистической регрессии стоимости функции производной», что приводит к этим ссылкам:

  1. Это один, в частности, есть все, что нужно: http://feature-space.com/2011/10/28/logistic-cost-function-derivative/

  2. Это, по-видимому, лекционные заметки из урока Эндрю Нга по компьютерному обучению и логистической регрессии с градиентным спуском: http://www.holehouse.org/mlclass/06_Logistic_Regression.html

  3. Объяснение того, как вычислить производную шаг за шагом: https://math.stackexchange.com/questions/477207/derivative-of-cost-function-for-logistic-regression

1

Как было сказано, математическое выражение вы опубликовали это функция стоимости, в то время как фрагмент кода вы показать, градиент.

Однако суммирование не пропущено. Давайте сломаем его.

Градиент функции стоимости по отношению к j-го параметра enter image description here

С X * theta вы получаете вектор, который содержит скалярное произведение всех точек данных и вашего вектора параметров.

С помощью sigmoid(X * theta) вы оцениваете сигмоид каждого из этих точечных продуктов.

С помощью X * theta)-y вы получаете вектор, содержащий различия между всеми вашими прогнозами и фактическими ярлыками.

С помощью sigmoid(X * theta)-y)' * X вы переносите вектор сигмоидных оценок и вычисляете его точечный продукт с каждым из столбцов вашего набора данных (т. Е. Каждый из x_j для каждой точки данных).

Подумайте об этом на секунду, и вы увидите, как именно это суммирование в выражении, но оценивается для всех записей вашего параметра, а не только j.