Advertisement
MARSHAL327

cross-validation

Dec 26th, 2023
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. num_folds = 5
  2. k_choices = [1, 3, 5, 8, 10, 12, 15, 20, 50, 100]
  3.  
  4. X_train_folds = []
  5. y_train_folds = []
  6. ################################################################################
  7. # ЗАДАНИЕ: #
  8. # Разделите обучающие данные на папки. После разделения "папки" X_train_folds #
  9. # и y_train_folds должны быть списками длины num_folds, где #
  10. # y_train_folds[i] - это вектор меток для примеров из X_train_folds[i]. #
  11. # Совет: используйте функцию numpy array_split. #
  12. ################################################################################
  13.  
  14. X_train_folds = np.array_split(X_train, num_folds)
  15. y_train_folds = np.array_split(y_train, num_folds)
  16.  
  17. ################################################################################
  18. # КОНЕЦ ВАШЕГО КОДА #
  19. ################################################################################
  20.  
  21. # Словарь, содержащий точности для разных значений k, которые мы находим
  22. # при кросс-вылидации. После перекрестной проверки,
  23. # k_to_accuracies[k] должен быть списком длины num_folds, содержащим разные
  24. # значения точности, которые мы получили при соотвествующем k.
  25. k_to_accuracies = {}
  26.  
  27.  
  28. ################################################################################
  29. # ЗАДАНИЕ: #
  30. # Выполните кросс-валидацию, чтобы найти наилучшее значение k. Для каждого #
  31. # возможного значения k, запускайте алгоритм k-ближайшего соседа num_folds раз,#
  32. # где в каждом случае вы используете для обучения все папки, кроме одной, #
  33. # которая используется как валидационная. Сохраняйте точность для всех папок и #
  34. # всех значений k в словаре k_to_accuracies. #
  35. ################################################################################
  36.  
  37. for k in k_choices:
  38. for fold_i in range(num_folds):
  39. if fold_i == 0:
  40. k_to_accuracies[k] = [] # создать пустой список точностей для текущего значения K
  41.  
  42. # Разделение данных на обучающий и тестовый наборы для текущего фолда
  43.  
  44. # Обучающий набор данных (`X_train_fold_i` и `y_train_fold_i`)
  45. # формируется путем объединения всех фолдов, кроме текущего фолда
  46. X_train_fold_i = np.concatenate([X_train_folds[i] for i in range(num_folds) if i != fold_i])
  47. y_train_fold_i = np.concatenate([y_train_folds[i] for i in range(num_folds) if i != fold_i])
  48.  
  49. # тестовый набор данных (`X_test_fold_i` и `y_test_fold_i`) состоит только из текущего фолда.
  50. X_test_fold_i = X_train_folds[fold_i]
  51. y_test_fold_i = y_train_folds[fold_i]
  52.  
  53. # Создаём экземпляр классификатора KNearestNeighbor и производим обучение на обучающем наборе данных.
  54. classifier = KNearestNeighbor()
  55. classifier.train(X_train_fold_i, y_train_fold_i)
  56.  
  57. # вызывается метод `predict` классификатора для предсказания меток классов на тестовом наборе данных
  58. # используя текущее значение K.
  59. y_pred_fold_i = classifier.predict(X_test_fold_i, k)
  60.  
  61. # После получения предсказанных меток классов сравнивается с фактическими метками классов (`y_test_fold_i`)
  62. # чтобы подсчитать количество правильных предсказаний (`num_correct`)
  63. num_correct = np.sum(y_pred_fold_i == y_test_fold_i)
  64. acc = float(num_correct) / y_test_fold_i.shape[0] # Вычисляем точность алгоритма на текущем фолде
  65.  
  66. # Текущая точность добавляется в список точностей для текущего значения K
  67. k_to_accuracies[k].append(acc)
  68.  
  69.  
  70. ################################################################################
  71. # КОНЕЦ ВАШЕГО КОДА #
  72. ################################################################################
  73.  
  74. # Print out the computed accuracies
  75. for k in sorted(k_to_accuracies):
  76. for accuracy in k_to_accuracies[k]:
  77. print('k = %d, accuracy = %f' % (k, accuracy))
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement