Ошибка в регрессионном анализе с 3 классами

1

Я пытаюсь применить одну и всю логистическую регрессию:

Я использую один vs весь метод (class1 vs class2+ class3, c2 vs c1 + c3, c3 vs c1 + c2), чтобы вычислить весы w1, w2, w3:

   for n1 in range(0,50000):

        s1 = np.dot(dt, w1)
        p1 = (1 / (1 + np.exp(-s1)))
        gr1 = (np.dot(dt.T, p1-c1))
        gr1 /= N
        w1 -= 0.01 * gr1

        if n1 % 10000 == 0 and n1!=0:
          loss1 = np.sum( np.log(1 + np.exp(s1))-p1*s1 )
          print('loss1',loss1)

dt - мои особенности,

w1, w2, w3 инициализируются как w1 = np.zeros((5,1)),

c1=np.vstack((np.ones(40),np.zeros(40),np.zeros(40)))
c2=np.vstack((np.zeros(40),np.ones(40),np.zeros(40)))
c3=np.vstack((np.zeros(40),np.zeros(40),np.ones(40)))
Теги:

1 ответ

1
Лучший ответ

так. набор диафрагмы не является совершенным линейно отделимым во всех множествах. поэтому мы используем линейный классификатор, такой как логистическая регрессия, потеря в части, которая не является линейно разделяемой, как правило, непредсказуема. вы можете поставить очень маленькую обучающую ненависть и терпеливый метод, чтобы избежать переутомления. нормализация ваших данных между 0 и 1 тоже поможет.

  • 0
    Большое спасибо за терпеливый ответ. Вы ссылаетесь на несколько итераций?
  • 1
    Терпеливый метод: вы можете определить, будет ли потеря уменьшаться в течение определенного количества шагов.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню