Constructive Covering Algorithm

本文档介绍了一种基于构造覆盖算法(CCA)的三元组决策模型,作者用Java实现了该算法。文章首先加载数据,然后将数据集划分为训练集和测试集,接着对样本进行归一化和升维处理。算法通过计算样本间的欧式距离,形成覆盖,用于训练和测试。最后,评估了模型的性能。
摘要由CSDN通过智能技术生成

以前看的一篇paper:A Three-Way Decisions Model Based on Constructive Covering Algorithm,按照自己的理解用java实现了论文的代码。


package ConstructiveCoveringAlgorithm;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class CCA {

public static int num_features=4;//样本属性值

//样本类,存储每个样本的数据
public class Sample
{
private double[] attributes=new double[num_features];//样本属性值
private double[] attr=new double[num_features+1];//升维后的样本属性,即该样本的覆盖中心
private int label;//样本标签
private int prediction;//经过LR得到的决策值
private double radium;//改样本的覆盖半径
Sample(double[] attributes,int label)
{
for(int i=0;i<this.attributes.length;i++)
{
this.attributes[i]=attributes[i];
this.attr[i]=attributes[i];
}
this.label=label;
this.prediction=label;
this.radium=0;
}
public double[] getAttributes()//获得样本的属性
{
return this.attr;
}
public void setAttributes(int i,double value)//设置样本对应的属性值
{
this.attr[i]=value;
}
public int getLabel()//获得样本的标签
{
return this.label;
}
public double getPrediction()//获得样本的决策值
{
return this.prediction;
}
public void setPrediction(int value)//设置样本的决策值
{
this.prediction=value;
}
public double getRadium()//获得样本的覆盖半径
{
return this.radium;
}
public void setRadium(double value)//设置样本的覆盖半径
{
this.radium=value;
}

}

public void load_datas(String path,ArrayList<Sample> sampleSet)
{
String line;//记录从数据集中读取的行数据
String[] s ;//存储从数据集中读出的行数据分割后的样本属性和标签
double[] attributes=new double[num_features];//存储每个样本的属性值
FileReader fr =null;
BufferedReader bufr = null ;
try
{
fr = new FileReader(path);
bufr= new BufferedReader(fr);
//读取训练样本
while((line = bufr.readLine())!=null)
{
s = line.split(",");
for(int i=0;i<num_features;i++)//将获得的样本属性值转为double类型
{
attributes[i]=Double.parseDouble(s[i]);
}
sampleSet.add(new Sample(attributes,Integer.parseInt(s[s.length-1].trim())));
}
}
catch(IOException e){}
finally
{
try
{
if(bufr!=null)
bufr.close();
}
catch(IOException e){

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值