检查数字序列是否有增加或减少趋势的最佳方法是什么?
我知道我可以选择序列的第一个和最后一个值,并检查它们的区别,但我想要一个更强大的检查。这意味着我希望能够在大多数减少的序列中容忍少数增加的值,反之亦然。
更具体地说,这些数字存储为
vector<int> mySequence;
关于我正在处理的数字序列的更多细节:
答案 0 :(得分:8)
我会累计增加的数量与减少的数量,这可以让你知道是否存在增加或减少的整体趋势。
答案 1 :(得分:3)
您可能会查看trend estimation和某些类型的回归,例如linear regression。
当然这取决于你的具体应用,但总的来说这听起来很合适。
答案 2 :(得分:1)
我认为您可以简单地计算序列的中位数并检查它是否大于第一个值 这是一种方式,而不是方式。
另一种方法,总是考虑平均媒介,你可以检查序列中的升序和降序值。
int trend = 0;
int avg = mySequence[0];
int size = mySequence.size();
for (int i=0; i < size - 1; ++i) {
if(i > 0) {
avg = (avg + mySequence[i]) / 2;
}
(mySequence[i+1] - avg) > 0 ? ++trend; --trend;
}
答案 3 :(得分:0)
一种可能性是计算序列中升序和降序值的数量:
int trend = 0;
for (int i=0;i<mySequence.size()-1;++i)
{
diff = mySequence[i+1] - mySequence[i];
if (diff > 0)
{
trend++;
}
else if (diff < 0)
{
trend--;
}
}
您在示例中给出的序列将以trend
等于-6
答案 4 :(得分:0)
我很可能会尝试将序列拆分成多个段,正如您所说的值没有显着差异 - 请参阅piecewise regression 并将细分为业务需求。
您需要一个用于存储细分的向量,每个细分具有开始/结束索引,某种中值等等 - 另请参阅where to split a piecewise regression
答案 5 :(得分:0)
我建议使用应用于离散整数序列的数学分析方法(例如积分和微分计算)。
然后,一种方法是计算滚动平均值并查看这些平均值是增加还是减少。自然而轻松;)