Мне нужно использовать SVD в Matlab для получения уменьшенной версии моих данных. Я читал, что функция svds(X,k)
выполняет SVD и возвращает первые k собственных значений и собственных векторов. В документации не упоминается, должны ли данные быть нормализованы. С нормировкой я имею в виду как вычитание среднего значения, так и деление на стандартное отклонение.Должен ли я выполнять центрирование данных перед применением SVD?
Когда я реализовал PCA, я привык нормализовать таким образом. Но я знаю, что он не нужен при использовании функции matlab pca()
, потому что он вычисляет матрицу ковариации с помощью cov()
, которая неявно выполняет нормализацию.
Итак, вопрос есть. Мне нужна проекционная матрица, полезная для уменьшения моих n-мерных данных до k-мерных SVD. Должен ли я выполнять нормализацию данных поезда (и, следовательно, такую же нормировку для дальнейших прогнозируемых новых данных) или нет? Thanks
В основном у меня разреженные векторы. Я хочу «изучить» некоторую матрицу прогноза из набора тренировок, который будет использоваться для уменьшения как данных поезда, так и тестовых данных. Эти прогнозируемые векторы должны быть поданы в классификатор SVM (для обучения и тестирования, конечно). Итак, согласно сказанному, мне не нужно вычитать из поезда, а тест устанавливает среднее значение векторов поезда. я? – user2614596
Ну, если вы кормите их в классификатор, то я обычно рекомендую центрировать и масштабировать (если сама шкала не является соответствующей функцией, но это зависит от ваших данных, о которых мы ничего не знаем). Это устраняет влияние масштабирования на функцию, которая может помочь стабилизировать ваш SVM. См. Ответ от bremen_matt, который хорошо объясняет этот аспект. – Florian
Используя svds(), размерность U приводит меня к числу данных обучения k! что-то не так, потому что оно не преобразует тестовые данные из 1-на-n векторов в 1-на-k. – user2614596