⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 instancetest.java

📁 改进的k-means方法
💻 JAVA
字号:
package aaa;
import java.io.FileReader;
import weka.core.Instances;
import java.math.*;


public class InstanceTest{
	//文件函数
    public static Instances getFileInstances( String fileName ) throws Exception{
    	FileReader frData = new FileReader( fileName );
        Instances data = new Instances( frData );
        return data;
    }
    //期望函数
    public double Mean(int[] shuzu,int shuzunum){
    	int k;
    	double sum=0,mean=0;
    	for(k=0;k<shuzunum;k++)
			sum+=shuzu[k];
		for(k=0;k<shuzunum;k++)
			mean+=Math.pow(shuzu[k],2)/(sum*1.0);
		return mean;
    }
    //方差函数
    public double Square(int[] shuzu,double mean,int shuzunum){
    	int k;
    	double square=0,sum=0;
    	for(k=0;k<shuzunum;k++)
			sum+=shuzu[k];
    	for(k=0;k<shuzunum;k++)
			square+=Math.pow(shuzu[k]-mean, 2)*shuzu[k]/(sum*1.0);
		return square;
    }
    public InstanceTest()throws Exception{
    	int i=0,k;
		String str;
		weka.core.Attribute att;
		//读取文件
		Instances ins=getFileInstances("D://Program Files//学习类//weka//Weka-3-5//data//iris.arff");
		//选择出类	
			
		for(i=0;i<ins.numAttributes();i++){
			att=ins.attribute(i);
			str=att.name();
			if(str.compareTo("class")==0){
				ins.setClass(att);
				ins.setClassIndex(i);
				System.out.println(str+'\n');
			}
		}
		//统计实例中的每个类别的元素的个数
		if(ins.numClasses()==0)
			System.out.println("没有类被选中");
		else{
			att=ins.classAttribute();
			int[] num=new int[att.numValues()];
			for(i=0;i<ins.numInstances();i++){
				for(k=0;k<att.numValues();k++)
					if(ins.instance(i).stringValue(att)==att.value(k)){
						num[k]++;
					}
			}
			//显示类别的名称和对应的元素的个数
			for(k=0;k<att.numValues();k++){
				System.out.println(""+att.value(k)+'\n');
				System.out.println(""+num[k]+'\n');
			}
			//区分少数类
			double sum=0,mean=0, square=0,deviation=0;
			//求和
			for(k=0;k<att.numValues();k++)
				sum+=num[k];
			//期望值
			mean=Mean(num,att.numValues());
			//方差
			square=Square(num,Mean(num,att.numValues()),att.numValues());
			//协方差
			deviation=Math.pow(square, 0.5);
			//区分少数类:标准是低于期望的且与期望的差值大于方差的称为少数类,其余的都是多数类
			for(k=0;k<att.numValues();k++){
				if(num[k]<mean&&Math.abs(num[k]-mean)>deviation)
					for(i=0;i<ins.numInstances();i++){
						if(ins.instance(i).stringValue(att)==att.value(k))
							ins.instance(i).setWeight(sum/(num[k]*1.0));
					}
			}
		}
				
    }
    public static void main(String[] args) throws Exception{
    	InstanceTest inss=new InstanceTest();
    	/*Instances instances = getFileInstances( "D://Program Files//学习类//weka//Weka-3-5//data//iris.arff");
        //把数据集全部输入出
        //System.out.println( instances );
        //用numInstances可以获得数据集中有多少样本
    	instances.setClassIndex(4);
    	weka.core.Attribute att=instances.attribute("class");
    	if(att.isNominal())
    		System.out.println(att.numValues()+"");
    	else
    		System.out.println("00000");*/
        /*for( int i = 0; i < instances.numInstances(); i++ )

        {
        	

            //instance( i )是得到第i个样本

        	 System.out.println( instances.attribute(4).type()+"" ); 
        	 System.out.println( instances.numClasses()+"" );
        	// System.out.println( Attribute.value());

        }*/

    }

}

⌨️ 快捷键说明

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