Comments 4
Методы type1_add
и type2_add
отличаются только тем, в какой класс добавляется точка. Лучше выделить общее в отдельный метод и передавать номер класса через аргументы.
Метод restudy
вызывается при добавлении очередной точки. То есть если мы добавим 10 точек, то мы 10 раз переобучим модель. Лучше обучить модель один раз, когда все точки уже добавлены. Не говоря уже о том, что чем больше добавляем точек, тем сложнее обучение и гонять долгий и тяжелый процесс на каждую точку -- очень плохо.
Обычно процесс обучения модели называют fit
или train
, а не study
.
Ну и наконец, зачем вы используете линейную регрессию для задачи бинарной классификации? Чем не устроила логистическая регрессия, которая как раз для бинарной классификации и предназначена?
Странно выглядит сам процесс обучения. Почему бы не использовать градиентный спуск? Зачем корректировать веса для каждой точки отдельно?
Вообще для такой задачи - бинарная классификация линейно-разделимых данных - есть метод опорных векторов. Он как раз интересен тем, что находит "ближайшие" точки двух классов и строит прямую именно по ним, так как именно эти точки наиболее сложны для различения.
Да, только не очень понятно, что у того самого метода опорных векторов "под капотом". По-моему, такая задача решается чисто геометрически: строятся выпуклые линейные оболочки двух разделяемых множеств. Если эти оболочки не пересекаются, то между ними существует полоса, опирающаяся на N+1 (или меньше) граничную точку при размерности пространства N. Соответственно, на 2-мерной плоскости существует 3 или меньше ( возможно, 2) "опорных векторов", задающих разделяющую полосу максимальной ширины.
Линейная регрессия: прямая, разделяющая плоскость на точки 2 классов