Регрессия Knn в R

Я изучаю методы регрессии Knn, а затем сглаживание ядра. Я хочу продемонстрировать эти методы, используя графики в R. Я создал набор данных, используя следующий код:

x = runif(100,0,pi)
e = rnorm(100,0,0.1)
y = sin(x)+e

Я пытался следовать описанию использования knn.reg в 9.2 здесь: https://daviddalpiaz.github.io/r4sl/k-nearest-neighbors.html#regression

grid2=data.frame(x)
knn10 = FNN::knn.reg(train = x, test = grid2, y = y, k = 10)

Мои предсказанные значения кажутся мне разумными, но когда я пытаюсь построить линию с ними поверх моего графика x ~ y, я не получаю того, на что надеюсь.

plot(x,y)
lines(grid2$x,knn10$pred)

RPlot

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


person Ben    schedule 23.12.2017    source источник
comment
Каков ожидаемый результат?   -  person Roman Luštrik    schedule 23.12.2017


Ответы (1)


Вам просто нужно отсортировать значения x перед построением линий.

plot(x,y)
ORD = order(grid2$x)
lines(grid2$x[ORD],knn10$pred[ORD])

введите здесь описание изображения

person G5W    schedule 23.12.2017
comment
Это сработало отлично. Но есть ли причина, по которой эти значения необходимо упорядочивать? Я неправильно использовал другие функции или это просто дополнительный промежуточный шаг? - person Ben; 23.12.2017
comment
Их нужно только заказать, чтобы нарисовать график. lines будет рисовать линии между указанными вами точками. Если вы используете точки не по порядку, это (как вы видели) будет рисовать линии вперед и назад по экрану. - person G5W; 23.12.2017