R语言 缺失值NaN

bogh5gae  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(404)

请帮助我,有一个错误,当我试图使输出与测试数据10%(训练数据90)与1000倍的模拟。

  1. #pemanggilan paket yang digunakan
  2. library(caret)
  3. library(KernelKnn)
  4. #perhitungan akurasi prediksi dengan 100 kali simulasi
  5. sim = function(B, p1, k1)
  6. {
  7. hasileu = matrix(0, B, 4)
  8. for (i in 1:B)
  9. {
  10. #memanggil data boston
  11. boston = MASS::Boston
  12. #membagi data train dan data test
  13. indexes = createDataPartition(boston$medv, p = p1, list = F)
  14. train = boston[indexes, ]
  15. test = boston[-indexes, ]
  16. train_x = train[, -14]
  17. train_x = scale(train_x)[,]
  18. train_y = train[,14]
  19. test_x = test[, -14]
  20. test_x = scale(test[,-14])[,]
  21. test_y = test[,14]
  22. #model prediksi regresi KNN
  23. pred1 = KernelKnn(train_x, TEST_data = test_x, train_y, k = k1, method = 'euclidean', weights_function = NULL, regression = T)
  24. #perhitungan akurasi
  25. mse = mean((test_y - pred1)^2)
  26. mae = mean(abs(test_y - pred1))
  27. rmse = sqrt(mse)
  28. mape = mean(abs((test_y - pred1)/test_y))
  29. r2 = cor(test_y, pred1)^2
  30. hasileu[i,1] = rmse
  31. hasileu[i,2] = mape
  32. hasileu[i,3] = mae
  33. hasileu[i,4] = r2
  34. }
  35. return(apply(hasileu, 2, mean))
  36. }
  37. #penentuan rentang nilai K
  38. hitung.variasi.k = function(B,p,K)
  39. {
  40. has11 = matrix(0,K,4)
  41. for (i in 1:K)
  42. {
  43. has11[i,] = sim(B,p,i)
  44. }
  45. has11
  46. }
  47. #hasil akurasi berbagai proporsi data uji
  48. K = 10
  49. has11 = hitung.variasi.k(1000, 0.9,K)
  50. Error in KernelKnn(train_x, TEST_data = test_x, train_y, k = k1, method = "euclidean", :
  51. the TEST_data includes missing values
blmhpbnm

blmhpbnm1#

下面的代码使用tryCatch捕获“error”并继续执行到最后。

  1. library(caret)
  2. library(KernelKnn)
  3. #perhitungan akurasi prediksi dengan 100 kali simulasi
  4. sim = function(B, p1, k1)
  5. {
  6. hasileu = matrix(0, B, 4)
  7. for (i in 1:B)
  8. {
  9. #memanggil data boston
  10. boston = MASS::Boston
  11. #membagi data train dan data test
  12. indexes = createDataPartition(boston$medv, p = p1, list = F)
  13. train = boston[indexes, ]
  14. test = boston[-indexes, ]
  15. train_x = train[, -14]
  16. train_x = scale(train_x)[,]
  17. train_y = train[,14]
  18. test_x = test[, -14]
  19. test_x = scale(test[,-14])[,]
  20. test_y = test[,14]
  21. errorFlag=0
  22. #model prediksi regresi KNN
  23. pred1 =tryCatch(
  24. KernelKnn(train_x, TEST_data = test_x, train_y, k = k1, method = 'euclidean', weights_function = NULL, regression = T)
  25. , error=function(e)
  26. { print(e); print(paste("error at loop", i));errorFlag<<-1;}
  27. )
  28. if (errorFlag==0)
  29. {
  30. #perhitungan akurasi
  31. mse = mean((test_y - pred1)^2)
  32. mae = mean(abs(test_y - pred1))
  33. rmse = sqrt(mse)
  34. mape = mean(abs((test_y - pred1)/test_y))
  35. r2 = cor(test_y, pred1)^2
  36. hasileu[i,1] = rmse
  37. hasileu[i,2] = mape
  38. hasileu[i,3] = mae
  39. hasileu[i,4] = r2
  40. }
  41. }
  42. return(apply(hasileu, 2, mean))
  43. }
  44. #penentuan rentang nilai K
  45. hitung.variasi.k = function(B,p,K)
  46. {
  47. has11 = matrix(0,K,4)
  48. for (i in 1:K)
  49. {
  50. has11[i,] = sim(B,p1=p,k1=i)
  51. }
  52. return(has11)
  53. }
  54. #hasil akurasi berbagai proporsi data uji
  55. K = 10
  56. has11 = hitung.variasi.k(B=1000, p=0.9,K=10)
展开查看全部

相关问题