#r #svd #microsoft-r
#r #svd #microsoft-r
Вопрос:
Я проводил некоторый анализ основных компонентов на своем macbook под управлением Microsoft R 3.3.0, когда получил несколько странных результатов. Перепроверив с коллегой, я понял, что результат функции SVD отличается от того, что я могу получить, используя vanilla R.
Это воспроизводимый результат, пожалуйста, загрузите файл (~ 78 Мб) здесь
С Microsoft R 3.3.0 (x86_64-apple-darwin14.5.0) я получаю:
>> sv <- svd(Cx)
>> print(sv$d[1:10])
[1] 122.73664 104.45759 90.52001 87.21890 81.28256 74.33418 73.29427 66.26472 63.51379
[10] 55.20763
Вместо этого на ванильном R (оба с R 3.3 и R 3.3.1 на двух разных машинах Linux):
>> sv <- svd(Cx)
>> print(sv$d[1:10])
[1] 122.73664 34.67177 18.50610 14.04483 8.35690 6.80784 6.14566
[8] 3.91788 3.76016 2.66381
Этого не происходит со всеми данными, если я создаю какую-то случайную матрицу и применяю к ней svd, я получаю те же результаты. Итак, это похоже на своего рода численную нестабильность, не так ли?
ОБНОВЛЕНИЕ: я попытался вычислить SVD на той же матрице ( Cx
) на том же компьютере (macbook) с той же версией R, используя svd
пакет, и, наконец, я получаю «правильные» числа. Тогда это, по-видимому, связано с реализацией svd, используемой Microsoft R Open.
ОБНОВЛЕНИЕ: Такое поведение происходит также в MRO 3.3.1
Комментарии:
1. С MRS 3.2.2 в Windows я получаю результат, соответствующий vanilla R. Возможно, дважды проверьте, что вы используете одни и те же данные на обеих машинах.
2. используйте начальное значение, а затем убедитесь, что вы используете одно и то же начальное значение на обеих машинах, чтобы помочь проверить
3. @HongOoi Я проверил, это те же данные. Возможно, это что-то связанное с библиотеками mac…
4. Я вижу, что Microsoft R на MAC использует платформу Apple Accelerate framework для BLAS, я бы хотел использовать 1 поток вместо 4, которые я на самом деле использую, но я не знаю, как его настроить.
5. Не могли бы вы опубликовать свое обновление в качестве ответа …?
Ответ №1:
Типичный пример образует плохо обусловленную матрицу. Есть некоторые SV, близкие к нулю, что делает разложение SVD численно чувствительным к различным реализациям SVD, что, вероятно, и является тем, что вы видите
Комментарии:
1. Возможно, но разница огромна, вы получаете разные основные компоненты на двух разных машинах…
Ответ №2:
Похоже, это своего рода ошибка, что подтверждено в Github microsoft-r-open. Они говорят, что это поведение расследуется и связано с библиотекой Accelerate в macOS.