K алгоритм ближайшего соседа

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

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

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

заранее спасибо за ваше внимание.

EDIT: спасибо всем за очень хорошие ответы. Это действительно помогло, и я ценю это. Но я думаю, что должен быть выход.

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

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

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

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

7 ответов


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

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

          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 ближайших соседей и принять какое-то решение..

для получения более подробной информации об этом, посмотрите "коллаборативная фильтрация" (но я предупреждаю вас, он получает math-y).


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

Это не до этих терминов, чтобы иметь присущую количественность и тем самым рассказать вам, как проектировать свою систему анализа; это до вас, чтобы решить, что вы пытаетесь достичь и проектировать метрики оттуда.


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

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

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


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

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


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


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


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