На рисунке ниже показано 7 точек вокруг начала координат. Один из них был выбран человеком на основе правил и опыта и окрашен в красный цвет (тот, что в левом нижнем квадранте).
Теперь у нас есть более 1000 таких наборов точек, и для каждого набора человек выбрал одну точку. Эти условия распространяются на все комплекты:
- Каждый набор имеет около 3 - 10 баллов
- Там нет никаких выбросов
- Точки могут иметь положительные и отрицательные значения
- При выборе точки ошибок не было
Мой вопрос: существует ли алгоритм машинного обучения, чтобы учиться на этих наборах и сделанных человеком выборках, чтобы он мог автоматически решать, какую точку выбирать, когда дается новый набор точек? Конечно, этот новый набор удовлетворяет первым 3 условиям сверху.
2 заключительных замечания:
- Приведенный мною пример - это просто случайный пример, созданный мной, чтобы поддержать идею о точках на плоскости вокруг начала координат вместе с выбранной. В реальной жизни может быть больше структуры, но сейчас мне любопытно, и я хотел бы знать, что возможно для этого случая.
- Будут ли возможны вариации? Скажем, это около 2 выбранных точек или у вас есть круги с заданным радиусом вместо точек.
machine-learning
Elmex80s
источник
источник
Ответы:
Это увлекательная проблема! Две вещи делают это особенно сложным:
age
иheight
(в сантиметрах). Каждый образец имеет одну запись для каждого, и, конечно(age, height) = (22, 180)
, не то же самое, что(age, height) = (180, 22)
. Ни то, ни другое не верно в вашей проблеме. Набор точек имеет от 3 до 10 точек, и порядок, в котором мы вводим точки, не должен иметь значения при сравнении двух наборов точек.Позвольте мне изложить алгоритм, который решает обе проблемы. Точность прогноза не очень хорошая; но, может быть, вы видите способ, как это можно улучшить. И, по крайней мере, это что-то предсказывает , верно?
1. Имитация образцов
Чтобы проверить алгоритм, я написал функции, которые генерируют образцы и метки.
Генерация образцов: Каждый образец содержит от 3 до 10 баллов. Количество точек является случайным, взятым из равномерного распределения. Каждая точка имеет форму
(x_coordinate, y_coordinate)
. Координаты снова случайные, взятые из нормального распределения.Создание меток. В качестве примера для игрушки предположим, что правило выбора точки: всегда выбирайте точку, наиболее близкую к точке
(0, 0)
, где «ближайшую» следует понимать с точки зрения евклидовой нормы.Теперь мы можем создавать наши поезда и тестовые наборы:
2. Сравнение наборов точек через расстояние Хаусдорфа
Давайте рассмотрим первую проблему: как мы должны сравнивать различные наборы точек? Количество точек в наборах точек отличается. Также помните, что порядок, в котором мы записываем точки, не должен иметь значения: сравнение с набором точек
[(0,0), (1,1), (2,2)]
должно давать тот же результат, что и сравнение с набором точек[(2,2), (0,0), (1,1)]
. Мой подход состоит в том, чтобы сравнить наборы точек по их расстоянию Хаусдорфа :3. Прогнозирование через k-ближайших соседей и усреднение
Теперь у нас есть понятие расстояния между наборами точек. Это позволяет использовать классификацию k-ближайших соседей: учитывая набор контрольных точек, мы находим
k
наборы точек в нашей обучающей выборке, которые имеют наименьшее расстояние Хаусдорфа относительно набора контрольных точек, и получаем их метки. Теперь возникает вторая проблема: как превратить этиk
метки в прогноз для набора контрольных точек? Я выбрал самый простой подход: усреднить метки и предсказать точку в наборе контрольных точек, которая является ближайшей к средней.4. Тестирование
Все готово для проверки производительности нашего алгоритма.
Для данной функции принятия решения и
num_neighbors = 70
мы получаем точность прогноза 84%. Это не очень хорошо, и это, конечно, специфично для нашей функции принятия решений, которая, как представляется, довольно легко предсказать.Чтобы увидеть это, определите другую функцию принятия решения:
Использование этой функции через
dec_fun = decision_function_maxaverage
снижает точность прогноза до 45%. Это показывает, насколько важно думать о правилах принятия решений, которые генерируют ваши ярлыки. Если у вас есть идея, почему люди выбирают определенные моменты, это поможет вам найти лучший алгоритм.Некоторые способы улучшить этот алгоритм: (1) использовать другую функцию расстояния вместо расстояния Хаусдорфа, (2) использовать что-то более сложное, чем k-ближайшие соседи, (3) улучшить то, как выбранные метки обучения превращаются в предсказание.
источник
Вот несколько способов использования нейронных сетей для решения этой проблемы:
С простой нейронной сетью прямой связи:
С сверточной нейронной сетью:
CNN может работать лучше, так как ваши данные по своей природе пространственные. Однако вы должны решить, что делать, если два или более точек перекрываются. Самое простое решение - выбрать один случайным образом, что может быть хорошо в зависимости от вашей конкретной задачи.
С рекуррентной нейронной сетью:
Да, это так же просто, как с RNN! Они хорошо обрабатывают входные данные переменной длины, но им все еще не хватает преимуществ CNN для обработки пространственных данных.
Предостережения:
При использовании FNN или RNN также существует вопрос о том, как вы упорядочиваете свои входные данные. Если в ваших реальных данных нет собственного порядка, мы не хотим, чтобы наша сеть делала разные прогнозы для одних и тех же данных, закодированных в разных порядках. Один из способов справиться с этим - с помощью дополнения данных : дублируйте каждый обучающий пример несколько раз с разными порядками ввода, так что, надеюсь, ваша сеть сможет изучить соответствующие симметрии.
Если бы у вас было время попробовать один подход, я бы выбрал CNN. CNN предназначены для работы с пространственными данными, и нет проблем с порядком ввода.
источник
(0,0), (1,1), (2,2)
будет иметь другой эффект, чем подача ему набора точек(1,1), (2,2), (0,0)
.