Советы по программированию логистической регрессии в Python - PullRequest
0 голосов
/ 03 июня 2019

В качестве учебного проекта меня попросили написать программу Python для многочленной логистической регрессии, запустить ее в наборе данных и сравнить со «стандартной» программой логистической регрессии.

Набор данных (после небольшого форматирования и кодирования с моей стороны) состоит из 3175 двоичных последовательностей, каждая длиной 240. Есть три класса, которые я закодировал как [1,0,0], [01,0] и [0,0,1].Цель состоит в том, чтобы построить модель логистической регрессии, чтобы предсказать класс любой данной последовательности.В частности, модель будет иметь вид:

$ (e ^ {\ theta \ cdot x} / d, e ^ {\ mu \ cdot x} / d, 1 / d) $где $ d = e ^ {\ theta \ cdot x} + e ^ {\ mu \ cdot x} + 1 $ и $ \ theta, \ mu $ - векторы параметров

Я хочу найти $\ theta, \ mu $, которые минимизируют следующую функцию стоимости

$ \ Sum_i -y_i ^ 0 log (p_0 (x_i)) - y_i ^ 1 log (p_1 (x_i)) - y_i ^ 2 log (p_2(x_i)) $ где y_i ^ j - показатель того, находится ли i-я последовательность в классе j, а p_j (x_i) - вероятность того, что i-я последовательность находится в классе j (согласно модели)

.Стандарт, с которым я сравнивал свою программу, был из Pytorch.

Я сделал это самым простым способом, который я мог себе представить:

  • Импорт numpy
  • Создание последовательностей переменныхдля сохранения последовательностей в виде списка
  • Создание результатов переменной для сохранения классификаций в виде списка
  • Определение функции e_theta_x (t, code), которая возвращает $ e ^ {t \ cdot code} $и e_mu_x (m, code), который делает то же самое
  • Define prэдикт (код, т, м) a на основе приведенной выше формулы
  • определение стоимости (х, у, т, м) на основе вышеуказанной формулы
  • определение cost_gradient_theta (т, м, х, у) и cost_gradient_mu (t, m, x, y), основанные на формулах для частных производных функции стоимости, которые я разработал вручную и подтвердил с помощью Mathematica
  • Define Gradge_descent (t, m, x,у, альфа, итерации).Здесь t и m - начальные догадки для тэты и мю.Итеративно обновлять значения t и m, вычитая alpha * cost_gradient;делать это итерации - много раз.Вернуть конечные значения t и m.

Я выполнил 10000 итераций своего кода.Это заняло около 4 дней 18 часов.Значения параметров, которые я получил в конце, дали стоимость 0,367 и точность (доля времени, когда классификация с моделью дала наибольшую вероятность, чтобы была истинная классификация) 95,5%.

Я думал, чтоможет быть достаточно хорошим;но потом я запустил программу логистической регрессии Pytorch.За считанные минуты он дал значения параметров со стоимостью 0,0488 и точностью 98,3%.Мой руководитель недоволен и хочет, чтобы я написал лучшую программу.

Не думаю, что я смогу написать что-то столь же эффективное, как Pytorch, самостоятельно.Предположительно, он просто хочет, чтобы я сократил разницу в производительности на порядки с 4+ до чего-то более респектабельного (2, может быть,?).Но я не уверен, как это сделать.Могу я дать совет, пожалуйста?

Спасибо

...