我有一个关于聚类技术应用的问题,更具体地说是K-means。 我有一个包含 3 个传感器(A、B、C(的数据框:
time A | B | C |
8:00:00 6 10 11
8:30:00 11 17 20
9:00:00 22 22 15
9:30:00 20 22 21
10:00:00 17 26 26
10:30:00 16 45 29
11:00:00 19 43 22
11:30:00 20 32 22
... ... ... ...
我想对具有相同行为的传感器进行分组。
我的问题是:看上面的数据帧,我必须计算数据帧每个对象的相关性,然后在这个相关矩阵上应用欧几里得距离,从而得到一个带有距离值的 3 * 3 矩阵?
或者我是否转置了我的数据框,然后仅使用欧几里得度量计算 dist (( 矩阵,然后我将拥有一个带有距离值的 3 * 3 矩阵。
你只有三个传感器。这意味着,您需要三个值,d(A B(,d(B,C(和d(A B(。这里的任何"集群"对我来说似乎都没有意义?当然不是k-means。K 均值表示点 (!在 R^d 中表示小 d。
选择您喜欢的任何形式的时间序列相似性。可以是简单的相关性,也可以是DTW等。
Q1:否。原因:此处不需要相关性。
Q2: 没有。原因:我会以不同的方式计算距离
对于第一行,R' 内置 sdist()
函数(默认使用欧氏距离(
dist(c(6, 10, 11))
为您提供每个值之间的间隔
1 2
------
2| 4
3| 5 1
项目 2 和 3 彼此最接近。这很简单。
但是没有单一的方法可以计算一个点和一组点之间的距离。在那里,您需要一个联动功能(最小值/最大值/平均值/...
我会使用 R 的内置kmeans()
函数做什么:
- 忽略日期列,
- (假设任何 A、B、C 列中都没有 NA 值(
- 如有必要,缩放数据(在这里它们似乎都具有相同的数量级(
- 对 A、B、C 列执行 KMean 分析,k = 1...n ;评估结果
- 使用您合适的k选择执行最终的KMeans 。
- 获取每行的群集分配
- 将它们放在 C 右侧的新列中