Nearest_Centroid <- function(X_train, X_test, Y_train){
names(X_test) = names(X_train)
results = matrix(0, nrow(X_test), 10)
indexindex = list(c(), c(), c(), c(), c(), c(), c(), c())
neighbors = list(c(), c(), c(), c(), c(), c(), c(), c())
for(i in 1:10){
indexindex[[i]] <- X_train[which(Y_train == (i-1)), ]
neighbors[[i]] <- get.knnx(indexindex[[i]], X_test, k=10, algorithm=c("kd_tree"))$nn.index[,-1]
}
for(i in 1:nrow(X_test)){
point_mat <- matrix(0, 10, 10)
for(k in 1:10){
for(l in 1:10){
candidate = apply(indexindex[[l]][neighbors[[l]],], 2, mean)
point_mat[l, k] = sqrt(sum((X_test[i,] - candidate)^2))
}
results[i, k] = max(which(point_mat[, k] == min(point_mat[,k]))) - 1
}
}
return(results)
}
dd <- Nearest_Centroid(train[,-257], test[,-257], train[, 257])
Я понимаю, что нахождение ближайших соседей занимает некоторое время, но поезд - это всего лишь матрица 7290X256, а тест - только матрица 2007x256.У меня был этот код работает в течение двух дней.По моей приблизительной оценке, он должен был закончиться за ночь (я сократил тест до строк 1:20, и это заняло около минуты, это то, что я использовал для своей «грубой оценки»)
(Мои данные - USPSнабор данных распознавателя цифр (аналог MNSIST)
Я написал ту же функцию на python, и она завершилась через несколько часов.Я делаю что-то не так?
-Travasaurus-Rex
РЕДАКТИРОВАТЬ: Я сделал цикл для измерения времени выполнения для нескольких выбранных точек.Я превратил их в небольшую линейную модель и обнаружил, что ожидаемое время выполнения контрольных точек 2007 года должно составлять около 1,8 часа.(что близко соответствует моему коду Python)