Диаграмма рассеяния KMeans с центроидами на фрейме данных временных рядов - PullRequest
0 голосов
/ 20 июня 2019

Я работаю над фреймом данных временных рядов Pandas, который содержит 2 столбца: метка времени и дельта.
Примером является следующий:

>> df.head() 
   timestamp             delta 
0  2016-07-30 00:05:00     0.0 
1  2016-07-30 00:10:00  4265.0 
2  2016-07-30 00:15:00  4568.0 
3  2016-07-30 00:20:00  5857.0 
4  2016-07-30 00:25:00  3847.0 

отметка времени содержит строки и delta float64.
Я пытаюсь запустить KMeans (sklearn) и построить (используя matplotlib) точечный график с точками и относительными центроидами.

Мой код следующий:

delta = df['delta'].values
delta = delta.reshape(-1, 1)
timestamp = df['timestamp'].values

km = KMeans(n_clusters=3, random_state=0)
km.fit(delta)
km.predict(delta)

plt.scatter(timestamp, delta, c=km.labels_)
plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1], c='red', marker='x')
plt.show()

ЭтоКод возвращает следующую ошибку:

IndexError: индекс 1 выходит за пределы для оси 1 с размером 1

В этой строке:

plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1], c='red', marker='x')

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

Может кто-нибудь помочь мне с этой проблемой, пожалуйста?

1 Ответ

1 голос
/ 20 июня 2019

Причиной ошибки является то, что форма [3, 1].

У вас есть 3 кластерных центроида в одном измерении. Не имеет смысла кластеризовать первый центроид и второй центроид в виде пары (x, y). Потому что все центроиды на этом графике находятся на оси Y (потому что дельта на Y). Таким образом, вы должны построить (0, KMC1), (0, KMC2), (0, KMC3).

Примерная визуализация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...