2015-11-24 2 views
1

Я занимаюсь классификацией (не кластеризацией). Могу ли я использовать алгоритм kNN для этого? Какова идеальная величина k для тестирования? В некоторых ответах из stackflow я видел, что они советуют использовать квадратный корень из числа функций. Но откуда взялись эти правила? Может кто-то, пожалуйста, помогите мне :)Идеальное значение k в kNN для классификации

+0

@NominSim Я нашел «квадратный корень из числа функций» из вашего ответа :), пожалуйста, помогите мне –

ответ

0

В общем понятии, к выбирается SQRT (п), где п является число данных точек , а не функции. Но единственный способ проверить вашу модель - ошибка в тестовых данных.

То, что я вообще есть, выбрать несколько случайных точек данных из набора данных, а затем найти к ближайших соседей для them.Count числа соседей с различными классами от выбранного point.If количество соседи с разными классами слишком велики, затем измените значение k.

+0

Я использую проверку на 10 краев. У меня 93 функции из 1000 пользователей. Какова стоимость n в соответствии с моим сценарием? –

+0

1000 пользователей означает 1000 строк в вашем наборе данных, ryt? Тогда n равно 1000. Кстати, это не какое-то жесткое правило для k. U должен попробовать то, что я упомянул в ответе, начиная со значения sqrt (n) и соответствующим образом изменить значение. –

+1

не n = количество точек данных в данных обучения? Если дело не в n = 900 (потому что я использую 10-кратное перекрестное подтверждение) –

1

Лучший K - это тот, который дает вам лучшую производительность, учитывая набор данных и то, как он обобщает невидимые данные.

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

K должен определенно быть ниже, чем (#samples - 1), потому что в этом случае все образцы подключены, и тогда метки с самыми высокими образцами обучения будут предсказаны для всех немаркированных образцов.

Если k равно 1, мы говорим, что метка немеченого образца (тестовый/невидимый образец) должна быть равна метке самого похожего образца.

Вы должны выбрать очень низкий K (скажем 1), если вы очень уверены в своих возможностях, и знаете, что наиболее похожий образец обучения достаточно хорош для предсказания.

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

Это похоже на то, что вам нравится несколько экспертов, чтобы голосовать за что-то или все люди голосуют за что-то.

Как правильно выбрать K для решения этой проблемы? Вы должны убрать часть своих данных для набора разработчика. Перебирайте различные значения K (например, от 1 до # samples-1) и посмотрите, какой из них дает лучший результат.

Однако эмпирическое правило состоит в том, что если количество выборок достаточно велико (например, 10X количество функций), то квадратный корень из числа функций должен быть хорошим исходным предположением, но вам нужно перевернуть различные значения K и посмотреть, какой из них лучше для вас.

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

Не забудьте масштабировать свои значения, чтобы все они находились между 0 и 1 (нормализация).

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

Я бы рекомендовал использовать scikit-узнать-х К ближайшему реализации соседа here

+0

Как и в вашем ответе, наилучшее значение k для начала - это квадратный корень из числа функций или количества точек в наборе данных обучения? :) У меня 93 функции из 1000 пользователей. Можете ли вы сказать мне, какую ценность я должен учитывать, чтобы получить квадратный корень :) –

+0

PS: Я использую 10-кратное подтверждение перекрестка –

+0

Я бы сказал, попробуйте 2^0, 2^1, 2^2, 2^3, 2^4 , 2^5 и 2^6 и проверить каждый из выступлений, затем выбрать наиболее эффективный. Говорят, они используют нечетное число для K, так что для каждого района вы можете получить большинство голосов. Если ваш график не является двоичным (весы ребра не равны 0 и 1, что случается, когда вы используете сходство с косинусом образцов), вам не нужно выбирать нечетное число соседей. – Ash

Смежные вопросы