#r #variance #dimensionality-reduction
Вопрос:
У меня есть набор данных примерно из 76000 столбцов. Поскольку я не могу проверить каждую колонку вручную, я пытаюсь удалить ненужные. Один из выбранных мной способов — использовать фильтр с низкой дисперсией. Тем не менее, поскольку дисперсия зависит от диапазона данных, мне нужно будет ее нормализовать (я замечаю, что некоторые столбцы возвращают высокую дисперсию, так как значение выражено в миллионах, в то время как другие столбцы, выраженные десятичными точками, возвращают небольшую дисперсию).
Тем не менее, после использования scale
функции в R во всех моих столбцах я заметил, что все мои столбцы теперь имеют отклонение 1. Я буквально так запутался в том, как сейчас реализовать фильтр с низкой дисперсией. Я использую этот веб-сайт для фильтрации с низкой дисперсией (но мне нужно перевести код Python на R).
P.S. Мне нужно уменьшить размер данных, так как мои данные содержат около 76 тысяч столбцов, и я не могу запустить линейную регрессию или какой-либо тест на них.
Комментарии:
1. Ознакомьтесь со страницей
?scale
справки. По умолчанию каждый столбец центрируется, а затем значения делятся на их стандартное отклонение. Не уверен, чего вы ожидали после бегаscale
.
Ответ №1:
Вам нужно удалить масштабирование из scale()
функции, т. е.
df <- iris[1:50, -5]
sapply(data.frame(scale(df)), var)
#Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1 1 1 1
sapply(data.frame(scale(df, scale = FALSE)), var)
#Sepal.Length Sepal.Width Petal.Length Petal.Width
# 0.12424898 0.14368980 0.03015918 0.01110612