Как проверить глубокую встроенную кластеризацию новых данных? - PullRequest
0 голосов
/ 02 июля 2018

Я использую DEC от mxnet (https://github.com/apache/incubator-mxnet/tree/master/example/deep-embedded-clustering)

Хотя по умолчанию он работает в MNIST, я изменил источник данных на несколько сотен документов (что должно быть прекрасно, учитывая, что mxnet может работать с набором данных Reuters)

Вопрос; после обучения MXNET, как я могу использовать его на новых, невидимых данных? Каждый раз он показывает мне новый прогноз!

Вот код для сбора набора данных:

vectorizer = TfidfVectorizer(dtype=np.float64, stop_words='english', max_features=2000, norm='l2', sublinear_tf=True).fit(training)

X = vectorizer.transform(training)
X = np.asarray(X.todense()) # * np.sqrt(X.shape[1])

Y = np.asarray(labels)

Вот код для прогноза:

def predict(self, TrainX, X, update_interval=None):
    N = TrainX.shape[0]
    if not update_interval:
        update_interval = N
    batch_size = 256
    test_iter = mx.io.NDArrayIter({'data': TrainX}, batch_size=batch_size, shuffle=False,
                                  last_batch_handle='pad')
    args = {k: mx.nd.array(v.asnumpy(), ctx=self.xpu) for k, v in self.args.items()}
    z = list(model.extract_feature(self.feature, args, None, test_iter, N, self.xpu).values())[0]
    kmeans = KMeans(self.num_centers, n_init=20)
    kmeans.fit(z)

    args['dec_mu'][:] = kmeans.cluster_centers_
    print(args)

    sample_iter = mx.io.NDArrayIter({'data': X})
    z = list(model.extract_feature(self.feature, args, None, sample_iter, N, self.xpu).values())[0]
    p = np.zeros((z.shape[0], self.num_centers))
    self.dec_op.forward([z, args['dec_mu'].asnumpy()], [p])
    print(p)
    y_pred = p.argmax(axis=1)

    self.y_pred = y_pred
    return y_pred

Объяснение: Я подумал, что мне также нужно передать образец данных, с которыми я тренировался в системе. Вот почему вы видите там и TrainX, и X.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 10 июля 2018

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

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

...