• 模式识别


    处理特征数据 及 代码


    本文地址: http://blog.csdn.net/caroline_wendy/article/details/26240241


    输入文件: 

    1. 归一化后的特征文件, 第1列是标签, 其余列是特征;

    2. 特征最大值向量文件: 前3列是标准格式, 其余列是最大值;

    输出文件:

    1. 符合SVM训练数据的特征格式;

    2. Mat存储的标准XML文件;


    代码:

    /*
    处理特征数据程序
    By C.L.Wang
    数据格式:
    特征数据: 第1列是标签, 其余列是特征;
    最大值数据: 前3列是标准格式, 其余列是最大值;
    转换为: SVM通用格式, 训练SVM的model; 转换为OpenCV矩阵的存储Mat;
    */
    
    #include <iostream>
    #include <string>
    #include <vector>
    #include <fstream>
    
    #include <opencv.hpp>
    
    /*转换SVM数据格式*/
    
    void transformSvmData (
    	const std::string _inputFileName, /*输入数据文件*/
    	const std::string _outputFileName, /*输出数据文件*/
    	const int _rows, /*行数, 自设*/
    	const int _cols /*列数, 自设*/
    )
    {
    	//const int rows (800); //行数, 自设
    	//const int cols (104); //列数, 自设
    	cv::Mat trainData = cv::Mat(_rows, _cols, CV_64FC1);
    
    	/*读取文件*/
    
    	std::ifstream file_data(_inputFileName);
    	if (file_data.fail()) {
    		std::cerr << "Failed to open the file!" << std::endl;
    		return;
    	}
    	for (int i=0; i<_rows; ++i) {
    		for (int j=0; j<_cols; ++j) {
    			file_data >> trainData.at<double>(i,j);
    		}
    	}
    	file_data.close();
    
    	/*转换SVM格式*/
    
    	std::ofstream svmData(_outputFileName);
    	for (int i=0; i<_rows; i++)
    	{
    		svmData << trainData.at<double>(i, 0) << " ";
    
    		for (int j=1; j<_cols-1; j++) { //少1行
    			svmData << j << ":" << trainData.at<double>(i, j) << " ";
    		}
    
    		svmData << _cols-1 << ":" << 
    			trainData.at<double>(i,_cols-1) << std::endl; //最后一行不加空格
    	}
    	svmData.close();
    
    	return;
    }
    
    /*转换归一化向量*/
    
    void transformNormXML (
    	const std::string _maxFileName,
    	const int _cols /*列数, 自设*/
    	)
    {
    	const int rows = 1;
    	//const int cols = 104; //列数, 自设
    
    	/*读取文件*/
    
    	cv::Mat normMat = cv::Mat(rows, _cols, CV_64FC1);
    	std::ifstream maxData(_maxFileName, std::ifstream::in);
    	if (maxData.fail()) {
    		std::cerr << "Failed to open the file!" << std::endl;
    		return;
    	}
    	for (int i=0; i<rows; ++i) {
    		for(int j=0; j<_cols; ++j){
    			maxData >> normMat.at<double>(i,j);
    		}
    	}
    	maxData.close();
    
    	/*写入XML*/
    
    	cv::FileStorage fileXml("normalization.xml", cv::FileStorage::WRITE);
    	fileXml << "normalization" << normMat; //标签
    	fileXml.release();
    
    	return;
    }
    
    int main() 
    {
    	const std::string input_file_name = "violence_norm_matlab.txt"; /*输入数据文件*/
    	const std::string output_file_name = "violence_norm_svm.txt"; /*输出数据文件*/
    	const int rows = 843; /*输入文件行数, 自设*/
    	const int cols = 102; /*输入文件列数, 自设*/
    	transformSvmData(input_file_name, output_file_name, rows, cols);
    
    	const std::string max_file_name = "violence_max_matlab.txt";
    	transformNormXML(max_file_name, cols+2); //和曾经标准统一
    
    	std::cout << "Program Over! " << std::endl;
    
    	return 0;
    }




  • 相关阅读:
    列出python中可变数据类型和不可变数据类型,并简述原理
    python 字典操作
    Python的is和==
    python2和python3区别
    下面的代码在Python2中的输出是什么?解释你的答案
    编程用sort进行排序,然后从最后一个元素开始判断,去重
    如何在一个function里面设置一个全局的变量?
    用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
    请写出一段Python代码实现删除一个list里面的重复元素
    什么是lambda函数?它有什么好处?
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5096337.html
Copyright © 2020-2023  润新知