point 如何求elbow_python-以稳定的方式找到曲线的肘点?

文章探讨了在Python中如何稳定地找到肘点,即数据聚类的最优数量。作者指出,肘点在不同运行中变化,提出了使用二次导数来确定肘点的代码实现。然而,这种方法对噪声敏感,最佳答案建议先对数据进行曲线拟合再找弯头,以减少噪声影响。讨论了这种方法的适用性和对误差的敏感性。
摘要由CSDN通过智能技术生成

提问

我知道这个主题存在this和this.但是,这次我想最后确定Python的实际实现.

我唯一的问题是,肘点似乎随着代码的不同实例而变化.观察这篇文章中显示的两个图.尽管它们在视觉上看起来相似,但肘点的值发生了显着变化.两条曲线均来自平均20次不同的运行.即使那样,肘点的值也有明显的变化.我可以采取什么预防措施来确保该值在一定范围内?

我的尝试如下所示:

def elbowPoint(points):

secondDerivative = collections.defaultdict(lambda:0)

for i in range(1, len(points) - 1):

secondDerivative[i] = points[i+1] + points[i-1] - 2*points[i]

max_index = secondDerivative.values().index(max(secondDerivative.values()))

elbow_point = max_index + 1

return elbow_point

points = [0.80881476685027154, 0.79457906121371058, 0.78071124401504677, 0.77110686192601441, 0.76062373158581287, 0.75174963969985187, 0.74356408965979193, 0.73577573557299236, 0.72782434749305047, 0.71952590556748364, 0.71417942487824781, 0.7076502559300516, 0.70089375208028415, 0.69393584640497064, 0.68550490458450741, 0.68494440529025913, 0.67920157634796108, 0.67280267176628761]

max_point = elbowPoint(points)

最佳答案

听起来您实际关心的是如何平滑包含噪声的数据?在这种情况下,您应该首先将曲线拟合到数据,然后找到拟合曲线的弯头?

这是否有效取决于噪声源,以及噪声是否对您的应用很重要?顺便说一句,当您从拟合中忽略点时,您可能希望通过查看数据的变化(或希望没有变化)来查看拟合对数据的敏感性(显然,有了足够高的多项式,您总会得到一个很好的拟合度)一组特定的数据,但您大概对一般情况感兴趣)

我不知道这种方法是否可以接受,虽然我认为对小错误的敏感性很差,但直觉上还是不可行的.最终,通过拟合曲线可以说,在理想情况下,基础过程是由曲线建模的,与曲线的任何偏差都是误差/噪声

Python3的k-means elbow是一种用于确定k-means聚类算法中最佳簇数的方法。它可以帮助我们选择最适合我们数据集的簇数。 Elbow方法通过绘制簇数与误差平方和(SSE)之间的关系图来实现。 SSE可以反映聚类结果的紧密程度,即数据点到所属簇中心的距离的平方和。 在Elbow方法中,我们首先定义一个可能的簇数范围,例如1到10。然后,对于每个簇数,我们使用k-means算法对数据进行聚类,并计算得到该簇数时的SSE。 接下来,我们绘制簇数和SSE之间的关系图。图中通常会出现一条下降的曲线。当簇数增加时,SSE会逐渐减小。然而,在某个点后,SSE下降的幅度会变得较小,形成一个拐点。这个拐点就是Elbow点。 Elbow点是k-means算法得到的最佳簇数。它表示了增加更多的簇数并不会显著提高聚类的效果。因此,我们可以选择拐点处的簇数作为我们的最终聚类数目。 通过使用Python3中的相关库,例如scikit-learn或自己编写的函数,我们可以实现这一过程。我们可以创建一个循环,在每次迭代中增加簇数,运行k-means算法,并计算SSE。然后,我们可以绘制簇数与SSE之间的图形,并找到Elbow点。 Python3中有许多绘图库,如matplotlib和seaborn,可以方便地绘制这些图形。我们可以使用诸如matplotlib.pyplot.plot等函数来绘制曲线。 总而言之,Python3中的k-means elbow方法是一种帮助我们选择最佳簇数的技术。它使用簇数和SSE之间的关系图来确定Elbow点,从而指导我们选择合适的聚类数目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值