【发布时间】:2021-07-18 11:04:08
【问题描述】:
我从 15 个位置获取能源数据。总共有 3 个特征(L1、L2、L3 的失真值),所以我每 10 分钟有 90 个值。
| Date | Loc1_D_L1 | Loc1_D_L2 | Loc1_D_L3 | Loc2_D_L1 |
|---|---|---|---|---|
| 2021-02-01 00:00:00 | 10,387 | 12,953 | 9,563 | 11,938 |
| 2021-02-01 00:10:00 | .... | .... | .... | .... |
我希望这个想法很清楚。
现在我想对它们进行聚类,但在时间方面,但在位置方面。如果可能的话,我想将它们分组。例如:位置 3,4,5,7 的行为相似 = 集群 1。位置 1,2,9 的行为相似 = 集群 2。我想推导出它是否可行,只是为了观察 certrain 位置的行为以降低其他位置的复杂性操作。
所以我确实转换了矩阵并应用了 KMeans 聚类
from sklearn.cluster import KMeans
from pandas import DataFrame
model = KMeans(n_clusters=5).fit(df)
pred = model.labels_
pred
Nc = range(1, 20)
kmeans = [KMeans(n_clusters=i) for i in Nc]
kmeans
score = [kmeans[i].fit(df).score(df) for i in range(len(kmeans))]
score
df['Cluster']=pred
我最终得到了一张桌子,看起来像这样:
| Date | 2021-02-01 00:00:00 | 2021-02-01 00:10:00 | ... | Cluster |
|---|---|---|---|---|
| Loc1_D_L1 | 10,387 | 12,953 | ... | 1 |
| Loc1_D_L2 | 12,963 | 10,xzy | ... | 1 |
| Loc1_D_L3 | 10,387 | 12,953 | ... | 2 |
| Loc1_D_L1 | 12,963 | 10,xzy | ... | 1 |
问题是: 它现在聚集了每个功能,但不是每个位置。将位置 1 的 L1 与位置 3 的 L1 聚类并没有帮助。
如何解决这个问题?是否有“级别”功能,或者我可以通过引用第一列中的字符串的 if / else 语句来控制它吗?
还有其他想法、策略或疑问吗?
【问题讨论】:
标签: python scikit-learn cluster-analysis transpose