Как найти лучшую прямую, разделяющую две области, имеющие точки с двумя разными свойствами

У меня есть куча точек на 2D-графике. Красные точки показывают, когда мой эксперимент стабилен, черные — когда он нестабилен. Две области четко разделены линией на этом логарифмическом графике, и я хотел бы найти лучшую «разделительную линию», то есть линию, которая дает критерий для разделения двух областей и имеет минимальную ошибку по этому критерию. Я провел поиск в различных книгах и в Интернете, но не смог найти никакого подхода к решению этой проблемы. Вы знаете какой-нибудь инструмент? Прежде всего, нужно определить ошибку. Мне приходит на ум одна вещь: если неизвестная линия равна ax+by+c=0, для каждой точки (x0,y0) мы определяем функцию ошибки, подобную следующей:

E=0 if point lays on the correct side of the line.
E= distance(a*x+b*y+c=0,(x0,y0)) = |a*x0+b*y0+c|/sqrt(a^2+b^2)   if the point
   lies on the wrong side.

и минимизируем сумму ошибок. Но не просто, так как есть порог. Если вы, ребята, знаете о какой-либо ссылке или ссылке на подходы, которые решают эту проблему, мы будем признательны. Ура А.

введите здесь описание изображения


person Millemila    schedule 03.06.2013    source источник
comment
Я оставлю это как комментарий, а не как ответ, потому что я мало знаю об этой конкретной проблеме. Я думаю, вам следует попробовать найти машины опорных векторов и разделить гиперплоскость. Кроме того, я думаю, что этот вопрос, вероятно, будет очень быстро перемещен или закрыт, поскольку нет вопроса о программировании.   -  person user327301    schedule 06.06.2013
comment
Почему? на веб-сайте много вопросов: какая линия лучше всего подходит для... как лучше всего найти пересечение между тем и этим... Я не вижу проблемы.   -  person Millemila    schedule 06.06.2013


Ответы (1)


Некоторые ссылки: Википедия линейный классификатор и Машина опорных векторов (SVM),
scikit-learn SVM, пример с 3 классами,
вопросы /tagged/classification на SO,
еще 3000 questions/tagged/classification на stats.stackexchange,
еще 400 questions/tagged/classification на datascience.stackexchange .

Для вашей задачи 2 класса выполните следующие действия:

  1. найти середины Rmid красных точек, Bmid черных, Mid лота

  2. провести линию L от Rmid до Bmid

  3. (гипер)плоскость через Mid, перпендикулярную линии L, — это то, что вам нужно: линейный классификатор.
    Или вы можете просто сравнить расстояния |x — Rmid| и |x - Bmid|: обозначим x ближе Rmid красным, ближе Bmid черным.

Но есть еще что сказать. Проецирование всех точек данных на линию L дает одномерную задачу:

rrrrrrrrrrbrrrrrrrrbbrrr | rrbbbbbbbbbbbbbbb

Рекомендуется нанести все точки на эту линию, чтобы увидеть и лучше понять данные.
(Для облаков точек, скажем, в 5 или 10 измерениях, это может быть интересно и/или информативно. смотреть на 2d или 3d срезы под разными углами.)

Каждый разрез, "|" выше дает «матрицу путаницы» из 4 чисел:

R-correct   R-called-B  e.g.  490   10
B-called-R  B-correct          50  450

Это дает приблизительное представление о частоте ошибок ваших предсказаний красный/черный; распечатайте, обсудите.
Наилучший вариант зависит от затрат, т.е. если назвать R B в 10 или 100 раз хуже, чем назвать B R.

Если красные точки и черные точки имеют разный разброс/ковариацию, см. линейный дискриминант Фишера .

(«SVM» — это жаргон для класса методов «хорошего» разделения гиперплоскостей/гиперповерхностей — «машины» нет.)

person denis    schedule 11.06.2013