我根据两列构建了以下图表:
df.plot.scatter(x="queue_number", y="line_position", colormap="viridis")
我想将这些数据分为三个单独的集群(或者只是为每个组分配一个组号)。最好的方法是什么?
我认为尝试应用三个线性回归线并根据他们的预测将每个值分配给他们自己的组会很好。但我真的不明白如何正确地做到这一点。
我意识到该算法将无法将组分配给左上角的值,但这很好。
对缩放数据使用 DBSCAN 并调整 eps 参数来尝试找到您的组。如果没有示例数据,我无法给您确切的答案,但以下实际上是您将要做的事情。预计您的数据中会有一些噪音并收到 -1 的簇。
df = pd.DataFrame({'line_position': [80, 80, 80, 80, 80,
79, 79, 79, 79, 79,
78, 78, 78, 78, 78,
77, 77, 77, 77, 77,
76, 76, 76, 76, 76,
75, 75, 75, 75, 75,
74, 74, 74, 74, 74,
73, 73, 73, 73, 73,
72, 72, 72, 72, 72],
'queue_number': [0, 1, 2, 3, 4,
0, 3, 5, 8, 10,
1, 2, 5, 6, 17,
3, 4, 9, 10, 23,
5, 6, 10, 15, 30,
6, 7, 20, 21, 33,
8, 9, 22, 24, 37,
9, 10, 24, 25, 39,
9, 10, 27, 28, 43]
}
)
df.plot.scatter(x='queue_number', y='line_position')
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
model = DBSCAN(eps=0.55, min_samples=3).fit(df_scaled)
df['cluster'] = pd.DataFrame(model.fit_predict(df_scaled))
df.plot.scatter(x='queue_number', y='line_position', c='cluster', colormap="viridis")