Кластеризация с независимыми переменными и очень большим набором данных

#r #cluster-analysis

#r #кластерный анализ

Вопрос:

У меня очень большой набор данных ~ 400 000 экземпляров, который выглядит как данные ниже.

 data  <- as.data.frame(matrix(0, 10, 5))
samp <- function(){
  x <-sample( c(0:9), 5, replace =TRUE, prob = c(0.5, 0.1, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05))
  return(x)
}
data <- lapply(split(data, c(1:10)), function(x)  samp() )
data <- do.call(rbind.data.frame, data)
colnames(data) <- c("fail","below_a",  "aver", "above_a", "exceed")
data$class_size <- apply(data[1:5] , 1, FUN = sum) 
class_prof <- sample(letters[1:6], nrow(data), replace = T)   
data$class_prof <- class_prof
  

Я пытаюсь сгруппировать этот набор, но возникают следующие проблемы:

  • размер класса — это сумма первых пяти столбцов — я думаю, это может вызвать проблему коллинеарности, но это важная переменная.
  • первые пять переменных не являются независимыми, они являются результатами измерения одного и того же качества, все в классе должны попадать в одну из категорий.
  • набор действительно большой, единственным алгоритмом, у которого не было проблем со сходимостью, был kmeans (без использования переменной профиля класса).

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

Для решения проблем сходимости я попробовал понижающую выборку, но для многих методов мне нужно уменьшить выборку до 5000-7000, чтобы избежать проблем с памятью, что составляет менее 2% исходных данных.

Какой метод можно было бы применить здесь, используя r-пакеты?

Ответ №1:

Попробуйте выполнить анализ основных компонентов данных, затем kmeans или knn в зависимости от количества измерений, которые вы решите, вы хотите.

Есть несколько разных пакетов, которые довольно просты в использовании, вам нужно будет сначала центрировать и масштабировать ваши данные. Вам также нужно будет преобразовать любые факторы в числовые, используя один горячий метод (один столбец для каждого возможного фактора этого исходного столбца factor).

Посмотрите на ‘prcomp’ или ‘princomp’

Комментарии:

1. Спасибо, Джош, я подумал об этом и попробовал.. Проблема в том, что мне нужно иметь возможность интерпретировать и анализировать кластеры по отношению к исходным переменным. Кроме того, сейчас у меня всего 7 измерений, что, я думаю, нормально, проблема заключается в количестве экземпляров и невозможности вычисления матрицы различий, которую используют многие методы. Другая проблема может заключаться в том, что первые пять столбцов разрежены — если класс маленький, часто будет только одно или иногда два значения, отличные от 0.