大型数据里边的过滤数据

sanje_si 2014-05-15 07:49:48
请问各位大神:
在一动态获取数据的程序中,正常数据的偏离值是不会超过1。但是不知道哪些数据是正常值,比如:
3.1 3.2 3.3 3.4 3.5,
6.5 6.4 6.3 6.2 6.9 7.1 6.8 6.9
............................................................
不确定3.X就是正常的,数据数量巨大,动态获取。

问题:
怎么及时处理掉所谓的异常数据。

...全文
152 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
menzi11 2014-05-16
  • 打赏
  • 举报
回复
前后的数据和数据之间有关联没? 如果有的话,用个低通滤波.
sanje_si 2014-05-16
  • 打赏
  • 举报
回复
引用 2 楼 menzi11 的回复:
前后的数据和数据之间有关联没? 如果有的话,用个低通滤波.
比如我们获取GPS定位的时候,可能会出现位置漂移现象,怎么去除这个漂移。 数据之间基本可以假设为没有关联。
sanje_si 2014-05-16
  • 打赏
  • 举报
回复
多谢楼上各位,我请教了数学系专攻算法的同学,GPS的偏移位置过滤最常用方法即为使用kalman滤波,和4#提到的一样。 谢谢。
menzi11 2014-05-16
  • 打赏
  • 举报
回复
引用 3 楼 sanje_si 的回复:
[quote=引用 2 楼 menzi11 的回复:] 前后的数据和数据之间有关联没? 如果有的话,用个低通滤波.
比如我们获取GPS定位的时候,可能会出现位置漂移现象,怎么去除这个漂移。 数据之间基本可以假设为没有关联。[/quote] 没特别看懂,每个数据是每次GPS定位的值吗? 比如我站在一个地方或者在行动, 然后每个数值是某个时间间隔均匀采样的我的位置吗? 如果是的话,用不着卡尔曼滤波, 这样:

class PosFix
{
public:
        PosFix(x0,float ratio=0.01f):temp(x0){};
        float fixedPos(float x) { temp=temp+(x-temp)*ratio; return temp; } 
private:
        float temp;
}
假如你的位置存放在数组X中:

//.......X[1000];
PosFix a(X[0]);
for(int i=1;i<1000;++i) X[i]=a.fixedPos(X[i]);
zilaishuichina 2014-05-16
  • 打赏
  • 举报
回复
加上权值呗 比如你给的这组数据 我们遍历一遍 可以先得到3个假定的正常数据 3,6,7 然后权值为(这里占定为个数) 5,7,1 权值最大的的为最终的正常数据,就是6.x
u_corder 2014-05-16
  • 打赏
  • 举报
回复
kalman算法: http://wenku.baidu.com/link?url=hnO7vTspaa23PFQ-hWVVw97woLWNjuwa4N2CWHLN9MfmMfF2CpHj50meDyg5z9RNDgQH-J-ODv0bj_uNoKa770xT-mikOoVzgbSLEnxPS03 网上有现成的C源码算法
kivien 2014-05-15
  • 打赏
  • 举报
回复
我觉得,想要去除异常值,那么至少要知道哪些是不异常的,也就是说要确定正常值的范围(长度大概为2)。 正常值确定:个人觉得,一般的数据库正常值是最多的(不完全正确的推理)。又数据库是大量的,那么数据有一定程度是随机的,就是说正常值在数据库基本上是平均分布的,那么随便一段数据(足够大,但程序处理时间不长)中可以找到正常值的范围。然后根据实际数据统计进行修正,这过程中去除异常值。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