Шаг 94.
Задачи ComputerScience на Python.
Простейшие нейронные сети. Задачи классификации. Нормализация данных

    На этом шаге мы приведем текст функции, выполняющей нормализацию.

    Наборы данных, с которыми мы предполагаем работать, обычно требуют некоторой очистки, прежде чем их можно будет ввести в алгоритмы. Очистка может означать удаление посторонних символов и дубликатов, исправление ошибок и другие вспомогательные операции. Вид очистки, которую нужно выполнить для двух наборов данных, с которыми предстоит работать, - это нормализация. Ранее она была сделана с помощью метода zscore_normalize() в классе KMeans (74 шаг). Нормализация - это преобразование атрибутов, записанных в разных масштабах, к единому масштабу.

    Благодаря сигмоидной функции активации каждый нейрон в сети выводит значения в диапазоне 0...1. Логично, что шкала от 0 до 1 будет иметь смысл и для атрибутов в нашем наборе входных данных. Преобразовать шкалу из некоторого диапазона в диапазон 0...1 не составляет груда. Для любого значения V в определенном диапазоне атрибутов с максимальным max и минимальным min значениями формула имеет вид newV = (oldv - min)/(max - min). Эта операция называется масштабированием объектов. Далее представлена реализация формулы на Python, добавленная в файл util.py.

# Будем считать, что все строки одинаковой длины,
# а каждый столбец масштабирован в диапазоне 0 ... 1
def normalize_by_feature_scaling(dataset: List[List[float]]) -> None:
    for col_num in range(len(dataset[0])):
        column: List[float] = [row[col_num] for row in dataset]
        maximum = max(column)
        minimum = min(column)
        for row_num in range(len(dataset)):
            dataset[row_num][col_num] = \
                (dataset[row_num][col_num] - minimum) / (maximum - minimum)
Архив с файлом можно взять здесь.

    Обратите внимание на параметр dataset. Он указывает на список списков, который будет изменен в этой функции. Другими словами, функция normalize_by_feature_scaling() получает не копию набора данных, а ссылку на исходный набор данных. В этом случае мы хотим внести изменения в значение, а не возвратить его измененную копию.

    Обратите также внимание: программа предполагает, что наборы данных являются двумерными списками данных типа float.

    На следующем шаге мы рассмотрим пример использования созданной сети.




Предыдущий шаг Содержание Следующий шаг