Масштабирование для линейной регрессии и классификации с использованием Matlab

Я делаю три вещи:

  • линейная регрессия в двумерных данных
  • классификация с использованием линейной классификации
  • классификация с использованием логистической регрессии

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

Данные являются двумерными (x и y) с x в диапазоне от 15000 до 80000 и y от 1000 до 5500.

отделяется, потому что не масштабируется

Две линии регрессии для класса 1 и класса 0 были найдены с использованием линейной регрессии. Для этого я масштабировал данные, вычислял веса и использовал веса для масштабированных данных также для не масштабированных данных, которые видны на картинке. Думаю, это правильно, потому что веса просто определяют наклон. Однако данные не будут разделимы, пока они масштабируются от 0 до 1, как показано на следующем изображении.

введите здесь описание изображения

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

введите здесь описание изображения

Первый вопрос, касающийся сюжета серфинга в Matlab: как получить твердую разделяющую плоскость?

Для логистической регрессии необходимо было снова масштабировать. Я думаю, из-за диапазона функции регрессии 1 / (1 + exp (-w * x)).

Я масштабировал это с помощью этого

data = (values - repmat(min(values,[],1),size(values,1),1))*spdiags(1./(max(values,[],1)-min(values,[],1))',0,size(values,2),size(values,2))

который вычитает минимум и делит на диапазон из исходных значений. После масштабирования данные изменяются от 0 до 1 для x и y. Веса были рассчитаны с использованием алгоритма градиентного подъема и оказались равными

w = 0.2493   33.7885  -36.0428

для масштабированного набора данных и

w = 0.7610  269.3073 -102.6686

для немасштабированных данных.

Следующее изображение с масштабированными данными:

введите здесь описание изображения

Основной вопрос: когда следует масштабировать данные? А когда использовать масштабированный или немасштабированный набор данных?

scale data -> calc weights using scaled data -> plot using scaled or unscaled data?

or

calc weights using unscaled data -> plot using unscaled data? 

Я хотел бы, чтобы график логистической функции также находился в диапазоне от 15000 до 80000 (x) и от 1000 до 5500 (y). Когда я рисую немасштабированную версию, это выглядит так, потому что логистическая функция находится в диапазоне от 0 до 1:

немасштабированная логистическая регрессия

Есть ли лучшая команда для построения поверхности? сетка, трисерф?


person evolved    schedule 06.03.2016    source источник


Ответы (1)


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

Я не думаю, что вам вообще нужно рисовать поверхность. У вас есть двумерные данные f(x,y), поэтому для их разделения вам понадобится линия.

person RPM    schedule 06.03.2016
comment
Но когда я делаю классификацию для двумерных данных, я получаю трехмерный вектор веса w. w0*x0 + w1*x1 + w2*x2, который равен или больше нуля для различных классов с использованием линейной классификации. Как можно вместо плоскости получить разделительную линию? - person evolved; 07.03.2016
comment
У меня нет Matlab на этом компьютере для проверки того, что он выводит, но я предполагаю, что первый w0 соответствует смещению, то есть на самом деле у вас есть w0 + w1*x1 + w2*x2. - person RPM; 07.03.2016