R knn большой набор данных - PullRequest
5 голосов
/ 22 ноября 2011

Я пытаюсь использовать knn в R (использовал несколько пакетов (knnflex, class)), чтобы предсказать вероятность дефолта на основе 8 переменных. Набор данных составляет около 100 тыс. Строк из 8 столбцов, но моя машина, похоже, испытывает трудности с выборкой из 10 тыс. Строк. Любые предложения для выполнения knn на наборе данных> 50 строк (то есть iris)?

EDIT:

Для уточнения есть пара вопросов.

1) Примеры в пакетах class и knnflex немного неясны, и мне было любопытно, была ли какая-то реализация, похожая на пакет randomForest, где вы предоставляете ему переменную, которую вы хотите предсказать, и данные, которые хотите использовать для обучения модели:

RF <- randomForest(x, y, ntree, type,...) 

затем развернитесь и используйте модель для прогнозирования данных, используя набор тестовых данных:

pred <- predict(RF, testData)

2) Я не совсем понимаю, почему knn хочет обучить И проверить данные для построения модели. Из того, что я могу сказать, пакет создает матрицу ~ до nrows(trainingData)^2, которая также является верхним пределом размера прогнозируемых данных. Я создал модель, используя 5000 строк (выше этого я получил ошибки выделения памяти) и не смог предсказать наборы тестов> 5000 строк. Таким образом, мне нужно либо:

а) найти способ использовать> 5000 строк в тренировочном наборе

или

б) найти способ использовать модель на полных 100 тыс. Строк.

1 Ответ

8 голосов
/ 22 ноября 2011

Причина, по которой knnклассе ) запрашивает и данные обучения, и тестовые данные, заключается в том, что в противном случае «модель», которую она вернет, будет просто самими данными обучения.

Данные обучения - это модель.

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

Пакет ipred предоставляет функции, которые выглядят структурированными, как вы описываете, но если вы посмотрите на них, вы 'Вы увидите, что в функции «обучение» в принципе ничего не происходит.Вся работа находится в функции «предсказать».И они действительно предназначены для использования в качестве обёрток для оценки ошибок с использованием перекрестной проверки.

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

Функция knn в class отлично работает для меня с наборами данных для тренировок и испытаний по 10 000 строк или более, хотя у меня 8 ГБ ОЗУ.Кроме того, я подозреваю, что knn в классе будет быстрее, чем в knnflex , но я не проводил обширных испытаний.

...