Мой подход заключается в изучении данных: как бы я разделил точки в проблеме XOR?Когда я начал изучать ML в целом и SVM в частности, то, что я и сделал, взял задачу с игрушкой, нарисовал ее от руки и попытался разделить классы.
Когда я посмотрел на проблему XOR, первыеВ то время мне пришло в голову, что обе фиолетовые точки (внизу слева) имеют X и Y одного и того же знака, в одном случае отрицательный в одном положительном, тогда как обе зеленые точки имеют X и Y противоположных знаков.Следовательно, квадратичная сумма X и Y будет 0 (или очень мала с небольшим шумом в исходной задаче) для зеленых точек и 2 (или почти 2) для фиолетовых.Следовательно, добавление третьей координаты Z = np.sqrt(np.square(X + Y))
приятно разделит два набора:
На примечании стороны, Z
не слишком отличается от формулировки rbf Дуга , если учесть, что np.sqrt(np.square(X + Y))
в сущности совпадает с np.abs(X + Y)
в этом случае.
У меня нет доступа кБумага Кризитанини, но я бы тоже подошел к этой проблеме аналогичным образом, начиная с игрушечной версии (кстати, код шахматной доски , благодаря чему-либо, кроме doug ):
Возможная интуиция здесь заключается в том, что сумма индексов строк и столбцов для черных квадратов будет всегда четной, тогда как для белых квадратов будет всегда нечетной,поэтому добавление в качестве третьего измерения чего-то вроде (row_index + col_index) % 2
поможет в этой простой версии.В большом, более сложном наборе данных шахматной доски, как я нашел в Интернете:
все не так просто, но, возможно, можно было бы каскаднокластеризация, чтобы найти средние координаты X и Y для 16 кластеров (возможно, с использованием кластеризация медоидов ), а затем применить версию «трюка с модулем ядра»?
С заявлением об отказе, которое я имеюне работал с кучей классификационных проблем, поэтому я обнаружил, что, делая игрушечную версию сложной, я обычно получал «численную» интуицию относительно того, какое решение может работать.
* 1045Наконец, как написано в комментарии к ответу Дуга, я не нахожу ничего плохого в эмпирическом подходе
, таком как его , изучающем производительность всех возможных ядер путем передачи их в поиск по сетке во вложенной перекрестной проверке с помощьюТот же алгоритм (SVC) и изменение только ядра.Вы можете добавить к этому подходу, построив соответствующие поля в преобразованных пространственных объектах: например, для rbf, используя уравнение, предложенное Дагом (и процедуру Себастьяна Рашки для построения областей решения -
ячейка 13 здесь ).
ОБНОВЛЕНИЕ 27 октября / 17 В разговоре на моем слабом канале другой геофизик спросил меня о случае, когда ворота XOR имеют вид 0 и 1, а не -1 и 1.(последнее похоже на классическую проблему в разведочной геофизике, отсюда и мой первоначальный игрушечный пример).
Если бы я взялся за ворота XOR с 0 и 1, и не имел в своем распоряжении знания о rbfЯдро, в этом случае я бы тоже сидел и смотрел на проблему с точки зрения координат этих проблем и смотрел, смогу ли я придумать преобразование.
Мое первое наблюдение здесь состояло в том, что Os располагаются на линии x=y
, X на линии x=-y
, поэтому разница x-y
будет 0 (или небольшим с небольшим шумом) в случае, +/- 1 в другом, соответственно.Абсолютное значение будет заботиться о знаке, следовательно, Z = np.abs(X-Y)
будет работать.Что, кстати, очень похоже на Дуга rbf = np.exp(-gamma * np.abs(x - y)**2)
(еще одна причина, чтобы поднять свой ответ);и на самом деле его rbf - более общее решение, работающее во всех случаях XOR.