【发布时间】:2012-04-30 09:44:38
【问题描述】:
我正在尝试在几个数据集中寻找趋势。趋势涉及找到最佳拟合线,但如果我认为该过程对于任何其他模型不会有太大不同(只是可能更耗时)。
有 3 种可能的场景:
- 所有好的数据,其中所有数据都符合单一趋势且可变性低
- 所有不良数据,其中所有或大部分数据表现出巨大的可变性,必须丢弃整个数据集。
- 部分良好数据,其中一些数据可能良好,而其余数据需要丢弃。
如果具有极端可变性的数据的净百分比过高,则必须丢弃整个数据集。这意味着基本上只有这种类型的数据,并且不良数据的百分比各不相同:
0% 错误 = 案例 1
100% 错误 = 案例 2我只寻找低可变性的连续部分;即我不在乎是否有一些符合趋势的个别点
我正在寻找的是一种对数据集进行分段并搜索指定趋势的智能方法。由于问题的性质,我不是在寻找最适合整体趋势的部分。我知道具有“更清洁”数据的小节最终将具有与整体(包含异常值)略有不同的趋势线属性。这正是我想要的,因为这部分数据最能反映实际趋势。
我精通 C++,但由于我试图使代码开源和跨平台,所以我坚持 ISO C++ 标准。这意味着没有 .NET,但如果您有 .NET 示例,如果您还可以帮助我将其转换为 ISO C++,我将不胜感激。我也有 JAVA、一些汇编和 fortran 的知识。
数据集本身并不庞大,但大约有 1.5 亿个,因此蛮力可能不是最好的方法。
提前致谢
我知道我有一些事情悬而未决,所以让我澄清一下:
- 每个数据集可以并且可能会有不同的趋势;即,我不是在所有数据集中寻找相同的趋势。
- 程序用户将定义他们想要的拟合程度
- 程序用户将定义子集在考虑趋势拟合之前必须有多连续
- 如果程序被扩展以允许任何类型的拟合(不仅仅是线性),用户将定义要拟合的模型——这不是一个优先事项,如果上述查询得到解决,那么我确信这种扩展将是相对微不足道的
- 异常值的出现是由于实验的性质和数据采集技术,即使已知这些区域存在异常值,仍必须收集来自“坏”部分的数据。丢弃这些异常值并不意味着正在操纵数据以适应任何趋势(统计免责声明,呵呵)。
【问题讨论】:
-
只计算整个数据的最佳拟合线,丢弃异常值,然后为新的点子集重新计算线是否存在问题?
-
你基本上可以用 5 行来总结这个问题。
标签: c++ linear-regression best-fit-curve