gpt4 book ai didi

ruby - 如何使用 Ruby 进行一维 k 均值聚类?

转载 作者:行者123 更新时间:2023-11-30 09:37:56 26 4
gpt4 key购买 nike

我的问题:

我搜索了可用的 Ruby gem,以找到执行 k-means 聚类的一个。我发现了很多:kmeans , kmeans-clustering , reddavis-k_meansk_means_pp 。我的问题是没有一个 gem 处理一维 k 均值聚类。他们都期望这样的输入:

[[1, 2], [3, 4], [5, 6]]

我的输入如下所示:

[1, 2, 3, 4, 5, 6]

因此我的问题是:如何使用 Ruby 执行一维 k 均值聚类?

上下文(我的任务):

我有 100 个输入值:

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3 , 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 8, 8, 10, 16, 18, 22, 22, 35, 50 , 50

每个值代表一个响应时间,即某个客户服务代理回复客户电子邮件所花费的分钟数。因此第一个值 0 表示客户只等待了 0 分钟的响应。

我需要找出有多少个快速、中快和慢速响应时间实例。换句话说,我想将输入值分成 3 个池,然后计算每个池中有多少个。

复杂的因素是,我必须根据整体坡度陡度找出在哪里进行切割。快、中快、慢没有固定的定义。第一次切割(在快速和中快速之间)应该发生在斜坡的陡度开始比以前急剧增加的地方。当陡度增加更加剧烈时,应该进行第二次切割(中快和慢速之间)。

这是输入值的图形表示。

在上面的例子中,常识可能会将快速定义为 0-3,因为有很多 0、1、2 和 3 的实例。4-8 或 4-10 看起来像是中快的常识选择。但是如何从数学上确定这样的事情呢?如果响应时间通常更快,那么客户就会期待这一点,因此接近结束时更小的增长应该会触发削减。

整理笔记:

我确实找到了 gem davidrichards-kmeans它处理一维 k 均值聚类,但它似乎无法正常工作(示例代码引发语法错误)。

最佳答案

无论如何,k-means 都不适合这项工作。

它不是为拟合指数曲线而设计的。

这里有一个更合理的建议给您:

看图,标记三个点,然后你就得到了三个组。

或者查看分位数...报告中位响应时间、90% 分位数和 99% 分位数...

聚类是关于多元数据中的结构发现。抱歉,这可能不是您想要的。

如果您坚持尝试 k-means,请尝试将数据编码为

[[1], [2], [3], [4], [5]]

并检查结果是否至少有一点点符合您的要求(另请记住,k 均值是随机的。多次运行可能会产生截然不同的结果)。

关于ruby - 如何使用 Ruby 进行一维 k 均值聚类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com