В процессе кластеризации документа в качестве этапа предварительной обработки данных я сначала применил разложение по сингулярным векторам, чтобы получить 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-средним.