Комплекс ошибок данных не поддерживается в спектральной кластеризации - PullRequest
1 голос
/ 20 апреля 2020

Я запускаю спектральную кластеризацию на матрице подобия, которая составляет 1000 * 1000. Моя матрица сходства выглядит следующим образом:

matrix([[0.000, 0.031, 0.030, ..., 0.850, 0.867, 0.838],
        [0.031, 0.000, 0.005, ..., 0.780, 0.805, 0.781],
        [0.030, 0.005, 0.000, ..., 0.803, 0.823, 0.795],
        ...,
        [0.850, 0.780, 0.803, ..., 0.000, 0.024, 0.008],
        [0.867, 0.805, 0.823, ..., 0.024, 0.000, 0.014],
        [0.838, 0.781, 0.795, ..., 0.008, 0.014, 0.000]])

Я создал матрицу смежности и степени и матрицу Лапласа, а затем вычислил собственные значения и собственные векторы, и я использовал второе наименьшее собственное значение, чтобы выяснить, какой узел должен быть помещен в какую категорию. :

e, v = np.linalg.eig(L)
fig = plt.figure(figsize=[30, 6])
ax1 = plt.subplot(221)
plt.plot(e)
ax1.title.set_text('eigenvalues')
i = np.where(e < 300)[0]
ax2 = plt.subplot(222)
plt.plot(v[:, i[0]])
ax3 = plt.subplot(223)
plt.plot(v[:, i[1]])
ax3.title.set_text('second eigenvector with eigenvalue close to 0')

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

Но когда я хочу запустить kmeans, как показано ниже, у меня возникает ошибка:

U = np.array(v[:, i[1]])
km = KMeans(init='k-means++', n_clusters=3)
km.fit(U)
km.labels_

Ошибка:

> Ошибка значения: сложные данные не поддерживаются [[-0.04866435 + 0.j] [-0.04909432 + 0.j] [-0.04840705 + 0.j] [- 0.04859193 + 0.j] [-0.0514795 + 0.j], ...]

Можете ли вы помочь мне узнать, почему эта ошибка? Я много искал, но безрезультатно.

1 Ответ

0 голосов
/ 20 апреля 2020

Чтение документации, связанной с тем, что возвращает np.linalg.eig:

Собственные значения, каждое из которых повторяется в соответствии с его кратностью. Собственные значения не обязательно упорядочены. Результирующий массив будет иметь сложный тип, если мнимая часть не равна нулю, и в этом случае он будет приведен к реальному типу. Когда a является действительным, результирующие собственные значения будут действительными (0 мнимая часть) или встречаются в сопряженных парах

Вычисленные вами собственные значения являются сложными, и вы не можете использовать комплекс с KMeans.

...