如何使用Ruby进行一维k-means聚类?

如何使用Ruby进行一维k-means聚类?,ruby,machine-learning,cluster-analysis,k-means,hierarchical-clustering,Ruby,Machine Learning,Cluster Analysis,K Means,Hierarchical Clustering,我的问题: 我搜索了可用的RubyGems,找到了一个执行k-means聚类的。我发现了不少:,还有。我的问题是没有一个gem处理一维k-均值聚类。他们都期望这样的投入: [[1, 2], [3, 4], [5, 6]] [1, 2, 3, 4, 5, 6] 我的输入如下所示: [[1, 2], [3, 4], [5, 6]] [1, 2, 3, 4, 5, 6] 因此我的问题是:如何使用Ruby执行一维k-means聚类 上下文(我的任务): 我有100个输入值: 0、0、0、0、0、

我的问题:

我搜索了可用的RubyGems,找到了一个执行k-means聚类的。我发现了不少:,还有。我的问题是没有一个gem处理一维k-均值聚类。他们都期望这样的投入:

[[1, 2], [3, 4], [5, 6]]
[1, 2, 3, 4, 5, 6]
我的输入如下所示:

[[1, 2], [3, 4], [5, 6]]
[1, 2, 3, 4, 5, 6]
因此我的问题是:如何使用Ruby执行一维k-means聚类

上下文(我的任务):

我有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、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、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、1、1、0、0、0、0、0、0、0、0、0、0 22,22,35,50,50

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

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

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

以下是输入值的图形表示

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

收尾笔记:


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

k-means无论如何都是这个工作的错误工具

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

以下是一个更合理的建议:

看图,标记三个点,然后你有三个组

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

聚类是关于多元数据中的结构发现。这可能不是你想要的,对不起

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

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

然后检查结果是否至少有一点符合您的要求(还要记住k-means是随机的。多次运行可能会产生非常不同的结果)。

假设您的数据是
[1,4,6,7,8]
。然后你就可以用数据做二维聚类了,对吧?