import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
public class BP {
List<String> data_var=new ArrayList<String>();//存储输入的变量数据
List<String> data_tag=new ArrayList<String>();//存储输入的类别数据
String[] kinds; //用户存储类别的变量,kinds[0]表示第0类对应的类别名称
public float[][][] w=new float[50][50][50];//存储层与层连接边的权重,我w[i][j][k]表示第i个层隐藏层的w[][]权重值,具体:第i-1层的第j个节点与第i层的第k个节点连接边的权重
public float[][] beta=new float[50][50];//存储节点的偏移量,beta[i][j]表示第i个隐藏层中,第j个节点的偏倚量.
public BP() throws IOException{//函数作用:数据初始化,从文件读入输入的:变量数据、类别数据,对类别数据类别数量划分一条数据的列数.
for(int i=0;i<50;i++){
for(int j=0;j<50;j++){
for(int k=0;k<50;k++){
w[i][j][k]=(float)Math.random();
}
beta[i][j]=(float)Math.random();
}
}
BufferedReader br=new BufferedReader(new FileReader("F:/数据挖掘--算法实现/BP算法/input.txt"));
String line="";
while((line=br.readLine())!=null){
data_tag.add(line.split(" ",2)[0]);
data_var.add(line.split(" ",2)[1]);
}
HashSet<String> set=new HashSet<String>();
for(int i=0;i<data_tag.size();i++){
set.add(data_tag.get(i));
}
kinds=new String[set.size()];
int i=0;
Iterator<String> Iter=set.iterator();
while(Iter.hasNext()){
this.kinds[i]=Iter.next();
i++;
}
for(int j=0;j<data_tag.size();j++){
String tmp="";
for(i=0;i<kinds.length;i++){
if(kinds[i].equals(data_tag.get(j))){
tmp=tmp+" "+"1";
}else{
tmp=tmp+" "+"0";
}
}
dat