vb.net - 确定频率变化的关键点

标签 vb.net algorithm math graph formula

我有一个应用程序,正在分析一个存在大量交互的系统。我需要根据系统中独特项目出现的频率做出某些选择。例如,如果您有以下字母列表:

A, B, F, G, A, T, S, B, S, B, S, Q, Z, B, Q, S

这里是一个列表,显示每个字母出现的频率(出现):

A - 2
B - 4
F - 1
G - 1
Q - 2
T - 1
S - 4
Z - 1

所以出现的频率是这样的(出现次数):

4 - 2
2 - 2
1 - 4

上面是一个小例子,但我附上了一张图像,它是一个更大系统的简单线图

series graph

在此图中,底部的数字并不重要。他们只是标记了独特频率的数量。 Y 轴标记该频率的值。

我正在寻找一种数学/编程方法来找到该线开始向上突破的点。我的搜索没有产生我正在寻找的内容,因为我不太确定正确的术语是什么,或者概念的名称。

现在,我们必须根据人类查看数字并说“这里”来手动选择该点。但我希望至少已经选择了一个“推荐”值,最多能够完全消除人为因素。

为了澄清,我当前的算法正在生成一个数字对出现次数到出现频率的列表。我对“频率”一词的使用与电磁信号无关,而是与事件发生的频率有关。但我认为说“发生事件”会更困惑!

在这个系统中,总的趋势是少量实体将出现在大量交互中,更多实体将出现在中等数量的交互中,但最大数量的实体将出现在少数交互中,甚至没有交互。很难想象与此不同的情况……最坏的情况可能是停滞不前。但从开始到结束的任何一点,肯定都可能出现跳跃后的下跌。上面的插图并没有说明这一点。我们不能假设会有一个点开始上涨,之后就不再下跌。

这是我的数据。 (上面的简单图表仅使用“出现频率”列数据生成):

data for graph

如您所见,此列表按出现列的降序排序。这是来自一个拥有 904 个独特实体的小型系统。这些实体有 38 个独特的出现率。如果您从该列表的顶部开始,您可以说:

"2 entities occur 309 times"
"1 entity occurs 130 times"
etc.

最终,我试图根据实体在系统中出现的频率来确定其重要性。我需要能够将某些项目标记为“重要”,但不可能所有项目都重要。我正在寻找的方法/算法将有助于确定在该列表中的哪个点我停止考虑重要的项目。

如果您查看列表,您可以看到出现次数较低的位置开始变得更加频繁。我认为我无法对右列进行排序,因为左列实际上是关键数据。发生次数越多=重要性越高。

但我仍然需要弄清楚如何确定这一点。

最佳答案

较大的示例未排序是否有任何原因?如果通过增加 Y 值对其进行排序,则可以获取每个连续对的斜率,并在斜率显着变化时调用断点。

您可以调整“显着更改”的规则以满足您的具体需求。它可能像“与之前相比增加最多的斜率”或“与运行平均斜率变化超过 X% 的第一个斜率”一样简单。或者可能是测试点的斜率与之前和之后的斜率差异的最大 rss。


修改后,我想可能就是取百分比那么简单。将每个 X 和 Y 相乘,并对所有条目求和。这是观察到的事件总数。现在从表的底部开始,开始从总数中减去每行的乘积,直到小于原始总数的 X%。剩下的就是对总数贡献最大的“重大”事件。

我有一种感觉,这是统计学中的一个常见问题,但我没有足够的背景来说出正确的术语是什么,尽管我想到了标准差。

关于vb.net - 确定频率变化的关键点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603914/

相关文章:

结合VB和C/C++编程?

mysql - 如何循环遍历 DatagridView 中的行和列以将其值插入 mysql 表中

Python itertools.产品

c# - 温控功能/算法

algorithm - 逆斐波那契算法?

java - 如何在 java 中使用 Math.round() 获取 =ROUND(A8/1000,2)* 1000(excel 公式)输出

vb.net - 使用 VB.NET 创建能够进行每次循环的 COM 类

javascript - XMLHttpRequest 在 6 次后停止发送

algorithm - 图论 : Will it stop or not?

javascript - 为什么这个简单的椭圆旋转会旋转太多并扭曲尺寸?