正态分布3σ原则,把3倍方差之外的点设想为噪声数据来排除。

归一化,将数据经过处理之后限定到一定的范围内,一般都会将数据限定到[0,1]。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <fstream>
#include <sstream>

template <class DataType>
void ReadDataFromFile(std::string &filename, std::vector<std::vector<DataType> > &lines_feat) {
  std::ifstream vm_info(filename.c_str());
  std::string lines;
  DataType var;
  std::vector<DataType> row;

  lines_feat.clear();

  while(!vm_info.eof()) {
    getline(vm_info, lines);
    if(lines.empty())
      break;
    std::stringstream stringin(lines);
    row.clear();

    while(stringin >> var) {
      row.push_back(var);
    }
    lines_feat.push_back(row);
  }
}

template <class DataType>
void Display2DVector(std::vector<std::vector<DataType> > &vv) {
  std::cout<<"the total rows of 2d vector_data: "<<vv.size()<<"\n";

  for(size_t i=0;i<vv.size();++i) {
    for(typename::std::vector<DataType>::const_iterator it=vv[i].begin();it!=vv[i].end();++it) {
      std::cout<<*it<<" ";
    }
    std::cout<<"\n";
  }
  std::cout<<"--------the end of the Display2DVector()--------\n";
}

template <class DataType>
void ProcessVector(std::vector<std::vector<DataType> > &vv) {
  std::vector<double> temp;
  double u[3]={0.0}, sum[3]={0.0}, sigma[3]={0.0};
  for(size_t j=0; j<3; ++j) {
    temp.clear();
    for(size_t i=0; i<vv.size(); ++i) {
      temp.push_back(vv[i][j]);
    }
    sum[j]=std::accumulate(temp.begin(), temp.end(), 0);
    u[j]=sum[j]/vv.size();
  }

  for(size_t j=0;j<3;++j) {
    temp.clear();
    sum[j]=0.0;
    for(size_t i=0;i<vv.size();++i) {
      temp.push_back(std::pow(vv[i][j]-u[j], 2.0));
    }
    sum[j]=std::accumulate(temp.begin(), temp.end(), 0.0);
    sigma[j]=sum[j]/vv.size();
    sigma[j]=sqrt(sigma[j]);
  }

  double MaxValue[3]={0.0}, MinValue[3]={0.0};
  for(size_t j=0;j<3;++j) {
    temp.clear();
    for(size_t i=0;i<vv.size();++i) {
      if((vv[i][j]>(u[j]-3*sigma[j])) && (vv[i][j]<(u[j]+3*sigma[j]))) {
        std::cout<<vv[i][j]<<" ";
      temp.push_back(vv[i][j]);
      }
    }
    std::cout<<"\n";
    MaxValue[j]=*std::max_element(temp.begin(), temp.end());
    MinValue[j]=*std::min_element(temp.begin(), temp.end());
  }

  for(size_t j=0;j<3;++j) {
    for(size_t i=0;i<vv.size();++i) {
      if((vv[i][j]>(u[j]-3*sigma[j])) && (vv[i][j]<(u[j]+3*sigma[j]))) {
        std::cout<<(vv[i][j]-MinValue[j])/(MaxValue[j]-MinValue[j])<<" ";
      }
    }
    std::cout<<"\n";
  }
}

int main() {
  std::vector<std::vector<int> > lines_feat;
  std::string filename="vm.data";

  /*read data from file to 2d vector*/
  ReadDataFromFile(filename, lines_feat);

  /*display the raw data*/
  Display2DVector(lines_feat);

  /*process the data*/
  ProcessVector(lines_feat);

  std::cout<<"--------The end of main()--------\n";

  return 0;
}

源数据如下(cat vm.data):

19 26 63
13 62 65
16 69 15
14 56 17
19 6 15
11 42 15
18 58 36
12 77 33
10 75 47
15 54 70
10017 1421077 4196

