К Ближайшему соседу Алгоритм сомнений - PullRequest
7 голосов
/ 29 марта 2009

Я новичок в искусственном интеллекте. Я понимаю K алгоритм ближайшего соседа и как его реализовать. Тем не менее, как вы рассчитываете расстояние или вес вещей, которые не в масштабе?

Например, расстояние по возрасту можно легко вычислить, но как рассчитать, насколько близко красное к синему? Может быть, цвета - плохой пример, потому что вы все еще можете сказать, используйте частоту. Как насчет бургера с пиццей, например, с картофелем фри?

У меня такое ощущение, что есть умный способ сделать это.

Заранее благодарим за внимание.

РЕДАКТИРОВАТЬ: Спасибо всем за очень хорошие ответы. Это действительно помогло, и я ценю это. Но я думаю, что должен быть выход.

Могу ли я сделать это таким образом? Допустим, я использую свой алгоритм KNN, чтобы предсказать человеку, будет ли он или она есть в моем ресторане, который подает все три из вышеуказанных продуктов. Конечно, есть и другие факторы, но для простоты: из 300 человек 150 любят гамбургер, 100 любят пиццу и 50 любят картофель фри. Здравый смысл подсказывает мне, что любимая еда влияет на решение людей о том, есть или нет.

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

Единственная проблема в том, что я использовал вероятность, и я могу ошибаться, потому что я не знаю и, вероятно, не могу рассчитать фактическое расстояние. Я также беспокоюсь о том, что в этой области мой прогноз слишком сильно / слишком мал, потому что расстояние, вероятно, не зависит от других факторов (цены, времени суток, переполнен ли ресторан и т. Д., Что я могу легко измерить), но я думаю, я мог бы обойти это с некоторой настройкой параметров.

О, все дали хороший ответ, но я могу принять только один. В этом случае я просто приму ту, которая получит наибольшее количество голосов завтра. Спасибо всем еще раз.

Ответы [ 7 ]

11 голосов
/ 30 марта 2009

Представляет все продукты питания, для которых вы собираете данные, в виде «измерения» (или столбца в таблице).

Запишите «лайки» для каждого человека, для которого вы можете собирать данные, и поместите результаты в таблицу:

          Burger  |    Pizza  |   Fries   | Burritos |  Likes my food
person1     1     |        0  |       1   |     1    |      1
person2     0     |        0  |       1   |     0    |      0
person3     1     |        1  |       0   |     1    |      1
person4     0     |        1  |       1   |     1    |      0

Теперь, получив нового человека с информацией о некоторых продуктах, которые ему нравятся, вы можете измерить сходство с другими людьми, используя простой показатель, такой как Коэффициент корреляции Пирсона или Косинус Сходство и т. Д.

Теперь у вас есть способ найти K ближайших соседей и принять решение ..

Для получения более подробной информации по этому вопросу ищите «совместную фильтрацию» (но я предупреждаю вас, это математика).

7 голосов
/ 29 марта 2009

Ну, «ближайший» подразумевает, что у вас есть метрика, по которой вещи могут быть более или менее «отдаленными». Количественная оценка «бургеров», «пиццы» и «картофеля фри» - это не столько проблема KNN, сколько фундаментальное моделирование системы. Если у вас есть система, в которой вы проводите анализ, где термины «гамбургер», «пицца» и «картофель фри» являются терминами, то причина существования системы заключается в определении их количественной оценки, например, если вы пытаясь выяснить, как получить лучший вкус и наименьшее количество калорий за определенную сумму денег, то да-да, вы знаете, какие у вас показатели. (Конечно, «лучший вкус» субъективен, но это другой набор вопросов.)

Этим условиям не свойственно иметь количественную оценку и, следовательно, говорить вам, как спроектировать вашу систему анализа; вам решать, чего вы пытаетесь достичь, и разрабатывать метрики оттуда.

5 голосов
/ 29 марта 2009

Это одна из проблем представления знаний в ИИ. Субъективно играет большую роль. Согласитесь ли вы и я, например, на «близость» гамбургера, пиццы и картофеля фри?

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

Ключом может быть попытка определить функцию, с которой вы пытаетесь сравнить. Например, если вы сравнивали свои продукты с точки зрения здоровья, вы можете достичь чего-то более объективного.

2 голосов
/ 29 марта 2009

Если вы посмотрите на «Коллективный разум» , вы увидите, что они присваивают масштаб и значение. Вот как Netflix сравнивает рейтинги фильмов и тому подобное.

Вам нужно будет определить «близость», придумав эту шкалу и назначив значения для каждого.

1 голос
/ 30 марта 2009

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

0 голосов
/ 30 марта 2009

Хорошие ответы. Вы можете просто составить метрику или, как подсказывает Малах, спросить некоторых людей. Чтобы действительно сделать это правильно, похоже, вам нужен байесовский анализ .

0 голосов
/ 29 марта 2009

Нет «лучшего» способа сделать это. В конечном итоге вам нужно придумать произвольный масштаб.

...