Как назначить sample_weights в sklearn.cluster DBSCAN?

Я использую DBSCAN для поиска кластеров значений пикселей изображения RGB.

db = DBSCAN(eps=0.3, min_samples=10).fit(X)

где X - матрица N x 3. Каждая строка X содержит триплеты RGB.

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

score = 1 / (1 + math.exp(-a * distance)) # a = 0.001

Я вычисляю weight_matrix, заполненный score, как указано выше.

Далее я сделал это:

db = DBSCAN(eps=0.3, min_samples=10).fit(X,y=None, sample_weight=weight_matrix)

где длина массива weight_matrix равна количеству строк в X.

Но я получаю следующую ошибку:

TypeError: fit() got an unexpected keyword argument 'y'

Итак, я попытался сделать это следующим образом:

db = DBSCAN(eps=0.3, min_samples=10).fit(X, sample_weight=weight_matrix)

Теперь я получаю эту ошибку:

TypeError: fit() got an unexpected keyword argument 'sample_weight'

Я думаю, что неправильно передаю аргументы, но не уверен. Моя версия scikit-learn — 0.14.0.


person Harsh Wardhan    schedule 01.06.2016    source источник
comment
Может быть, у вас установлена ​​старая версия?   -  person Has QUIT--Anony-Mousse    schedule 02.06.2016
comment
Посмотрите здесь: scikit-learn .org/stable/modules/generated/ вроде нормально. Мне интересно, что для вас weight_matrix. Вы говорите, что он должен иметь то же количество rows, что и X, но weight_matrix должен быть массивом length, равным количеству строк в X. Также проверьте версию, которая у вас установлена, она может быть не последней.   -  person Chrispresso    schedule 02.06.2016
comment
@ZWiki: Спасибо за информацию о размере массива weight_matrix. Я отредактировал сообщение.   -  person Harsh Wardhan    schedule 03.06.2016


Ответы (1)


Похоже, вы используете scikit-learn v ‹= 0,15, так как это последняя версия, в которой DBSCAN соответствовал форме.

fit(X)

с 0.16 это

fit(X, y=None, sample_weight=None)

Просто обновите scikit-learn до 0.16 или 0.17.X.

person lejlot    schedule 01.06.2016
comment
Тогда задайте отдельный вопрос, показывающий, что именно происходит, что вы подразумеваете под давками - person lejlot; 02.06.2016
comment
При вызове метода DBSCAN().fit(). Он говорит «Убит» и выходит. - person Harsh Wardhan; 02.06.2016