Я запускаю спектральную кластеризацию на матрице подобия, которая составляет 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], ...]
Можете ли вы помочь мне узнать, почему эта ошибка? Я много искал, но безрезультатно.