【问题标题】:Method to find "cleanest" subset of data i.e. subset with lowest variability找到“最干净”数据子集的方法,即具有最低可变性的子集
【发布时间】:2012-04-30 09:44:38
【问题描述】:

我正在尝试在几个数据集中寻找趋势。趋势涉及找到最佳拟合线,但如果我认为该过程对于任何其他模型不会有太大不同(只是可能更耗时)。

有 3 种可能的场景:

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

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

0% 错误 = 案例 1
100% 错误 = 案例 2

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

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

我精通 C++,但由于我试图使代码开源和跨平台,所以我坚持 ISO C++ 标准。这意味着没有 .NET,但如果您有 .NET 示例,如果您还可以帮助我将其转换为 ISO C++,我将不胜感激。我也有 JAVA、一些汇编和 fortran 的知识。

数据集本身并不庞大,但大约有 1.5 亿个,因此蛮力可能不是最好的方法。

提前致谢


我知道我有一些事情悬而未决,所以让我澄清一下:

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

【问题讨论】:

  • 只计算整个数据的最佳拟合线,丢弃异常值,然后为新的点子集重新计算线是否存在问题?
  • 你基本上可以用 5 行来总结这个问题。

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


【解决方案1】:

如果我理解正确,RANSAC 算法是您正在寻找的一种方法。 http://en.wikipedia.org/wiki/RANSAC

【讨论】:

    【解决方案2】:

    您可以在搜索中使用“异常值”一词。异常值是表示实验设计中未捕获的特殊条件或统计侥幸的特定数据点(从数据集中分布的外流中获取的点太小而无法预期会发生)。

    异常值消除可能会导致结果因您的期望而产生偏差。

    【讨论】:

    • 我可能没有清楚地介绍这一点...我知道这似乎可能会引入偏差,但这只发生在我正在消除有效数据点时。在我的实验设置中,异常值完全是因为来自坏细胞(这是一个生物学实验),所以我需要消除它们
    • 我不是在说“不要这样做”。异常值消除不一定是坏事:它是数据分析的公认部分。请注意,它会带来一些风险。通常的缓解措施是在寻找意外模式时打击异常值......
    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多