c++ 数据预处理(数据去噪,归一化)

摘要:
字符串&vector&lt:vector<行;lines_feat.clear();字符串字符串(行);&cout&lt:vv.size()<&lt:&vector<++i) {temp.push_back(std;j<++j){temp.clear();i<

正态分布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()<<" ";

  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<<" ";
  }
  std::cout<<"--------the end of the Display2DVector()-------- ";
}

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<<" ";
    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<<" ";
  }
}

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()-------- ";

  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++ 数据预处理(数据去噪,归一化)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇javascript js获取url及url参数解析UTL_FILE 的用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

XML格式以及相关libxml库学习

本文参考 XML文件格式语法以及DTD,摘除其中自己认为必要的知识点,在此记录如下。 先给出一个xml的实例文件, <?xml version="1.0" encoding="utf-8"?> <gadget> <name>日历</name> <namespace> <...

几种常见的排序算法分析

选择排序 选择排序是一种非常直观且简单的排序算法。它工作的流程是这样的: 首先找出数组中最小的那个元素,将它和数组的第一个元素交换位置;然后在第二个到最后一个元素中间找到最小的那个元素与数组的第二个元素交换位置。 就这样依次遍历,直到将整个数组排序。 选择排序不是稳定排序,但是是原地排序,时间复杂度是平方级,空间复杂度为1。 C++代码实现如下: #inc...

访问vector元素方法的效率比较(转)

LInux下: gcc 4.47,red hat6 1 #include<iostream> 2 #include<vector> 3 #include<time.h> 4 using namespace std; 5 6 7 8 int main() { 9 //建立4个...

将 Spring boot 项目打成可执行Jar包,及相关注意事项(main-class、缺少 xsd、重复打包依赖)

最近在看 spring boot 的东西,觉得很方便,很好用。对于一个简单的REST服务,都不要自己部署Tomcat了,直接在 IDE 里 run 一个包含 main 函数的主类就可以了。 但是,转念一想,到了真正需要部署应用的时候,不可能通过 IDE 去部署啊。那有没有办法将 spring boot 的项目打包成一个可执行的 jar 包,然后通过 ja...

转载:SQL注入演示demo

网上看到的一个SQL注入的演示demo,很完整所以转载过来,分享给大家。先要感谢作者!!   作者:潘良虎链接:http://www.zhihu.com/question/22953267/answer/80141632来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Web安全简史在Web1.0时代,人们更多是关注服务器端...

使用C++ 实现的 websocket 客户端 (基于easywsclient)

直接上代码 easywsclient.hpp #ifndef EASYWSCLIENT_HPP_20120819_MIOFVASDTNUASZDQPLFD #define EASYWSCLIENT_HPP_20120819_MIOFVASDTNUASZDQPLFD // This code comes from: // https://github.co...