Глава 2. Приступим: простая линейная регрессия в TensorFlow.js
93
ный корень от 85,58 равен примерно 9,25. Следовательно, можно утверждать,
что наша (константная) оценка будет смещена (вниз или вверх) примерно на
9,25. А поскольку суммы здесь указываются в тысячах долларов США (согласно
табл. 2.1), то при константном прогнозе мы ошибемся примерно на $9250. Если
подобная погрешность для нашего приложения допустима, можно на этом и оста
новиться! Грамотный специалистпрактик по машинному обучению знает, когда
лучше избежать ненужных усложнений. Но пусть наше приложение — оценщик
стоимости недвижимости должно выдавать более близкие оценки. Попробуем
подогнать линейную модель к нашим данным и посмотрим, получится ли у нас
MSE лучше 85,58.
2.3.5. Небольшое отступление: нормализация данных
В данных о бостонской недвижимости можно видеть широкий разброс значений при
знаков. Значения NOX находятся в диапазоне от 0,4 до 0,9, а TAX — от 180 до 711.
При подгонке линейной регрессии оптимизатор пытается найти такой весовой
коэффициент для каждого признака, чтобы сумма признаков, умноженных на
веса, примерно равнялась стоимости недвижимости. Напомним, что в поиске этих
весовых коэффициентов оптимизатор следует за градиентом в пространстве весов.
И если масштаб отдельных признаков сильно отличается от масштаба прочих, то
некоторые веса окажутся намного «чувствительнее» других. Очень малое переме
щение в одном направлении будет менять выходной сигнал намного сильнее очень
большого перемещения в другом. Это может привести к неустойчивости и сильно
затруднить подгонку модели.
В качестве контрмеры необходимо сначала
нормализовать
(normalize) данные.
То есть масштабировать признаки до нулевого среднего значения и единичного
среднеквадратичного отклонения. Подобная разновидность нормализации встреча
ется очень часто, ее иногда называют
стандартизованным преобразованием
(standard
transformation) или
нормализацией по z-оценке
(zscore normalization). Алгоритм
очень прост — сначала вычисляется среднее значение каждого признака, вычитается
из его исходного значения, в результате чего среднее значение признака становится
равно 0. Далее вычисляется отношение признака (с уже вычтенным средним зна
чением) к его среднеквадратичному отклонению. В псевдокоде это выглядит так:
нормализованный_признак = (признак – среднее_значение(признак)) /
среднеквадратичное_отклонение(признак)
Например, нормализованная версия признаков
[10,
20,
30,
40]
будет равна при
близительно
[-1.3,
-0.4,
0.4,
1.3]
, явно с нулевым средним значением; и на глаз
среднеквадратичное отклонение также около 1. В примере с ценами на бостонскую
недвижимость код нормализации вынесен в отдельный файл
normalization.js
,
содержимое которого приведено в листинге 2.9. В нем приводятся две функции,
одна для вычисления среднего значения и среднеквадратичного отклонения на
основе передаваемого тензора второго ранга, а вторая — для нормализации тензора
на основе переданных в нее среднего значения и среднеквадратичного отклонения.
Do'stlaringiz bilan baham: |