Нашли ошибку?

Признаки в одном масштабе

ЛёгкаяДописатьГлава 10

#k ближайших соседей#извлечение признаков#нормализацияid: ga-normalize-features

Если один признак измеряется в метрах, а другой — в тысячах рублей, расстояние почти целиком определяет второй. Чтобы признаки весили одинаково, их приводят к одному масштабу. Допишите normalize(rows): функция приводит каждый столбец к отрезку [0, 1] по формуле (x − min) / (max − min). Столбец, где все значения равны, становится нулевым. Пропуски помечены # TODO.

Пример

normalize([[50, 3000], [70, 5000], [60, 4000]])
# [[0.0, 0.0], [1.0, 1.0], [0.5, 0.5]]

Правила

Решение

def normalize(rows: list[list[float]]) -> list[list[float]]:
    """Min-max нормализация каждого столбца к отрезку [0, 1]."""
    if not rows:
        return []
    columns = len(rows[0])
    # TODO: минимум и максимум каждого столбца
    mins = [0.0] * columns
    maxs = [1.0] * columns
    result = []
    for row in rows:
        new_row = []
        for j, x in enumerate(row):
            # TODO: нормализованное значение (0.0, если столбец постоянный)
            new_row.append(x)
        result.append(new_row)
    return result

Можно решать и в своём редакторе: «Скопировать с тестами» и запустите python3 normalize_features.py — тесты те же, результат покажет ✓ / ✗ и итог.