Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- num_folds = 5
- k_choices = [1, 3, 5, 8, 10, 12, 15, 20, 50, 100]
- X_train_folds = []
- y_train_folds = []
- ################################################################################
- # ЗАДАНИЕ: #
- # Разделите обучающие данные на папки. После разделения "папки" X_train_folds #
- # и y_train_folds должны быть списками длины num_folds, где #
- # y_train_folds[i] - это вектор меток для примеров из X_train_folds[i]. #
- # Совет: используйте функцию numpy array_split. #
- ################################################################################
- X_train_folds = np.array_split(X_train, num_folds)
- y_train_folds = np.array_split(y_train, num_folds)
- ################################################################################
- # КОНЕЦ ВАШЕГО КОДА #
- ################################################################################
- # Словарь, содержащий точности для разных значений k, которые мы находим
- # при кросс-вылидации. После перекрестной проверки,
- # k_to_accuracies[k] должен быть списком длины num_folds, содержащим разные
- # значения точности, которые мы получили при соотвествующем k.
- k_to_accuracies = {}
- ################################################################################
- # ЗАДАНИЕ: #
- # Выполните кросс-валидацию, чтобы найти наилучшее значение k. Для каждого #
- # возможного значения k, запускайте алгоритм k-ближайшего соседа num_folds раз,#
- # где в каждом случае вы используете для обучения все папки, кроме одной, #
- # которая используется как валидационная. Сохраняйте точность для всех папок и #
- # всех значений k в словаре k_to_accuracies. #
- ################################################################################
- for k in k_choices:
- for fold_i in range(num_folds):
- if fold_i == 0:
- k_to_accuracies[k] = [] # создать пустой список точностей для текущего значения K
- # Разделение данных на обучающий и тестовый наборы для текущего фолда
- # Обучающий набор данных (`X_train_fold_i` и `y_train_fold_i`)
- # формируется путем объединения всех фолдов, кроме текущего фолда
- X_train_fold_i = np.concatenate([X_train_folds[i] for i in range(num_folds) if i != fold_i])
- y_train_fold_i = np.concatenate([y_train_folds[i] for i in range(num_folds) if i != fold_i])
- # тестовый набор данных (`X_test_fold_i` и `y_test_fold_i`) состоит только из текущего фолда.
- X_test_fold_i = X_train_folds[fold_i]
- y_test_fold_i = y_train_folds[fold_i]
- # Создаём экземпляр классификатора KNearestNeighbor и производим обучение на обучающем наборе данных.
- classifier = KNearestNeighbor()
- classifier.train(X_train_fold_i, y_train_fold_i)
- # вызывается метод `predict` классификатора для предсказания меток классов на тестовом наборе данных
- # используя текущее значение K.
- y_pred_fold_i = classifier.predict(X_test_fold_i, k)
- # После получения предсказанных меток классов сравнивается с фактическими метками классов (`y_test_fold_i`)
- # чтобы подсчитать количество правильных предсказаний (`num_correct`)
- num_correct = np.sum(y_pred_fold_i == y_test_fold_i)
- acc = float(num_correct) / y_test_fold_i.shape[0] # Вычисляем точность алгоритма на текущем фолде
- # Текущая точность добавляется в список точностей для текущего значения K
- k_to_accuracies[k].append(acc)
- ################################################################################
- # КОНЕЦ ВАШЕГО КОДА #
- ################################################################################
- # Print out the computed accuracies
- for k in sorted(k_to_accuracies):
- for accuracy in k_to_accuracies[k]:
- print('k = %d, accuracy = %f' % (k, accuracy))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement