2017-12-23 37 views
3

Ich untersuche Knn Regression Methoden und später Kernel Smoothing. Ich mag mit diesen Methoden Plots in R. zeigen, habe ich einen Datensatz mit dem folgenden Code erzeugt:Knn Regression in R

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

Ich habe versucht, eine Beschreibung zu folgen, wie „knn.reg“ zu verwenden, hier in 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) 

Meine vorhergesagten Werte mir vernünftig erscheinen, aber wenn ich versuche, mit ihnen eine Linie zu zeichnen auf meinem x ~ y-Plot ich nicht bekommen, was ich gehofft.

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

RPlot

Ich fühle mich wie ich offensichtlich etwas fehlt bin und würde wirklich zu schätzen jede Hilfe oder Beratung anbieten können, wir danken Ihnen für Ihre Zeit.

+0

Was ist die erwartete Ausgabe? –

Antwort

2

Sie müssen nur die X-Werte sortieren, bevor Sie die Linien zeichnen.

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

enter image description here

+0

Das hat perfekt funktioniert. Aber gibt es einen Grund, warum diese Werte bestellt werden sollten? Habe ich die anderen Funktionen nicht richtig benutzt oder ist das nur ein zusätzlicher Zwischenschritt? – Ben

+0

Sie müssen nur bestellt werden, um das Diagramm zu zeichnen. "Linien" zeichnen Linien zwischen den Punkten, die Sie ihm geben. Wenn Sie die Punkte nicht in der richtigen Reihenfolge verwenden, ziehen Sie (wie Sie gesehen haben) Linien über den Bildschirm vor und zurück. – G5W