归一化小程序

Posted 劲火星空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归一化小程序相关的知识,希望对你有一定的参考价值。


一、---功能---



将一列数据按照归一化公式来进行归一化,什么是归一化,这是数据处理中的一种数据的预处理手段,比如最大值是1000、最小值是0,将300进行归一化之后的结果就是0.3,就是将数据限制在0--1之内。

二、---过程---


(1)将表格中的数据复制到txt文件中(因为java中表格的jar包不是很好用,这里暂时用的txt文件)
(2)通过遍历每一行数据得到最大和最小值
(3)通过最大最小值对数据进行归一化
(4)将归一化后的数据写入另一个文档中


三、---程序---


package Question;
import java.io.*;
import java.text.DecimalFormat;

public class Normalization {
	
	public static void main(String args[]) throws Exception{
		// 定义一个输入流用来获取最大和最小值
		FileReader file = null;
		BufferedReader buffer = null;  
		file = new FileReader("D:\\num.txt"); 
		buffer = new BufferedReader(file);
		
		// 定义文件的输入流
		String str = null;
		
		FileReader fr = null;
		BufferedReader br = null;  
		fr = new FileReader("D:\\from.txt");  
		
		// 定义文件的输出流
		FileWriter fw = null;
		BufferedWriter bw = null;  
		fw = new FileWriter("D:\\to.txt");  
		
		br = new BufferedReader(fr);
		bw = new BufferedWriter(fw);
		
		// 获得最大值和最小值
		// 注意这里的值一定要和数据的数量相对应
		double data[] = new double[8760];
		int flag = 0;
		
		//br.mark((int)file.length() + 1);
		
		while((str = buffer.readLine()) != null){
			double strNum = Double.parseDouble(str);
			data[flag] = strNum;
			flag++;
		}
		
		//br.reset(); 
		
		buffer.close();
		
		double maxNum = findMaxNum(data);
		double minNum = findMinNum(data);
		
		System.out.println("min = "+minNum);
		System.out.println("max = "+maxNum);
		
		int temp = 0;
		
		while((str = br.readLine()) != null){
			
			// 将字符串转换成数值
			double strNum = Double.parseDouble(str);
			
			// 将数组进行归一化操作,返回的就是字符串类型了
			String afterNormal = NumToOne(strNum, maxNum, minNum);
			
			//System.out.println(afterNormal);
			temp++;
			
			// 将字符串写入另一个文件
            bw.write(afterNormal);  
            bw.newLine();  
            bw.flush();  
			
		}
		br.close();
		System.out.println("共处理数据  "+temp+" 行");
	}
	
	// 遍历数组找到最大值
	public static double findMaxNum(double data[]){
		double max = 0;
		for(int i = 0; i < data.length; i++){
			if(data[i] > max){
				max = data[i];
			}
		}
		return max;
	}
	
	// 遍历数组找到最小值
	public static double findMinNum(double data[]){
		double min = data[0];
		for(int i = 1; i < data.length; i++){
			if(data[i] == 0){
				System.out.println("为0的元素是:"+(i + 1));
			}
			if(data[i] <= min){
				min = data[i];
			}
		}
		return min;
	}
	
	// 对某个数进行归一化处理
	public static String NumToOne(double num, double max, double min){
		double numChange = (num - min)/(max - min);
		
		DecimalFormat d  = new DecimalFormat("0.00000");
		return d.format(numChange);
	}
}


四、---缺陷---



(1)没有将文件的指针复位
(2)只能处理一列数据,并且是在txt文档中


以上是关于归一化小程序的主要内容,如果未能解决你的问题,请参考以下文章

模式识别 - 特征归一化 及 測试 代码(Matlab)

matlab中怎样将矩阵归一化处理?

matlab中啥叫归一化坐标

数据的归一化处理

matlab 怎样进行数据归一化

在matlab中怎么做数据归一化处理?