0

Я делаю три вещи:Scaling для линейной регрессии и классификации с использованием MATLAB

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

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

Данные двумерный (х и у) с й в диапазоне от 15000 до 80000 и у от 1000 до 5500.

seprable because not scaled

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

enter image description here

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

enter image description here

Первого quesiton относительно 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 

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

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

enter image description here

Основным вопрос, когда я должен масштабировать свои данные? И когда использовать масштабированный или немасштабированный набор данных?

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

или

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

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

unscaled logistic regression

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

ответ

1

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

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

+0

Но когда я делаю классификацию для двумерных данных, я получаю трехмерный весовой вектор w. 'w0 * x0 + w1 * x1 + w2 * x2', который равен или больше нуля для разных классов с использованием линейной классификации. Как можно получить разделительную линию вместо плоскости? – evolved

+0

У меня нет Matlab на этом компьютере, чтобы проверить, что он выводит, но я предполагаю, что первый 'w0' соответствует смещению, то есть на самом деле у вас есть' w0 + w1 * x1 + w2 * x2'. – RPM

Смежные вопросы