Как удалить дубликаты из блока данных и создать новый с весом для каждого образца? - PullRequest
0 голосов
/ 29 апреля 2019

Я работаю над проблемой классификации, где я знаю ярлык. Я сравниваю 2 разных алгоритма K-Means и DBSCAN. Однако у последнего есть известная проблема с памятью для вычисления метрического расстояния. Но если в моем наборе данных много дублированных выборок, могу ли я удалить их и подсчитать их появления, и после этого использовать этот вес в алгоритме? Все для экономии памяти.

Я не знаю, как это сделать. Это мой код:


df  = dimensionality_reduction(dataframe = df_balanced_train)
train = np.array(df.iloc[:,1:])

### DBSCAN

#Here the centroids there aren't
y_dbscan, centroidi = Cluster(data = train, algo = "DBSCAN")
err, colori = error_Cluster(y_dbscan, df)

#These are the functions:

        #DBSCAN Algorithm

        #nbrs = NearestNeighbors(n_neighbors= 1500).fit(data)
        #distances, indices = nbrs.kneighbors(data)
        #print("The mean distance is about : " + str(np.mean(distances)))
        #np.median(distances)

        dbscan = DBSCAN(eps= 0.9, min_samples= 1000, metric="euclidean", 
                        n_jobs = 1)

        y_result = dbscan.fit_predict(data)
        centroidi = "In DBSCAN there are not Centroids"

Для выборки из 30 тыс. Элементов все в порядке, но для 800 тыс. Всегда проблема с памятью, может ли решить мою проблему, удалить дубликаты и сосчитать треть вхождений?

1 Ответ

2 голосов
/ 07 мая 2019

DBSCAN должен занимать только O (n) памяти - так же, как k-означает.

Но, очевидно, реализация sklearn делает версию, которая сначала вычисляет всех соседейи, следовательно, использует O (n²) памяти, и, следовательно, менее масштабируемым.Я бы посчитал это ошибкой в ​​sklearn, но, видимо, они хорошо знают об этом ограничении, которое, по-видимому, является проблемой, когда вы выбираете неверные параметры.Чтобы гарантировать O (n) памяти, может быть достаточно просто самостоятельно внедрить стандарт DBSCAN.

Объединение дубликатов, конечно, вариант, но A), что обычно означает, что вы используете неподходящие данные для этих алгоритмов, соответственно.для этого расстояния и B) вам также необходимо самостоятельно реализовать алгоритмы, чтобы добавить поддержку веса.Поскольку вам нужно использовать весовые суммы вместо подсчета результатов и т. Д. В DBSCAN.

И последнее, но не менее важное: если у вас есть метки и проблема классификации, то это, кажется, неправильный выбор.Они кластеризация, а не классификация.Их задача - , а не , чтобы воссоздать имеющиеся у вас метки, а найти новые метки из данных.

...