找到“最干净”数据子集的方法,即具有最低可变性的子集

时间:2009-04-05 12:22:18

标签: c++ linear-regression best-fit-curve

我试图在几个数据集中找到趋势。趋势涉及找到最佳拟合线,但如果我想象这个过程对于任何其他模型都不会有太大的不同(可能更耗时)。

有三种可能的情景:

  1. 所有数据,其中所有数据都适合具有低可变性的单一趋势
  2. 所有不良数据,其中所有或大部分数据都表现出巨大的可变性,并且必须丢弃整个数据集。
  3. 部分良好数据,其中一些数据可能是好的,而其他数据则需要丢弃。
  4.   

    如果具有极端可变性的数据的净百分比太高,则必须丢弃整个集合。这意味着基本上只有这种类型的数据,不良数据的百分比也各不相同:

         

    0%差=案例1   100%差=案例2

         

    我只是在寻找具有低变异性的连续部分;即我不关心是否有一些符合趋势的个别点

    我正在寻找的是一种智能的方法来对数据集进行分段并搜索指定的趋势。由于问题的本质,我不是在寻找最符合整体趋势的部分。据我所知,带有“清洁”数据的小节最终会有比总体(包含异常值)略有不同的趋势线属性。这正是我想要的,因为这部分数据最能反映实际趋势。

    我精通C ++但是,由于我正在尝试使代码开源和跨平台,我坚持使用ISO C ++标准。这意味着没有.NET,但如果您有一个.NET示例,我将不胜感激,如果您也可以帮助我将其转换为ISO C ++。我也了解JAVA,一些装配和fortran。

    数据集本身并不庞大,但其中大约有1.5亿,因此蛮力可能不是最佳方式。

    提前致谢


    我知道我已经把一些东西留在了空中,所以让我澄清一下:

    • 每个数据集都可以,也可能会有不同的趋势;即我并不是在所有数据集中寻找相同的趋势。
    • 程序用户将定义他们想要的合身程度
    • 程序用户将定义子集在考虑趋势拟合之前必须是多少连续的
    • 如果程序扩展为允许任何类型的拟合(不仅仅是线性),用户将定义适合的模型 - 这不是优先级,如果上述查询得到解决,那么我肯定这种扩张将是相对微不足道的。
    • 由于实验的性质和数据采集技术导致异常值的产生,即使已知这些区域产生异常值,仍必须收集来自“坏”部分的数据。丢弃这些异常值并不意味着数据被操纵以适应任何趋势(统计免责声明,嘿嘿)。

2 个答案:

答案 0 :(得分:4)

如果我理解你的话,RANSAC算法就是你所寻找的一种方法。 http://en.wikipedia.org/wiki/RANSAC

答案 1 :(得分:1)

您可以在搜索中使用“异常值”一词。异常值是一个特定的数据点,表示实验设计中未捕获的特殊条件,或统计侥幸(从数据集中的分布的前端抓取的点太小而不希望发生这种情况)。

消除异常值会带来一些因你的期望而偏向结果的风险。