К-кратная перекрестная проверка для определения k в k-средних?

В процессе кластеризации документа в качестве этапа предварительной обработки данных я сначала применил разложение по сингулярным векторам, чтобы получить U , S и Vt , а затем, выбрав подходящее количество собственных значений, я усек Vt , что теперь дает мне хорошую корреляцию документ-документ из того, что я прочитал здесь . Теперь я выполняю кластеризацию столбцов матрицы Vt , чтобы сгруппировать похожие документы вместе, и для этого я выбрал k-среднее, и первоначальные результаты выглядели приемлемыми для меня (с k = 10 кластерами), но я хотел Покопайтесь немного глубже в выборе самого значения k. Чтобы определить количество кластеров k в k-средних, мне предложили посмотреть на перекрестную проверку.

Перед тем, как реализовать это, я хотел выяснить, есть ли встроенный способ добиться этого с помощью numpy или scipy. В настоящее время я выполняю kmeans , просто используя функцию из scipy.

import numpy, scipy

# Preprocess the data and compute svd
U, S, Vt = svd(A) # A is the TFIDF representation of the original term-document matrix

# Obtain the document-document correlations from Vt
# This 50 is the threshold obtained after examining a scree plot of S
docvectors = numpy.transpose(self.Vt[0:50, 0:]) 

# Prepare the data to run k-means
whitened = whiten(docvectors)
res, idx = kmeans2(whitened, 10, iter=20)

Предполагая, что моя методология до сих пор верна (пожалуйста, поправьте меня, если я пропустил какой-то шаг), на этом этапе, что это стандартный способ использования вывода для перекрестной проверки? Мы будем очень благодарны за любые ссылки / реализации / предложения о том, как это будет применяться к k-средним.

5
задан Community 23 May 2017 в 10:28
поделиться