Я выполняю эксперимент с тремя наборами данных временных рядов с различными характеристиками для моего эксперимента, формат которого следующий.
0.086206438,10
0.086425551,12
0.089227066,20
0.089262508,24
0.089744425,30
0.090036815,40
0.090054172,28
0.090377569,28
0.090514071,28
0.090762872,28
0.090912691,27
Первый столбец - timestamp
.По причинам воспроизводимости, я делюсь данными здесь .Из столбца 2 я хотел прочитать текущую строку и сравнить ее со значением предыдущей строки.Если оно больше, я продолжаю сравнивать.Если текущее значение меньше значения предыдущего ряда, я хочу разделить текущее значение (меньше) на предыдущее значение (больше).Соответственно, вот код:
import numpy as np
import matplotlib.pyplot as plt
protocols = {}
types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"}
for protname, fname in types.items():
col_time,col_window = np.loadtxt(fname,delimiter=',').T
trailing_window = col_window[:-1] # "past" values at a given index
leading_window = col_window[1:] # "current values at a given index
decreasing_inds = np.where(leading_window < trailing_window)[0]
quotient = leading_window[decreasing_inds]/trailing_window[decreasing_inds]
quotient_times = col_time[decreasing_inds]
protocols[protname] = {
"col_time": col_time,
"col_window": col_window,
"quotient_times": quotient_times,
"quotient": quotient,
}
plt.figure(); plt.clf()
plt.plot(quotient_times,quotient, ".", label=protname, color="blue")
plt.ylim(0, 1.0001)
plt.title(protname)
plt.xlabel("time")
plt.ylabel("quotient")
plt.legend()
plt.show()
И это дает следующие три точки - по одной на каждый набор данных , который я поделился.
Как видно из точек на графиках, основанных на приведенном выше коде, data1
довольно последовательно, чьезначение около 1, data2
будет иметь два коэффициента (значения которых будут сконцентрированы либо около 0,5 или 0,8), а значения data3
сконцентрированы около двух значений (около 0,5 или 0,7).Таким образом, учитывая новую точку данных (с quotient
и quotient_times
), я хочу узнать, к какой cluster
она принадлежит, создав каждый набор данных, объединяющий эти две преобразованные функции quotient
и quotient_times
.Я пытаюсь с кластеризацией KMeans
следующим образом
from sklearn.cluster import KMeans
k_means = KMeans(n_clusters=3, random_state=0)
k_means.fit(quotient)
Но это дает мне ошибку: ValueError: n_samples=1 should be >= n_clusters=3
.Как мы можем исправить эту ошибку?
Обновление: данные samlpe = = 1040 *