c++ 数据预处理(数据去噪,归一化)的更多相关文章

  1. Python数据预处理(sklearn.preprocessing)—归一化(MinMaxScaler),标准化(StandardScaler),正则化(Normalizer, normalize)

      关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常 ...

  2. sklearn中的数据预处理----good!! 标准化 归一化 在何时使用

    RESCALING attribute data to values to scale the range in [0, 1] or [−1, 1] is useful for the optimiz ...

  3. spark 数据预处理 特征标准化 归一化模块

    #We will also standardise our data as we have done so far when performing distance-based clustering. ...

  4. Python数据预处理:机器学习、人工智能通用技术(1)

    Python数据预处理:机器学习.人工智能通用技术 白宁超  2018年12月24日17:28:26 摘要:大数据技术与我们日常生活越来越紧密,要做大数据,首要解决数据问题.原始数据存在大量不完整.不 ...

  5. 机器学习PAL数据预处理

    机器学习PAL数据预处理 本文介绍如何对原始数据进行数据预处理,得到模型训练集和模型预测集. 前提条件 完成数据准备,详情请参见准备数据. 操作步骤 登录PAI控制台. 在左侧导航栏,选择模型开发和训 ...

  6. Python数据挖掘——数据预处理

    Python数据挖掘——数据预处理 数据预处理 数据质量 准确性.完整性.一致性.时效性.可信性.可解释性 数据预处理的主要任务 数据清理 数据集成 数据归约 维归约 数值归约 数据变换 规范化 数据 ...

  7. 机器学习实战基础(八):sklearn中的数据预处理和特征工程(一)简介

    1 简介 数据挖掘的五大流程: 1. 获取数据 2. 数据预处理 数据预处理是从数据中检测,纠正或删除损坏,不准确或不适用于模型的记录的过程 可能面对的问题有:数据类型不同,比如有的是文字,有的是数字 ...

  8. Python数据预处理—归一化,标准化,正则化

    关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常用的 ...

  9. 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化

    一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std  计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并处以其方差.得到的结果是,对于每个属 ...

随机推荐

  1. js分页插件

    //分页插件1function showView(option) {    //参数定义id,页容量,当前页,总数,页总数    var id = option.id,         pageSiz ...

  2. (转)Hibernate关联映射——一对多(多对一)

    http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射——一对多(多对一) 我们以客户(Customer)与 ...

  3. day07补充-数据类型总结及拷贝

    目录 数据类型总结 按照存一个值 OR 多个值来分 按照有序 OR 无序来分 按照可变 OR 不可变来分 拷贝 && 浅拷贝 && 深拷贝&& .cop ...

  4. day41 网络编程

    目录 网络架构 单机架构 CS架构 BS架构 互联网和互联网的组成(教材版) 边缘部分: 核心部分: 互联网的组成 硬件 软件 打开网页的过程(科普版) 物理层 数据链路层 网络层 传输层 抽象层 网 ...

  5. Oracle,sqlserver,mySQl的区别和联系:

    1.日期处理方式 2.对保留字和关键字的处理方式: Oracle,sqlserver,mySQl的保留字不可以用作列字段,关键字可以,但他们对关键字的处理方式又不同: Oracle:关键字作为列时:用 ...

  6. [nodejs]在mac环境下如何将node更新至最新?

    在mac下安装angular-cli时,报出较多错误.初步怀疑是因为node环境版本过低导致. 在mac下,需要执行如下几步将node更新至最新版本,也可以更新到指定版本 1. sudo npm ca ...

  7. 《零压力学Python》 之 第一章知识点归纳

    第一章(初识Python)知识点归纳 Python是从ABC语言衍生而来的 ABC语言是Guido参与设计的一种教学语言,为非专业编程人员所开发的. Python是荷兰程序员 Guido Van Ro ...

  8. 9.2 Socket编程

    远程管理软件和黑客软件大多依赖于Socket来实现特定功能,前几年流行的端口反弹更是把这项技术发挥到了极致. 如前所述,UDP和TCP是网络体系结构的传输层运行的两大重要协议,其中,TCP适用于对效率 ...

  9. 平衡树前置——BST

    上一节:平衡树——序 BST(Binary Search Tree)二叉排序树,其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: ①若它的左子树非空,则左子树上所有结点的值均小于根结点的值 ...

  10. [LeetCode] 887. Super Egg Drop 超级鸡蛋掉落

    You are given K eggs, and you have access to a building with N floors from 1 to N.  Each egg is iden ...