Я делаю три вещи:
- линейная регрессия в двумерных данных
- классификация с использованием линейной классификации
- классификация с использованием логистической регрессии
Меня смущает масштабирование данных. Моя проблема в том, что я не совсем уверен, правильно ли масштабирую свои данные. Кроме того, я хотел бы изменить внешний вид моих поверхностных графиков в 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:
Есть ли лучшая команда для построения поверхности? сетка, трисерф?