You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中精准定位聚类算法的肘部拐点?

自动定位聚类算法的肘部拐点问题

问题背景

我在为聚类算法寻找肘部拐点,能通过视觉识别曲线拐点,但希望直接在Python中自动定位。尝试使用kneed库后,返回的点远高于实际曲线拐点,想知道是使用方法有误还是有其他解决方案。

现有距离曲线生成代码

通过最近邻算法生成距离排序曲线的代码如下:

import numpy as np
from sklearn.neighbors import NearestNeighbors
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()

neigh = NearestNeighbors(n_neighbors=2,metric='euclidean',n_jobs=-1)
nbrs = neigh.fit(coords[:,0:2])
distances, indices = nbrs.kneighbors(coords[:,0:2])

distances = np.sort(distances, axis=0)
distances = distances[:,1]
plt.plot(distances)

其中coords是包含2个坐标特征的numpy数组,曲线的实际拐点约在9800位置。

kneed库的使用问题

使用kneed库检测拐点的代码及结果:

from kneed import KneeLocator
kn = KneeLocator(indices[:,0],distances,curve='convex',direction='increasing')
distances[kn.elbow]

# 返回结果为10146

实际想要定位的是曲线开始上扬的位置,但kneed返回的点明显偏离预期。

补充说明:问题可简化为给定x(1到n的连续数组,n为y的点数)和y(呈指数增长的数组),找到曲线开始上扬的x或y坐标点。示例distances数组如下:

array([0.        , 0.        , 0.        , ..., 0.03363485, 0.03682148,
       0.07781013])

解决方案

1. 修正kneed库的输入参数

之前的错误可能源于x轴使用了原始邻居索引indices[:,0],而实际上distances已经被排序,x轴应该用连续的索引数组。同时可以调整灵敏度参数S来微调拐点检测:

# 使用连续的x轴索引,降低灵敏度S值
kn = KneeLocator(np.arange(len(distances)), distances, curve='convex', direction='increasing', S=0.1)
print("拐点索引:", kn.elbow)
print("对应距离值:", distances[kn.elbow])

2. 基于二阶导数手动计算拐点

通过计算二阶导数找到变化率突变的位置,这是拐点的核心特征:

# 计算一阶导数(距离变化率)
first_deriv = np.diff(distances)
# 计算二阶导数(变化率的变化率)
second_deriv = np.diff(first_deriv)
# 找到二阶导数最大值对应的索引(补回diff丢失的两个索引)
elbow_idx = np.argmax(second_deriv) + 1
print("拐点索引:", elbow_idx)
print("对应距离值:", distances[elbow_idx])

3. 归一化数据后再检测

如果数据范围差异较大,归一化后能让kneed更准确地捕捉拐点:

from sklearn.preprocessing import MinMaxScaler

# 归一化距离数据
scaler = MinMaxScaler()
distances_scaled = scaler.fit_transform(distances.reshape(-1,1)).flatten()

# 用归一化后的数据检测拐点
kn = KneeLocator(np.arange(len(distances_scaled)), distances_scaled, curve='convex', direction='increasing')
elbow_idx = kn.elbow
print("拐点索引:", elbow_idx)
print("对应距离值:", distances[elbow_idx])

内容的提问来源于stack exchange,提问作者pgs0001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:55:37