noisegen.java

来自「Java语言实现的支持向量机的源码。对研究人工智能的朋友有用。」· Java 代码 · 共 100 行

JAVA
100
字号
package util;

import umontreal.iro.lecuyer.probdist.NormalDist;
import umontreal.iro.lecuyer.randvar.NormalGen;
import umontreal.iro.lecuyer.randvarmulti.MultiNormalGen;
import umontreal.iro.lecuyer.rng.LFSR113;
import umontreal.iro.lecuyer.rng.RandomStream;

public class NoiseGen
{
	//噪声的均值
	protected double[] mean;
	//协方差
	protected double[][]cov;
	//维数
	protected int dem;
	//多元正态分布产生器
	protected MultiNormalGen multiNormalGen;
	
	//如果各维是相互独立的,则协方差矩阵是一个对角矩阵
	public NoiseGen(double[] mean,double[] der)
	{
		this.mean=mean;
		dem=mean.length;
		cov=new double[dem][dem];
		for(int i=0;i<dem;i++)
		{
			for(int j=0;j<dem;j++)
			{
				if(i==j)
					cov[i][j]=der[i];
				else
					cov[i][j]=0;
			}
		}
	}
	
	public NoiseGen(double[] mean,double[][] cov)
	{
		this.mean=mean;
		this.cov=cov;
	}
	
	//定义多元正态分布产生器
	public void GenNorDistributiion()
	{
		RandomStream rs=new LFSR113();
		NormalDist noralDist=new NormalDist();
		NormalGen normalGen=new NormalGen(rs,noralDist);
		multiNormalGen=new MultiNormalGen(normalGen,mean,cov);
	}
	
	public double[] getNoise()
	{
		double[] noise=new double[dem];
		multiNormalGen.nextPoint(noise);
		return noise;
	}
	public void printMultiNorm()
	{
		double[] nextValue=new double[dem];
		multiNormalGen.nextPoint(nextValue);
		for(int i=0;i<nextValue.length;i++)
		{
			System.out.print(nextValue[i]+"  ");
		}
		System.out.println();
	}
	
	public static void main(String[] args)
	{
		int dem=4;
		double[] mean=new double[dem];
		double[][] cov=new double[dem][dem];
		
		for(int i=0;i<dem;i++)
		{
			mean[i]=0;
		}
		
		for(int i=0;i<dem;i++)
		{
			for(int j=0;j<dem;j++)
			{
				if(i==j)
					cov[i][j]=1.0;
				else
					cov[i][j]=0;
			}
		}
		NoiseGen noiseGen=new NoiseGen(mean,cov);
		noiseGen.GenNorDistributiion();
		
		for(int i=0;i<100;i++)
		{
			noiseGen.printMultiNorm();
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?