2017-05-24 45 views
0

我想学习如何在R请勿KNN,并在练习从包nycflights13航班数据集。我得到运行的错误下面的代码说KNN误差航班数据集

“训练”和“阶级”具有不同的长度

我的代码:

library(nycflights13) 
library(class) 


deparr <- na.omit(flights[c(4, 7, 16)]) 

classframe <- deparr[3] 

flights %>% ggvis(~dep_time, ~arr_time, fill = ~distance) %>% layer_points() 

set.seed(1234) 

ind <- sample(2, nrow(deparr), replace=TRUE, prob=c(0.67, 0.33)) 

flights.training <- deparr[ind==1, 1:2] 
flights.test <- deparr[ind==2, 1:2] 
flights.trainlabels <- deparr[ind==1, 3] 
flights.testlabels <- deparr[ind==2, 3] 

predictions <- knn(train = flights.training, test = flights.test, cl = flights.trainlabels[,1], k = 3) 
+1

你明白你为什么这样做,你正在做的事情?你有两个不同的数据框。尝试'> STR(flights.training)' 班“tbl_df”,“TBL”和 'data.frame':\t 219806 OBS。 2个变量: $ dep_time:int 517 533 542 544 554 555 557 557 558 558 ... $ arr_time:int 830 850 923 1004 740 913 709 838 753 853 ... '> str(flights.test)'' 班 'tbl_df', 'TBL' 和 'data.frame':\t 108257 OBS。 $ dep_time:2个变量的诠释554 558 558 559 608 613 615 627 629 629 ... $ arr_time:整数812 849 923 702 807 925 1039 1018 824 721 ... –

+0

感谢肖恩。不幸的是,我仍然和以前一样困惑。对不起,我对这个东西有点慢。 – madhatter5

+0

我应该提到,从来没有使用过类框架。我之前使用过它,但后来改变了东西 – madhatter5

回答

1

这里是划分了火车码基于百分比的测试集。如果你想以不同的方式拆分这两个子集,你应该能够从中得到解决,但它证明了它的工作原理。

deparr <- na.omit(flights[c(4, 7, 16)]) 
set.seed(1234) 

# prepare to divide up the full dataset into two groups, 65%/35% 
n <- nrow(deparr) 
train_n <- round(0.65 * n) 

# randomize our data 
deparr <- deparr[sample(n)] 

# split up the actual data. We will use these as inputs to knn 
flights.train <- deparr[1:train_n, ] 
flights.test <- deparr[(train_n + 1):n, ] 

# target variable, $distance, is in column 3, so exclude from train and test 
predictions <- knn(train = flights.train[, 1:2], test = flights.test[, 1:2], cl = flights.train$distance, k = 10) 

此运行,我得到的结果:

> str(predictions) 
Factor w/ 209 levels "80","94","96",..: 121 159 18 54 207 18 94 55 159 136 ... 
+0

Ahhhhh。谢谢! – madhatter5