Почему все labels_ равны -1? Сгенерировано DBSCAN в Python

![введите здесь описание изображения][1]

from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.001, min_samples=10) 
clustering = dbscan.fit(X)

Примеры векторов:

array([[ 0.05811029, -1.089355  , -1.9143777 , ...,  1.235167  ,
    -0.6473859 ,  1.5684978 ],
   [-0.7117326 , -0.31876346, -0.45949244, ...,  0.17786546,
     1.9377285 ,  2.190525  ],
   [ 1.1685177 , -0.18201494,  0.19475089, ...,  0.7026453 ,
     0.3937522 , -0.78675956],
   ...,
   [ 1.4172379 ,  0.01070347, -1.3984257 , ..., -0.70529956,
     0.19471683, -0.6201791 ],
   [ 0.6171041 , -0.8058429 ,  0.44837445, ...,  1.216958  ,
    -0.10003573, -0.19012968],
   [ 0.6433722 ,  1.1571665 , -1.2123466 , ...,  0.592805  ,
     0.23889546,  1.6207514 ]], dtype=float32)

X — это model.wv.vectors, сгенерированный из model = word2vec.Word2Vec(sent, min_count=1,size= 50,workers=3, window =3, sg = 1)

Результаты следующие:

массив([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 , -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1])


person Jing    schedule 16.01.2020    source источник
comment
Людям будет сложно ответить на ваш вопрос, если они не смогут воспроизвести код. Можете ли вы взять код с изображений и отформатировать их здесь. Кроме того, если у вас есть образцы данных, которые вы могли бы предоставить, это поможет нам в решении проблем с вами.   -  person lwileczek    schedule 16.01.2020
comment
@lwileczek Я просто не знаю, как написать здесь код.   -  person Jing    schedule 16.01.2020
comment
Можете ли вы показать код, который фактически выводит массив значений -1? Кроме того, согласно документам DBSCAN, он предназначен для возврата -1 для «шумных» сэмплов, которые не входят ни в один из кластеров «высокой плотности». Возможно, ваши слова-векторы распределены настолько равномерно, что нет кластеров «высокой плотности». (На каких данных вы тренируете слова-векторы и насколько велик набор слов-векторов? Проверяли ли вы, что слова-векторы кажутся разумными/полезными с помощью других проверок?)   -  person gojomo    schedule 16.01.2020
comment
Возможно, вам потребуется настроить параметры DBSCAN для ваших данных. И, возможно, имеет смысл работать с векторами слов, нормированными по единичной длине, а не с необработанными векторами величин. (Выполните model.wv.init_sims(), затем используйте model.wv.vectors_norm вместо model.wv.vectors.) Наконец, min_count=1 обычно приводит к худшим векторам слов, чем более высокое значение min_count, которое отбрасывает слова с таким небольшим количеством примеров использования. Редкие слова не могут получить сильные векторы, и их обучение также мешает улучшению векторов других более частых слов.   -  person gojomo    schedule 16.01.2020
comment
@gojomo показать массив с {clustering.labels_}. И я попробую ваше предложение позже ~ спасибо.   -  person Jing    schedule 16.01.2020
comment
@gojomo извините, я до сих пор не знаю, как кодировать в поле для комментариев ....   -  person Jing    schedule 16.01.2020
comment
Отступ, который вы использовали в трех верхних строках кода, который вы показали, является одним из лучших способов форматирования фрагмента кода. Там гораздо больше информации о способах представления введенного или скопированного и вставленного текста кода или вывода по адресу: stackoverflow.com/editing- помощь   -  person gojomo    schedule 16.01.2020
comment
@gojomo Я попробовал ваш способ с {model.wv.vectors_norm} и {model.wv.vectors}. Я не могу установить min_count выше, так как в моем наборе данных есть DishNames, которые отображаются только один раз.   -  person Jing    schedule 17.01.2020
comment
@gojomo и с более чем 30к слов, и результат тоже плохой, всего -1.   -  person Jing    schedule 17.01.2020
comment
@gojomo все еще плохо, даже если я поставил {min_count=5}....почти плачу....   -  person Jing    schedule 17.01.2020
comment
Слова, которые имеют только 1 пример в ваших обучающих данных, вряд ли получат хорошие векторы слов. Их конечные позиции будут неким сочетанием их случайных начальных позиций и влияния, возможно, произвольно идиосинкразического примера единичного использования, компенсированного влиянием всех других более частых слов на веса нейронной сети. Таким образом, любые шаблоны их окрестностей для кластеризации могут быть слабыми — они почти «шумовые», поэтому неудивительно, если они способствуют тому, чтобы оставить DBSCAN с большим количеством «шумных» результатов.   -  person gojomo    schedule 17.01.2020
comment
Всего 30 000 слов — это крошечный набор данных для Word2Vec целей. Это размер корпуса или количество уникальных слов? Имея небольшой корпус или небольшое количество уникальных слов, но все же несколько различных примеров каждого слова, вы, возможно, сможете получить полезные Word2Vec результаты с меньшими size измерениями и большим количеством epochs обучающих проходов, но это не точно. Удалось ли вам проверить векторы на полезность отдельно от кластеризации, путем выборочной проверки, имеют ли смысл most_similar() соседи векторов в соответствии с вашим пониманием предметной области?   -  person gojomo    schedule 17.01.2020
comment
Ваш лучший шанс получить несколько противоположно значимых векторов может состоять в том, чтобы сделать все: (1) повысить min_count (наблюдая, чтобы точно увидеть, насколько это еще больше сжимает эффективный корпус); (2) еще epochs; (3) меньше size измерений. (Возможно также: большее window или negative.) Затем также, используя vectors_norm (чтобы переместить все векторы в точки на «единичной сфере» для большего контраста с учетом DBSCAN евклидовых окрестностей). Затем также поработайте с параметрами DBSCAN, чтобы сделать их более чувствительными.   -  person gojomo    schedule 17.01.2020
comment
Но, тем не менее, у вас может не хватить данных для того, чтобы Word2Vec работало хорошо, а кластеризация DBSCAN может не подходить для еще более сильных векторов Word2Vec, если только у вас нет какой-то внешней причины полагать, что эти алгоритмы являются правильными для ваших данных/проблемной области. Почему вы хотите создать фиксированное количество кластеров из этих векторов слов?   -  person gojomo    schedule 17.01.2020


Ответы (2)


На основе документов:

labels_array, форма = [n_samples]

Cluster labels for each point in the dataset given to fit(). Noisy samples are given the label -1.

Ответ на этот вопрос вы можете найти здесь: Что такое шумные образцы в Алгоритм кластеризации Scikit DBSCAN?

Короткое слово: это не совсем часть кластера. Это просто точки, которые не принадлежат никаким кластерам и могут быть до некоторой степени «игнорированы». Кажется, у вас действительно разные данные, у которых нет центральных классов кластеризации.

То, что вы можете попробовать?

DBSCAN(eps=0.5, min_samples=5, metric='euclidean', metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=None)

Можно поиграть с параметрами или изменить алгоритм кластеризации? Вы пробовали kmeans?

person PV8    schedule 17.01.2020
comment
Я попробовал твой, и он лучше. Но недостаточно хорошо, результаты -1 и 0. Я пробовал с Kmeans, и это сработало хорошо. Мне так любопытно, почему такая разница существует. - person Jing; 17.01.2020

Ваше значение EPS равно 0,001; попробуйте увеличить это, чтобы сформировать кластеры (иначе каждая точка будет считаться выбросом / помечена -1, потому что она не входит в кластер)

person ron_g    schedule 19.08.2020