Ввод вручную медиан как центроидов K-средних, в Python

Возможно, что-то вроде этого, где ID - ваш ObjectId. Первый {} необходим для идентификации вашего документа. Не требуется использовать ObjectId, если у вас есть еще один уникальный идентификатор в вашей коллекции.

db.collection.update(
    { "_id": ID, "playlists._id": "58"},
    { "$push": 
        {"playlists.$.musics": 
            {
                "name": "test name",
                "duration": "4.00"
            }
        }
    }
)
1
задан makaros 27 March 2019 в 13:09
поделиться

3 ответа

Вы не просто забыли поставить скобки вокруг np.array?

init_medians=np.array([...])
0
ответ дан astrochoi 27 March 2019 в 13:09
поделиться

ЧАСТЬ 1:

Ошибка TypeEr: объект builtin_function_or_method не может быть подписан

Это чистая ошибка numpy, и она появляется потому, что вы забыли использовать круглые скобки () для определения массива numpy.


ЧАСТЬ 2:

Прежде всего, в init_medians вы пропускаете 4 списка, но они не имеют одинаковые размеры. Последний список содержит 4 элемента (т.е. [0.01, 0.02, 0.03, 0.04]) вместо 3, чтобы представлять медианы кластера.

Во-вторых, аргумент init KMeans ожидает в качестве входных данных символ массива (n_clusters, n_features). В вашем случае это должен быть (4, 3) массив пустышек, подобный следующему:

init_medians=np.array( [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [0.01, 0.02, 0.03]] )
model = KMeans(n_clusters=4, max_iter=300, init=init_medians)
model.fit(clean)

ЧАСТЬ 3: Матрица данных X должна быть Numpy массив не список списков.

Полный код:

clean=np.array([[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3],[0.1, 0.2, 0.3]])

init_medians=np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [0.01, 0.02, 0.03]])
model = KMeans(n_clusters=4, max_iter=300, init=init_medians)
model.fit(clean)
0
ответ дан makaros 27 March 2019 в 13:09
поделиться

Вам нужны скобки для определения массива. «Недопустимый» означает, что вы пытаетесь получить доступ к индексу команды массива.

init_medians=np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [0.01, 0.02, 0.03]])
model = KMeans(n_clusters=4, max_iter=300, init=init_medians)
model.fit(clean)

У вас есть вторая проблема, возможно, поскольку последняя строка массива имеет 4 элемента, так что init_medians будет:

array([list([0.1, 0.2, 0.3]), list([0.4, 0.5, 0.6]),
       list([0.7, 0.8, 0.9]), list([0.01, 0.02, 0.03, 0.04])]

Скорее отличается от:

np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [0.01, 0.02, 0.03]])
[ 116] Если вы удалите один элемент

0
ответ дан David Buck 27 March 2019 в 13:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: