Оптимизация непрерывных элементов путем выбора правильного инструмента.

Что такое скейлер?

Средство масштабирования функций - это обучающий инструмент, который позволяет лучше обучать данные с помощью линейной алгебры. Некоторые целевые функции сильно зависят от них и фактически не будут работать должным образом без надлежащего масштабирования. При обработке данных масштабирование признаков также называется «нормализацией данных», и эта нормализация обычно выполняется на этапах обработки и очистки.

Масштабирующие устройства используются исключительно для непрерывных объектов, так как целью масштабатора является снижение дисперсии данных, чтобы большая часть прогнозов лежала в области с наибольшим объемом данных. Кроме того, использование скалеров определенно может повысить вашу точность.

Многие люди не осознают, сколько на самом деле существует скейлеров. Это связано с тем, что обычно скейлеры нормализации z-показателя являются наиболее эффективными. Раньше я использовал Rescaler для меньшей точности и масштабатор Unit Length для большей точности. Это еще раз демонстрирует, что иногда в Data Science

Это зависит от данных.

Средство для повторного масштабирования

Изменение масштаба или нормализация минимального и максимального значений использует минимальное и максимальное значения для масштабирования массива. Хотя это довольно круто, я не нашел в нем особой пользы для машинного обучения. Я бы сказал, проверяйте его только для информации и обучения, потому что этот скаляр обычно сбрасывает оценки и снижает точность моего опыта. В одной ситуации мне удалось использовать средство масштабирования в качестве фильтра минимума-максимума для вывода неверных данных на конечной точке. Хотя это, конечно, не прикрывает утраченную почву, я думаю, что это было определенно классное применение. Если вы хотите опробовать этот инструмент для масштабирования, его можно использовать в токарном станке!

using Lathe.preprocess: Rescalar
?(Rescalar)

  Rescalar scales a feature based on the minimum and maximum of the array.
────────────────────────────────────────────────────────────────────────────
array = [5,10,15]
scaled_feature = Lathe.preprocess.Rescalar(array)

Чтобы масштабировать ваши функции, вам нужно сначала получить минимум и максимум x, а затем x будет вычтен на минимум в числителе, максимум минус минимум в знаменателе. А для тех, кто предпочитает видеть это в коде,

function Rescalar(array)
    min = minimum(array)
    max = maximum(array)
    v = [i = (i-min) / (max - min) for i in array]
    return(v)
end

Средняя нормализация

Средняя нормализация - это именно то, на что это похоже, нормализация данных на основе среднего значения. Это, безусловно, может быть полезно, единственная проблема заключается в том, что обычно скаляр z-оценки намного лучше справляется с нормализацией данных, чем нормализатор среднего значения. К счастью, на токарном станке он тоже есть! Формула очень проста: x вычитается из среднего в числителе, максимум минус мин в знаменателе. Я не особо часто его использовал, так как обычно он дает более низкую оценку точности, чем стандартный скейлер. Независимо от того, полезен ли этот конкретный вариант,

вот код

function MeanNormalization(array)
    avg = Lathe.stats.mean(array)
    a = minimum(array)
    b = maximum(array)
    v = [i = (i-avg) / (b-a) for i in array]
    return(v)
end

Произвольное изменение масштаба

Так что, возможно, вы знаете все о масштабировании, средней нормализации и стандартных масштабаторах, но, возможно, вы не слышали о произвольном масштабировании. В отличие от предыдущих, я нашел это весьма полезным. Произвольное масштабирование особенно полезно при небольшом разрыве квартилей, что означает, что медиана недалеко от минимального или максимального значений. И угадай что? Вот код и для этого!

function ArbitraryRescale(array)
    a = minimum(array)
    b = maximum(array)
    v = [x = a + ((i-a*i)*(b-a)) / (b-a) for x in array]
    return(v)
end

Стандартный скалер

Ах да - старый добрый Standard Scaler. Стандартный масштабатор, также известный как нормализатор z-оценки, вероятно, лучший вариант для масштабирования непрерывных функций. Если вам когда-нибудь понадобится повышение точности, это способ сделать это. Я много использовал стандартные скейлеры, вероятно, каждый день я использую один в какой-то момент. Для меня стандартное масштабирование было наиболее полезным из всех скаляров, как и для большинства людей.

Линейная формула для стандартного скейлера также очень проста. Это так же просто, как вычесть среднее значение из итерации x, а затем разделить остаток на стандартное отклонение. Что касается кода, то он тоже довольно прост! :

function StandardScalar(array)
    q = Lathe.stats.std(array)
    avg = Lathe.stats.mean(array)
    v = [i = (i-avg) / q for i in array]
    return(v)
end

Скалярная длина единицы

Другой вариант, который есть у нас в области машинного обучения, - это масштабирование до единичной длины. Масштабирование до единичной длины может дать результат, аналогичный нормализации z-показателя, и я определенно нашел его очень полезным. Формула довольно проста, хотя прямо сейчас в Lathe нет кодовой базы для ее поддержки ... Это потому, что скаляры единичной длины используют евклидово расстояние в знаменателе итерации x. Масштабирование общей длины может быть очень полезным для повышения точности вашей модели.

Заключение

Скаляры потрясающие. Повышение точности на пять-десять процентов может быть действительно полезным, когда вы просто запускаете функцию для изменения своей функции. Еще одним большим плюсом является то, что математика, лежащая в основе большинства скалеров, невероятно проста, что делает их еще более универсальными, учитывая, что вы даже можете делать их с помощью калькулятора.