Где я могу найти меру расстояния в k-средних? - PullRequest
1 голос
/ 30 апреля 2020

Я видел статью на сайте метаданных об использовании kmeans на временных сериях. Ссылка: https://towardsdatascience.com/clustering-electricity-profiles-with-k-means-42d6d0644d00 Теперь я попытался использовать его в своем собственном наборе данных, и он работает очень хорошо. У меня есть ежедневные профили, это выглядит так: enter image description here Мой вопрос: какова мера расстояния между ежедневными профилями? Так как же рассчитать разницу между дневными профилями? Я использую следующий код для функции k-means:

kmeans = KMeans(n_clusters=2)
cluster_found = kmeans.fit_predict(X)
cluster_found_sr = pd.Series(cluster_found, name='cluster')
df_pivot = df_pivot.set_index(cluster_found_sr, append=True )

fig, ax = plt.subplots(1,1, figsize=(18,10))
color_list = ['blue', 'red', 'green', 'brown', 'yellow', 'black', 'white']
cluster_values = sorted(df_pivot.index.get_level_values('cluster').unique())
""
for cluster, color in zip(cluster_values, color_list):
    df_pivot.xs(cluster, level=1).T.plot(
        ax=ax, legend=False, alpha=0.01, color=color, label = f'Cluster {cluster}'
        )
    df_pivot.xs(cluster, level=1).median().plot(
        ax=ax, color=color, alpha=0.9, ls='--'
    )

ax.set_xticks(np.arange(0 , 24))
ax.set_ylabel('watt')
ax.set_xlabel('hour')

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

sillhoute_scores = []
n_cluster_list = np.arange(2,31).astype(int)

X = df_pivot.values.copy()

sc = MinMaxScaler()
X = sc.fit_transform(X)

for n_cluster in n_cluster_list:
    kmeans = KMeans(n_clusters=n_cluster)
    cluster_found = kmeans.fit_predict(X)
    sillhoute_scores.append(silhouette_score(X, kmeans.labels_))
...