用Python查找优化曲线上的“肘点”

2024-09-28 18:12:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个点列表,这些点是kmeans算法的惯性值。
为了确定簇的最佳数量,我需要找到曲线开始变平的点。

数据示例

下面是如何创建和填充我的值列表:

sum_squared_dist = []
K = range(1,50)
for k in K:
    km = KMeans(n_clusters=k, random_state=0)
    km = km.fit(normalized_modeling_data)
    sum_squared_dist.append(km.inertia_)

print(sum_squared_dist)

我怎样才能找到一个点,这个曲线的螺距增加了(曲线在下降,所以第一个导数是负的)?

我的方法

derivates = []
for i in range(len(sum_squared_dist)):
    derivates.append(sum_squared_dist[i] - sum_squared_dist[i-1])

我想用肘部法找出任何给定数据的最佳簇数。有人能帮我找到惯性值列表开始变平的点吗?

编辑
数据点:

[7342.1301373073857, 6881.7109460930769, 6531.1657905495022,  
6356.2255554679778, 6209.8382535595829, 6094.9052166741121, 
5980.0191582610196, 5880.1869867848218, 5779.8957906367368, 
5691.1879324562778, 5617.5153566271356, 5532.2613232619951, 
5467.352265375117, 5395.4493783888756, 5345.3459908298091, 
5290.6769823693812, 5243.5271656371888, 5207.2501206569532, 
5164.9617535255456]

图表: graph


Tags: 数据in列表fordistrange曲线sum