- Оригинальный адрес:Нормализация против стандартизации — количественный анализ
- Оригинальный автор:Shay Geller
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:ccJia
- Корректор:Fengziyin1234, portandbridge
Прекращение использования StandardScaler, предоставленного Sklearn, в качестве метода сжатия функций, может даже повысить точность обученной модели на 7%.
Каждый практикующий ML знает, что сжатие функций является важной проблемой (Более)
Двумя наиболее обсуждаемыми методами являются нормализация и нормализация.НормализованныйВообще говоря, значение сжимается в диапазоне [0,1].стандартизацияОтносится к корректировке данных таким образом, чтобы данные имели среднее значение 0 и стандартное отклонение 1.
Этот блог надеется ответить на следующие вопросы с помощью некоторых экспериментов:
-
Всегда ли нам нужно сжимать функции?
-
Есть ли лучший метод сжатия?
-
Как разные методы сжатия влияют на разные классификаторы?
-
Должен ли метод сжатия также считаться важным гиперпараметром?
Я проанализирую экспериментальные результаты нескольких различных методов сжатия, воздействующих на разные функции.
Обзор содержания
-
- Почему ты здесь?
-
- зрелый классификатор
-
- Классификатор + Сжатие
-
- Классификатор + Сжатие + PCA
-
- Классификатор + сжатие + PCA + настройка гиперпараметров
-
- Повторите эксперимент с другими наборами данных.
- - 5.1 Дождь в наборе данных Австралии
- - 5.2 Набор данных банковского маркетинга
- - 5.3 Набор данных Sloan Digital Sky Survey DR14
- - 5.4 Набор данных классификации доходов
- в заключении
0. Зачем ты пришел?
Во-первых, я пытаюсь понять разницу между нормализацией и нормализацией.
Затем я нашел эту замечательную статью Себастьяна Рашки.блог, эта статья удовлетворила мое любопытство с математической точки зрения.Если вы не знакомы с концепцией нормализации и нормализации, то, пожалуйста, уделите пять минут чтению этого блога..
Вот еще одна статья, написанная ХинтономстатьяОбъясняет, почему классификаторы (например, нейронные сети), обученные с использованием градиентного спуска, должны использовать сжатие признаков.
Хорошо, у нас много математики, не так ли? Далеко не достаточно.
Я обнаружил, что Sklearn предлагает множество различных методов сжатия. мы можем пройтиthe effect of different scalers on data with outliersЕсть интуитивное понимание. Но они не дают понять, как эти методы влияют на разные задачи классификатора.
Мы прочитали много основных руководств по ML и обычно используем StandardScaler (часто называемую нормализацией с нулевым средним) или MinMaxScaler (часто называемую нормализацией Min-Max) для сжатия функций. Почему никто не использует другие методы сжатия для классификации? Являются ли StandardScaler и MinMaxScaler лучшим методом сжатия?
Я не нашел в учебнике объяснений, почему и когда использовать эти методы. Итак, я считаю, что эффективность этих методов следует исследовать экспериментально.Это все, о чем эта статья.
Подробности проекта
Как и во многих проектах по науке о данных, мы будем читать некоторые данные и экспериментировать с некоторыми зрелыми классификаторами.
набор данных
SonarНабор данных содержит 208 строк и 60 столбцов признаков. Эта задача классификации состоит в том, чтобы определить, исходит ли обратный сигнал сонара от металлического цилиндра или от камня неправильной цилиндрической формы.
Вот сбалансированный набор данных:
sonar[60].value_counts() # 60 是标签列的名字
M 111
R 97
Все функции в наборе данных находятся в диапазоне от 0 до 1,ноНе каждая функция может гарантировать, что 1 — это максимум, а 0 — это минимум.
Я выбрал этот набор данных по двум причинам: во-первых, набор данных достаточно мал, чтобы я мог быстро завершить эксперимент. Во-вторых, проблема сложнее, ни один классификатор не может достичь 100% точности, а полученные мной данные сравнения более содержательны.
В последующих главах мы также проведем эксперименты с другими наборами данных.
код
На этапе предварительной обработки я вычислил все результаты (это заняло много времени). Итак, мы просто читаем файл результатов и проводим его анализ.
Вы можете получить полученный код на моем GitHub:GitHub.com/убить бродягу/…
Я выбрал некоторые из самых популярных классификаторов от Sklearn следующим образом:
(MLP — многоуровневый персептрон, нейронная сеть)
Используемый метод сжатия следующий:
- Не путайте последний метод сжатия в приведенной выше таблице, Normalizer, с минимаксной нормализацией, о которой мы упоминали ранее. Максимально-минимальная нормализация соответствует MinMaxScalar во второй строке. Нормализатор в Sklearn предназначен для нормализации образцов по отдельности к единичной норме.Это метод нормализации на основе строк, а не столбцов.
Детали эксперимента:
-
Чтобы воспроизвести экспериментальный сценарий, мы используем одно и то же начальное число случайных чисел.
-
Соотношение обучающей и тестовой выборки составляет 8:2, и она делится случайным образом.
-
Точность всех результатов взята из 10Обучающий наборполученные на случайном наборе перекрестной проверки.
-
Мы не обсуждаем результаты на тестовом наборе. Как правило, набор тестов невидим, и наши выводы основаны только на оценке классификатора в наборе перекрестной проверки.
-
В четвертой части я использую вложенные наборы перекрестной проверки. Набор для внутренней перекрестной проверки состоит из 5 случайных фрагментов, настроенных с помощью гиперпараметров. Внешний состоит из 10 случайно разделенных наборов перекрестной проверки и использует лучшие параметры модели для получения соответствующей оценки. Все данные в этой части получены из обучающего набора. Картинки самые убедительные:
Посмотрим на результаты
import os
import pandas as pd
results_file = "sonar_results.csv"
results_df = pd.read_csv(os.path.join("..","data","processed",results_file)).dropna().round(3)
results_df
1. Зрелые классификаторы
import operator
results_df.loc[operator.and_(results_df["Classifier_Name"].str.startswith("_"), ~results_df["Classifier_Name"].str.endswith("PCA"))].dropna()
Хороший результат, глядя на среднее значение набора перекрестной проверки, мы видим, что MLP — лучший, а SVM — худший.
Результаты стандартного отклонения в основном одинаковы, поэтому мы в основном ориентируемся на средний балл. В качестве результатов мы используем среднее значение 10 случайно разделенных наборов перекрестной проверки.
Итак, давайте посмотрим, как разные методы сжатия меняют оценку каждого классификатора.
2. Классификатор + сжатие
import operator
temp = results_df.loc[~results_df["Classifier_Name"].str.endswith("PCA")].dropna()
temp["model"] = results_df["Classifier_Name"].apply(lambda sen: sen.split("_")[1])
temp["scaler"] = results_df["Classifier_Name"].apply(lambda sen: sen.split("_")[0])
def df_style(val):
return 'font-weight: 800'
pivot_t = pd.pivot_table(temp, values='CV_mean', index=["scaler"], columns=['model'], aggfunc=np.sum)
pivot_t_bold = pivot_t.style.applymap(df_style,
subset=pd.IndexSlice[pivot_t["CART"].idxmax(),"CART"])
for col in list(pivot_t):
pivot_t_bold = pivot_t_bold.applymap(df_style,
subset=pd.IndexSlice[pivot_t[col].idxmax(),col])
pivot_t_bold
Первая строка, та, что без имени индекса, — это оценка нашего исходного алгоритма без какого-либо метода сжатия.
import operator
cols_max_vals = {}
cols_max_row_names = {}
for col in list(pivot_t):
row_name = pivot_t[col].idxmax()
cell_val = pivot_t[col].max()
cols_max_vals[col] = cell_val
cols_max_row_names[col] = row_name
sorted_cols_max_vals = sorted(cols_max_vals.items(), key=lambda kv: kv[1], reverse=True)
print("Best classifiers sorted:\n")
counter = 1
for model, score in sorted_cols_max_vals:
print(str(counter) + ". " + model + " + " +cols_max_row_names[model] + " : " +str(score))
counter +=1
Лучшие комбинации следующие:
- SVM + StandardScaler : 0.849
- MLP + PowerTransformer-Yeo-Johnson : 0.839
- KNN + MinMaxScaler : 0.813
- LR + QuantileTransformer-Uniform : 0.808
- NB + PowerTransformer-Yeo-Johnson : 0.752
- LDA + PowerTransformer-Yeo-Johnson : 0.747
- CART + QuantileTransformer-Uniform : 0.74
- RF + Normalizer : 0.723
Давайте проанализируем результаты
-
Не существует единого метода сжатия, который даст наилучшие результаты для каждого классификатора.
-
Мы обнаружили, что сжатие приносит прибыль. SVM, MLP, KNN и NB получили значительный выигрыш от различных методов сжатия соответственно.
-
Стоит отметить, чтоНемногоМетод сжатия не подходит для NB, RF, LDA и CART. Это явление связано с тем, как работает каждый классификатор. Причина, по которой древовидные классификаторы не затрагиваются, заключается в том, что они сортируют значения и вычисляют энтропию для каждой группировки перед разбиением. Некоторые функции сжатия сохраняют этот порядок, так что улучшений не будет. Причина, по которой NB не затрагивается, заключается в том, что априор его модели определяется счетчиками в каждом классе, а не фактическим значением. Линейный дискриминантный анализ (LDA) ищет коэффициент через межклассовую вариацию, поэтому на него также не влияет сжатие.
-
Некоторые методы сжатия, такие как QuantileTransformer-Uniform, не сохраняют фактический порядок признаков, поэтому он по-прежнему изменяет оценки вышеперечисленных классификаторов, не связанных с другими методами сжатия.
3. Классификатор + Сжатие + PCA
Мы знаем, что некоторые известные методы машинного обучения, такие как PCA, могут выиграть от сжатия (блог). Давайте попробуем добавить в эксперимент PCA (n_components=4) и проанализируем результаты.
import operator
temp = results_df.copy()
temp["model"] = results_df["Classifier_Name"].apply(lambda sen: sen.split("_")[1])
temp["scaler"] = results_df["Classifier_Name"].apply(lambda sen: sen.split("_")[0])
def df_style(val):
return 'font-weight: 800'
pivot_t = pd.pivot_table(temp, values='CV_mean', index=["scaler"], columns=['model'], aggfunc=np.sum)
pivot_t_bold = pivot_t.style.applymap(df_style,
subset=pd.IndexSlice[pivot_t["CART"].idxmax(),"CART"])
for col in list(pivot_t):
pivot_t_bold = pivot_t_bold.applymap(df_style,
subset=pd.IndexSlice[pivot_t[col].idxmax(),col])
pivot_t_bold
Анализ результатов
-
В большинстве случаев сжатие улучшает модели с PCA, однако конкретный метод сжатия не указывается. Давайте взглянем на «QuantileTransformer-Uniform», который хорошо работает на большинстве моделей. Это повышает точность LDA-PCA с 0,704 до 0,783 на 8%! Но для RF-PCA он имеет отрицательный коэффициент усиления, и точность модели падает с 0,711 до 0,668, то есть на 4,35%. С другой стороны, если используется «QuantileTransformer-Normal», точность RF-PCA может быть увеличена до 0,766 с улучшением на 5%.
-
Мы можем обнаружить, что PCA улучшает только LDA и RF, поэтому PCA не является идеальным решением. Мы не корректировали гиперпараметр n_components, на самом деле, даже если бы мы его корректировали, нет гарантии, что он будет улучшен.
-
В то же время мы обнаружим, что StandardScaler и MinMaxScaler получают лучшие результаты только в 4 из 16 экспериментов, поэтому нам следует подумать о том, как выбрать наиболее подходящий метод сжатия по умолчанию.
Я могу сделать вывод, что, несмотря на то, что PCA является единицей, которая, как известно, получает выгоду от сжатия, не существует метода сжатия, который гарантированно улучшит все экспериментальные результаты, некоторые из них даже с использованием StandardScaler для таких моделей, как RF-PCA, имеют негативное влияние. .
Набор данных также является важным фактором в приведенных выше экспериментах. Чтобы лучше понять влияние методов сжатия на PCA, мы проведем эксперименты на большем количестве наборов данных (где наборы данных будут содержать дисбаланс классов, шкалы признаков и наборы данных как с числовыми, так и с категориальными признаками). Мы проанализируем его в разделе 5.
4. Классификатор + сжатие + PCA + настройка гиперпараметров
Для данного классификатора различные методы сжатия могут привести к большим различиям в точности. Мы считаем, что после настройки гиперпараметров влияние различных методов сжатия на модель будет меньше, поэтому мы можем использовать StandardScaler или MinMaxScaler в качестве метода сжатия классификатора, как и во многих онлайн-учебниках. Давайте проверим.
Прежде всего, NB не включен в эту главу, потому что он не имеет возможности настройки параметров.
Наше сравнение с результатами более раннего этапа показывает, что почти все алгоритмы выигрывают от настройки гиперпараметров. Интересным исключением является MLP, ситуация ухудшилась. Вероятно, это связано с тем, что нейронная сеть легко переобучит набор данных (особенно когда количество параметров намного больше, чем количество обучающих выборок), и мы не используем раннюю остановку или регуляризацию, чтобы избежать переобучения.
Однако даже если у нас есть хорошо настроенный набор гиперпараметров, результаты, полученные при разных методах сжатия, сильно различаются. Когда мы поэкспериментируем с другими методами, мы обнаружим, что, сравнивая эти методы с широко используемым StandardScaler на алгоритме KNN,На самом деле точность может быть улучшена на 7%.
Главный вывод этой главы заключается в том, что даже если у нас есть хорошо настроенный набор гиперпараметров, изменение метода сжатия все равно окажет большое влияние на результаты модели. Поэтому мы также должны учитывать метод сжатия, используемый моделью, в качестве ключевого гиперпараметра.
В пятом разделе мы проведем углубленный анализ большего количества наборов данных. Если вы не хотите углубляться в этот вопрос, можете сразу перейти к заключению.
5. Повторите эксперимент с другими наборами данных.
Чтобы лучше понять и сделать более общие выводы, нам нужно провести больше экспериментов с большим количеством наборов данных.
Мы будем использовать ту же форму классификатора + сжатия + PCA, что и в разделе 3, чтобы провести эксперименты с несколькими наборами данных с разными характеристиками и проанализировать результаты в разных разделах. Все наборы данных взяты из Kaggel.
-
Для удобства я выбрал только числовые столбцы из различных наборов данных. Разнообразные наборы данных (числовые и категориальные признаки) обсуждались по поводу того, как их сжимать.
-
Больше параметры классификатора я не настраивал.
5.1 Набор данных о дожде в Австралии
Ссылка на сайт задача классификации: Ожидается ли дождь?Метод измерения: Точностьразмер набора данных: (56420, 18)количество каждой категории: Без дождя 43993 дождь 12427
Здесь мы показываем некоторые столбцы из 5 строк данных, показать все столбцы на одном графике невозможно.
dataset.describe()
Мы предполагаем, что сжатие может улучшить производительность классификатора из-за разных масштабов признаков (учитывая максимальное и минимальное значения в таблице выше, остальные данные будут иметь большую разницу в масштабе, чем показано).
результат
Анализ результатов
-
Мы обнаружим, что StandardScaler и MinMaxScaler никогда не получают наивысшего балла.
-
Мы можем обнаружить, что на алгоритме CART-PCA StandardScaler и другие методы даже имеют20% разница.
-
Мы также можем обнаружить, что сжатие часто бывает эффективным. Точность на SVM идет даже от78% выросли до 99%.
5.2 Набор данных банковского маркетинга
Ссылка на сайт задача классификации: предсказать, заказал ли клиент срочный депозит?Метод измерения: ППК(несбалансированность набора данных) размер набора данных: (41188, 11)количество категорий: Не заказано 36548 Заказ 4640
Здесь мы показываем некоторые столбцы из 5 строк данных, показать все столбцы на одном графике невозможно.
dataset.describe()
Опять же, масштабы признаков разные.
результат
Анализ результатов
-
Мы обнаружим, что в этом наборе данных, даже если функции имеют разные масштабы, сжатие не обязательно приносит пользу всем моделям, использующим PCA.несмотря на это,На всех моделях с PCA вторая по величине оценка и самая высокая оценка очень близки. Это может означать, что корректировка окончательных размеров PCA при использовании сжатия лучше, чем все результаты без сжатия.
-
Опять же, до сих пор нет метода сжатия, который работает очень хорошо.
-
Еще один интересный результат: все методы сжатия не привели к очень большим улучшениям на большинстве моделей (в основном от 1% до 3%). Это связано с тем, что сам набор данных несбалансирован, и мы не настроили параметры. Другая причина заключается в том, что показатель AUC уже высок (около 90%), что затрудняет значительное улучшение.
5.3 Набор данных Sloan Digital Sky Survey DR14
Ссылка на сайт задача классификации: Является ли целью предсказания галактика, звезда или квазар?мера: точность (мультикласс)размер набора данных: (10000, 18)количество категорий: галактика 4998 Планета 4152 Квазар 850
Здесь мы показываем некоторые столбцы из 5 строк данных, показать все столбцы на одном графике невозможно.
dataset.describe()
Опять же, масштабы признаков разные.
результат
Анализ результатов
-
Сжатие значительно улучшает результаты. Это то, что мы можем ожидать, поскольку масштабы признаков в наборах данных разные.
-
Мы обнаружим, что RobustScaler хорошо работает практически на всех моделях, использующих PCA. Это может быть связано с большим количеством выбросов, вызывающих сдвиг собственных векторов PCA. С другой стороны, эти выбросы не имеют большого значения, когда мы не используем PCA. Нам нужно углубиться в набор данных, чтобы быть уверенным.
-
Разница в точности между StandardScaler и другими методами сжатия может достигать 5%. Это также означает, что нам нужно поэкспериментировать с несколькими методами сжатия.
-
PCA всегда может получить выгоду от сжатия.
5.4 Набор данных классификации доходов
Ссылка на сайт задача классификации: Доход > 50 000 или мера: ППК(несбалансированный набор данных) размер набора данных: (32561, 7)количество категорий:
50K 7841
Здесь мы показываем некоторые столбцы из 5 строк данных, показать все столбцы на одном графике невозможно.
dataset.describe()
Это снова набор данных с разными масштабами признаков.
результат
Анализ результатов
-
Опять же, набор данных несбалансирован, но мы можем обнаружить, что сжатие достаточно эффективно и может улучшить результаты до 20%. Вероятно, это связано с тем, что показатель AUC относительно низок (80%) по сравнению с набором данных Bank Marketing, поэтому легко добиться значительного улучшения.
-
Хотя StandardScaler не выделен (я выделил только элемент с наивысшей оценкой в каждом столбце), он близок к лучшему результату во многих столбцах, и, конечно, не всегда. Во время выполнения (не показано) StandardScaler работает быстрее, чем большинство методов сжатия. Если вас больше беспокоит скорость, StandardScaler — хороший выбор. Но если вас беспокоит точность, вам нужно попробовать другие методы сжатия.
-
Опять же, до сих пор не существует метода сжатия, который бы хорошо работал на всех алгоритмах.
-
PCA почти всегда выигрывает от сжатия.
в заключении
-
Эксперименты показывают, что сжатие может улучшить результаты даже в моделях, настроенных с помощью гиперпараметров.Поэтому метод сжатия необходимо рассматривать как важный гиперпараметр.
-
Различные методы сжатия будут влиять на разные классификаторы. Все классификаторы на основе расстояния, такие как SVM, KNN и MLP (нейронная сеть), значительно выигрывают от сжатия. Но даже такие классификаторы, как деревья (CART и RF), в которых некоторые методы сжатия не работают, могут извлечь выгоду из других методов сжатия.
-
Понимание математики моделей и методов предварительной обработки — лучший способ понять эти результаты. (Например, как работают древовидные классификаторы? Почему с ними не работают некоторые методы сжатия?). Это сэкономит вам много времени, если вы знаете, что не можете использовать StandardScaler при использовании случайных лесов.
-
Методы предварительной обработки, такие как PCA, действительно выигрывают от сжатия.если нет эффекта, это может быть связано с тем, что размер PCA задан неправильно, имеется много аномальных точек или выбран неправильный метод сжатия.
Не стесняйтесь обращаться ко мне, если вы обнаружите какие-либо ошибки, способы улучшить экспериментальное покрытие или предложения по улучшению.
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.