我的decision实现
来源:互联网 发布:欧美女歌手 知乎 编辑:程序博客网 时间:2024/05/01 01:07
import java.io.*;
import java.util.*;
public class c{
public static void main(String args[]){
File f = new File("E:/DEV_S/data.txt");
if(!f.exists()||f.isDirectory())
{
System.out.println("Doesn't exists or is a Directory!");
return;
}
/* 高效读取
FileInputStream fis = new FileInputStream(f);
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
while(-1 != (fis.read(buf))){
sb.append(new String(buf));
System.out.println(sb);
System.out.println("---");
}*/
/*
逐行读取
*/
String line = "";
int recordCnt = 10;
int attriCnt[] = {3,3,2,2};
String[][] arr = new String[recordCnt][attriCnt.length];
try{
BufferedReader br = new BufferedReader(new FileReader(f));
String[] lines = new String[4];
int rowCnt = 0;
while(null != (line = br.readLine())){
lines = line.split(",");
for(int i=0; i<4; i++){
arr[rowCnt][i] = lines[i];
}
rowCnt++;
}
}catch(Exception e){
e.printStackTrace();
}
TreeNode nt = new TreeNode("root");
List<TreeNode> nl =
parti(arr,attriCnt,nt);
nt.setNodeList(nl);
System.out.println();
System.out.println("打印....");
String space = " ";
printNode(nt,space);
//getSon(arr,attriCnt,2,"no1");
//getGain(arr,attriCnt,0);
//System.out.println(getGain(arr,attriCnt,1));
//System.out.println(log2(2));
/*
//String[][] string = {{"s","no1","no"},{"l","yes1","yes"},{"s","yes1","no"}};
String[][] string = //{{"s","no1","no"},{"l","yes1","yes"},{"s","yes1","no"}};
//{{"m","yes1","yes" },{ "m","yes1","yes"},{ "m","no1","yes"}};
{{"m","yes1","yes " },{ " l","no1","yes " },{ " s","no1","no " },{ " s","no1","yes "}};
String[][] string = {{"no1","no"},{"no1","yes"}};
//int[] in = {3,2,2};
//int[] in = {2,2};
List<TreeNode> n2 = parti(string,in,nt);
nt.setNodeList(n2);
System.out.println();
System.out.println("打印....");
String space = " ";
printNode(nt,space);*/
}
public static List<TreeNode> parti(String[][] arr, int[] attriCnt, TreeNode nt ){
if(attriCnt.length<2)
return null;
//System.out.println();
double gain = 0;
double minGain = 100;
double maxGain = 0;
int index = 0;
int index_max = 0;
String minKey = "";
String minClass = "";
double gainArr[] = new double[attriCnt.length-1];
Map<String,Integer> indOfAttiValue_index = new HashMap<String,Integer>();
Map<String,Integer> indOfClass_index = new HashMap<String,Integer>();
Map<Integer,Set<String>> indOfValues = new HashMap<Integer,Set<String>>();
/*
System.out.println();
System.out.println();
for(int i = 0; i<arr.length; i++){
String str = "";
for(int j=0; j<arr[0].length; j++){
str += arr[i][j]+",";
}
System.out.println(str);
str = "";
}
System.out.println("-----------上面是待处理数据 下面是期望--------");*/
int ind=0;
String matrix_index = "";
String matrix_index_max = "";
for(; ind<attriCnt.length-1;ind++){
//gain = getGain(arr,attriCnt,ind);
int ClassInd = attriCnt[attriCnt.length-1]+1; //类数目
int matrix[][] = new int[attriCnt[ind]][ClassInd]; //曾毅
Map<String,Integer> indOfAttiValue = new HashMap<String,Integer>();
Map<String,Integer> indOfClass = new HashMap<String,Integer>();
for(int i=0; i<arr.length; i++){
if(null == arr[i][ind]){
break;
}
//System.out.println("i: "+i+", arr[0].length-1: "+ (arr[0].length-1));
Integer row = indOfAttiValue.get(arr[i][ind]);
Integer col = indOfClass.get(arr[i][arr[0].length-1]);
if(null == row){
row = indOfAttiValue.size();
indOfAttiValue.put(arr[i][ind],indOfAttiValue.size());
Set<String> set = indOfValues.get(ind);
if(null == set){
set = new HashSet<String>();
}
set.add(arr[i][ind]);
indOfValues.put(ind,set);
}
if(null == col){
col = indOfClass.size();
indOfClass.put(arr[i][arr[0].length-1],indOfClass.size());
}
/*System.out.println(row);
System.out.println(arr[i][ind]);
System.out.println(col);
System.out.println(arr[i][ClassInd]);*/
matrix[row][col]++;
matrix[row][ClassInd-1]++;
//System.out.println();
}
/*System.out.println(attriCnt[ind]);
System.out.println(ClassInd);*/
/*for(int i=0; i<attriCnt[ind]; i++){
for(int j=0; j<ClassInd; j++){
System.out.println(matrix[i][j]);
}
System.out.println();
}*/
float tmp = 0;
float cnt = 0;
//double g = 0;
for(int i=0; i<attriCnt[ind]; i++){
for(int j=0; j<ClassInd-1; j++){
//System.out.println(i+","+j+"--->"+matrix[i][ClassInd-1] +"," +matrix[i][j]);
cnt = matrix[i][ClassInd-1];
if((matrix[i][ClassInd-1] != matrix[i][j]) && (0 != matrix[i][j]) ){
//System.out.println(matrix[i][j]+", "+matrix[i][ClassInd-1]);
tmp = matrix[i][j];
float new_tmp = tmp/cnt;
//System.out.println(new_tmp);
gain -= new_tmp*log2(new_tmp);
}
}
}
//gain = getGain(arr,attriCnt,ind);
System.out.println(gain);
gainArr[ind]= gain;
if(minGain > gain){
minGain = gain;
index = ind;
indOfAttiValue_index = indOfAttiValue;
indOfClass_index = indOfClass;
matrix_index = "";
for(int i= 0; i< attriCnt[ind];i++){
for(int j=0; j< ClassInd; j++){
matrix_index += matrix[i][j]+",";
//System.out.println(matrix[i][j]);
}
//System.out.println();
matrix_index += ";";
}
}
if((maxGain <gain)&&(attriCnt.length <= 2)){
maxGain = gain;
index_max = ind;
for(int i= 0; i< attriCnt[ind];i++){
for(int j=0; j< ClassInd; j++){
matrix_index_max += matrix[i][j]+",";
//System.out.println(matrix[i][j]);
}
//System.out.println();
matrix_index_max += ";";
}
}
}
//System.out.println(index);
//System.out.println(minGain);
System.out.println("gainArr.length"+gainArr.length);
System.out.println("index"+index);
System.out.println("haha: "+gainArr[index]);
List<TreeNode> nodeList = new ArrayList<TreeNode>();
/*if(gainArr[index] < Math.pow(10,-5))
{
System.out.println("孙子代到达---》");
System.out.println(index);
System.out.println(matrix_index);
TreeNode nt_index = new TreeNode(arr[0][index]);
nt_index.setParent(nt);
nt_index.setValue(arr[0][index]+"你到家了!");
nt_index.setClass1(arr[0][arr[0].length-1]);
nt_index.setNodeList(null);
nodeList.add(nt_index);
//
if(attriCnt.length < 2){
return nodeList;
}
}*/
/*if((attriCnt.length <= 2) &&(gainArr[index] > Math.pow(10,-5))){
//List<TreeNode> nodeList = new ArrayList<TreeNode>();
TreeNode nt_index = new TreeNode(arr[0][index_max]);
nt_index.setParent(nt);
nt_index.setValue(arr[0][index_max]);
nt_index.setValue("我到家了~~~");
nt_index.setClass1(arr[0][arr[0].length-1]);
nt_index.setNodeList(null);
nodeList.add(nt_index);
return nodeList;
}*/
List<TreeNode> nodeList_inv = new ArrayList<TreeNode>();
//List<TreeNode> nodeList = new ArrayList<TreeNode>();
String key = "";
System.out.println();
System.out.println(matrix_index);
// 每次完成计
int des = 0;;
for(Map.Entry<String,Integer> entry: indOfAttiValue_index.entrySet()){
des++;
int row = indOfAttiValue_index.get(entry.getKey());
//int col = indOfClass_index.get("类名");
int col = attriCnt.length-1;
System.out.println("其他节点");
/*
System.out.println("row is:"+row);
System.out.println("col-1 is:" + (matrix_index.split(";")[row].split(",").length-1));*/
String num = matrix_index.split(";")[row].split(",")[matrix_index.split(";")[row].split(",").length-1];
key = entry.getKey();
System.out.println(key);
/*for(int i=0;i<arr.length;i++){
String str = "";
for(int j=0;j<arr[0].length;j++){
str += arr[i][j] + ",";
}
System.out.println(str);
}
System.out.println(Arrays.toString(attriCnt));
System.out.println("arr.length: "+arr.length+",arr[0].length: "+arr[0].length);
System.out.println("num: "+num+",arr[0].length-1: "+ (arr[0].length-1));*/
//getSon(arr, attriCnt, index, entry.getKey());
String[][] arr_son = new String[new Integer(num)][arr[0].length-1] ;
int[] attriCnt_son = new int[attriCnt.length-1];
int m = 0;
for(int i=0; i< arr.length; i++){
if(key.equals(arr[i][index])){
int n = 0;
for(int j =0; j<arr[0].length; j++){
if( j != index){
//System.out.println("m: "+m+",n: "+n);
//System.out.println("i: "+i+",j: "+j);
arr_son[m][n++] = arr[i][j];
}
}
m++;
}
}
int temp = 0;
for(Map.Entry<Integer,Set<String>> entry1: indOfValues.entrySet()){
temp = entry1.getKey();
if(entry1.getValue().contains(key)){
break;
}
}
System.out.println("属性对应矩阵横坐标:"+temp);
int k = 0;
for(int i=0;i<attriCnt.length;i++){
if( i != temp){
attriCnt_son[k++] = attriCnt[i];
}
}
//System.out.println(Arrays.toString(attriCnt_son));
//getSon(arr, attriCnt, index, entry.getKey());
for(int i=0;i<arr_son.length;i++){
String str = "";
for(int j=0;j<arr_son[0].length;j++){
str += arr_son[i][j] + ",";
}
System.out.println(str);
}
System.out.println(Arrays.toString(attriCnt_son));
System.out.println("---------------------------处理子代中:" + des+" ---------------------------------------");
TreeNode nt_index_inv = new TreeNode(key);
nt_index_inv.setParent(nt);
//nt_index_inv.setValue("child "+des+" ");
nodeList_inv = parti(arr_son,attriCnt_son,nt_index_inv);
if(null == nodeList_inv){
nt_index_inv.setValue(key);
nt_index_inv.setClass1(arr_son[0][arr_son[0].length-1]);
}
nt_index_inv.setNodeList(nodeList_inv);
nodeList.add(nt_index_inv);
//clean(String[][] arr, int[] attriCnt, int ind); //构建并digui
//parti(String[][] arr, int[] attriCnt);
}
return nodeList;
}
public static double getGain(String[][] arr, int[] attriCnt,int ind){ //数据、属性数目,计算曾毅列
int ClassInd = attriCnt[attriCnt.length-1]+1; //类数目
int matrix[][] = new int[attriCnt[ind]][ClassInd]; //曾毅
Map<String,Integer> indOfAttiValue = new HashMap<String,Integer>();
Map<String,Integer> indOfClass = new HashMap<String,Integer>();
for(int i=0; i<arr.length; i++){
if(null == arr[i][ind]){
break;
}
Integer row = indOfAttiValue.get(arr[i][ind]);
Integer col = indOfClass.get(arr[i][ClassInd]);
if(null == row){
row = indOfAttiValue.size();
indOfAttiValue.put(arr[i][ind],indOfAttiValue.size());
}
if(null == col){
col = indOfClass.size();
indOfClass.put(arr[i][ClassInd],indOfClass.size());
}
/*System.out.println(row);
System.out.println(arr[i][ind]);
System.out.println(col);
System.out.println(arr[i][ClassInd]);*/
matrix[row][col]++;
matrix[row][ClassInd-1]++;
//System.out.println();
}
/*System.out.println(attriCnt[ind]);
System.out.println(ClassInd);*/
/*for(int i=0; i<attriCnt[ind]; i++){
for(int j=0; j<ClassInd; j++){
System.out.println(matrix[i][j]);
}
System.out.println();
}*/
float tmp = 0;
float cnt = 0;
double g = 0;
for(int i=0; i<attriCnt[ind]; i++){
for(int j=0; j<ClassInd-1; j++){
//System.out.println(i+","+j+"--->"+matrix[i][ClassInd-1] +"," +matrix[i][j]);
cnt = matrix[i][ClassInd-1];
if((matrix[i][ClassInd-1] != matrix[i][j]) && (0 != matrix[i][j]) ){
//System.out.println(matrix[i][j]+", "+matrix[i][ClassInd-1]);
tmp = matrix[i][j];
float new_tmp = tmp/cnt;
//System.out.println(new_tmp);
g -= new_tmp*log2(new_tmp);
}
}
}
return g;
}
public static void getSon(String[][] arr, int[] attriCnt, int index, String key){
String[][] arr_son = new String[arr[0].length][arr.length] ;
int[] attriCnt_son = new int[attriCnt.length-1];
for(int i=0; i< arr.length; i++){
if(key.equals(arr[i][index])){
int j = 0;
for(int k =0; k<arr[0].length; k++){
if( k != index){
arr_son[j++] = arr[k];
System.out.println(arr[i][k]+",");
}
}
System.out.println();
}
}
int k = 0;
for(int i=0;i<attriCnt.length;i++){
if( i != index){
attriCnt_son[k++] = attriCnt[i];
System.out.println(attriCnt[i]+",");
}
}
/*String[][] arr_son = new String[arr[0].length][arr.length-1] ;
int[] attriCnt_son = new int[attriCnt.length-1];
for(int i=0; i< arr.length; i++){
int j = 0;
for(int k =0; k<arr[0].length; k++){
if( k != index){
arr_son[j++] = arr[k];
System.out.println(arr[i][k]+",");
}
}
System.out.println();
}
int k = 0;
for(int i=0;i<attriCnt.length;i++){
if( i != index){
attriCnt_son[k++] = attriCnt[i];
System.out.println(attriCnt[i]+",");
}
}*/
}
public static double log2(float g){
double a = Math.log10(g);
double b = Math.log10(2.0);
double c = a/b;
return c;
}
public static void printNode(TreeNode nt, String space){
if(null != nt){
String str = space;
str += "value is: "+nt.getValue();
if(!("".equals(nt.getClass1()))){
str += "; "+"class is: "+nt.getClass1();
}
System.out.println(str);
System.out.println();
List<TreeNode> tn = nt.getNodeList();
if(null != tn){
for(TreeNode n: tn){
printNode(n,space+space);
}
}
System.out.println();
}
}
}
class TreeNode{
TreeNode parent = null;
String value = "";
String Class = "";
List<TreeNode> nodeList = null;
TreeNode(String value){
this.value = value;
}
void setParent(TreeNode parent){
this.parent = parent;
}
void setValue(String value){
this.value = value;
}
void setClass1(String Class){
this.Class = Class;
}
void setNodeList(List<TreeNode> nodeList){
this.nodeList = nodeList;
}
TreeNode getParent(){
return this.parent ;
}
String getValue(){
return this.value;
}
String getClass1(){
return this.Class;
}
List<TreeNode> getNodeList(){
return this.nodeList;
}
}
import java.util.*;
public class c{
public static void main(String args[]){
File f = new File("E:/DEV_S/data.txt");
if(!f.exists()||f.isDirectory())
{
System.out.println("Doesn't exists or is a Directory!");
return;
}
/* 高效读取
FileInputStream fis = new FileInputStream(f);
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
while(-1 != (fis.read(buf))){
sb.append(new String(buf));
System.out.println(sb);
System.out.println("---");
}*/
/*
逐行读取
*/
String line = "";
int recordCnt = 10;
int attriCnt[] = {3,3,2,2};
String[][] arr = new String[recordCnt][attriCnt.length];
try{
BufferedReader br = new BufferedReader(new FileReader(f));
String[] lines = new String[4];
int rowCnt = 0;
while(null != (line = br.readLine())){
lines = line.split(",");
for(int i=0; i<4; i++){
arr[rowCnt][i] = lines[i];
}
rowCnt++;
}
}catch(Exception e){
e.printStackTrace();
}
TreeNode nt = new TreeNode("root");
List<TreeNode> nl =
parti(arr,attriCnt,nt);
nt.setNodeList(nl);
System.out.println();
System.out.println("打印....");
String space = " ";
printNode(nt,space);
//getSon(arr,attriCnt,2,"no1");
//getGain(arr,attriCnt,0);
//System.out.println(getGain(arr,attriCnt,1));
//System.out.println(log2(2));
/*
//String[][] string = {{"s","no1","no"},{"l","yes1","yes"},{"s","yes1","no"}};
String[][] string = //{{"s","no1","no"},{"l","yes1","yes"},{"s","yes1","no"}};
//{{"m","yes1","yes" },{ "m","yes1","yes"},{ "m","no1","yes"}};
{{"m","yes1","yes " },{ " l","no1","yes " },{ " s","no1","no " },{ " s","no1","yes "}};
String[][] string = {{"no1","no"},{"no1","yes"}};
//int[] in = {3,2,2};
//int[] in = {2,2};
List<TreeNode> n2 = parti(string,in,nt);
nt.setNodeList(n2);
System.out.println();
System.out.println("打印....");
String space = " ";
printNode(nt,space);*/
}
public static List<TreeNode> parti(String[][] arr, int[] attriCnt, TreeNode nt ){
if(attriCnt.length<2)
return null;
//System.out.println();
double gain = 0;
double minGain = 100;
double maxGain = 0;
int index = 0;
int index_max = 0;
String minKey = "";
String minClass = "";
double gainArr[] = new double[attriCnt.length-1];
Map<String,Integer> indOfAttiValue_index = new HashMap<String,Integer>();
Map<String,Integer> indOfClass_index = new HashMap<String,Integer>();
Map<Integer,Set<String>> indOfValues = new HashMap<Integer,Set<String>>();
/*
System.out.println();
System.out.println();
for(int i = 0; i<arr.length; i++){
String str = "";
for(int j=0; j<arr[0].length; j++){
str += arr[i][j]+",";
}
System.out.println(str);
str = "";
}
System.out.println("-----------上面是待处理数据 下面是期望--------");*/
int ind=0;
String matrix_index = "";
String matrix_index_max = "";
for(; ind<attriCnt.length-1;ind++){
//gain = getGain(arr,attriCnt,ind);
int ClassInd = attriCnt[attriCnt.length-1]+1; //类数目
int matrix[][] = new int[attriCnt[ind]][ClassInd]; //曾毅
Map<String,Integer> indOfAttiValue = new HashMap<String,Integer>();
Map<String,Integer> indOfClass = new HashMap<String,Integer>();
for(int i=0; i<arr.length; i++){
if(null == arr[i][ind]){
break;
}
//System.out.println("i: "+i+", arr[0].length-1: "+ (arr[0].length-1));
Integer row = indOfAttiValue.get(arr[i][ind]);
Integer col = indOfClass.get(arr[i][arr[0].length-1]);
if(null == row){
row = indOfAttiValue.size();
indOfAttiValue.put(arr[i][ind],indOfAttiValue.size());
Set<String> set = indOfValues.get(ind);
if(null == set){
set = new HashSet<String>();
}
set.add(arr[i][ind]);
indOfValues.put(ind,set);
}
if(null == col){
col = indOfClass.size();
indOfClass.put(arr[i][arr[0].length-1],indOfClass.size());
}
/*System.out.println(row);
System.out.println(arr[i][ind]);
System.out.println(col);
System.out.println(arr[i][ClassInd]);*/
matrix[row][col]++;
matrix[row][ClassInd-1]++;
//System.out.println();
}
/*System.out.println(attriCnt[ind]);
System.out.println(ClassInd);*/
/*for(int i=0; i<attriCnt[ind]; i++){
for(int j=0; j<ClassInd; j++){
System.out.println(matrix[i][j]);
}
System.out.println();
}*/
float tmp = 0;
float cnt = 0;
//double g = 0;
for(int i=0; i<attriCnt[ind]; i++){
for(int j=0; j<ClassInd-1; j++){
//System.out.println(i+","+j+"--->"+matrix[i][ClassInd-1] +"," +matrix[i][j]);
cnt = matrix[i][ClassInd-1];
if((matrix[i][ClassInd-1] != matrix[i][j]) && (0 != matrix[i][j]) ){
//System.out.println(matrix[i][j]+", "+matrix[i][ClassInd-1]);
tmp = matrix[i][j];
float new_tmp = tmp/cnt;
//System.out.println(new_tmp);
gain -= new_tmp*log2(new_tmp);
}
}
}
//gain = getGain(arr,attriCnt,ind);
System.out.println(gain);
gainArr[ind]= gain;
if(minGain > gain){
minGain = gain;
index = ind;
indOfAttiValue_index = indOfAttiValue;
indOfClass_index = indOfClass;
matrix_index = "";
for(int i= 0; i< attriCnt[ind];i++){
for(int j=0; j< ClassInd; j++){
matrix_index += matrix[i][j]+",";
//System.out.println(matrix[i][j]);
}
//System.out.println();
matrix_index += ";";
}
}
if((maxGain <gain)&&(attriCnt.length <= 2)){
maxGain = gain;
index_max = ind;
for(int i= 0; i< attriCnt[ind];i++){
for(int j=0; j< ClassInd; j++){
matrix_index_max += matrix[i][j]+",";
//System.out.println(matrix[i][j]);
}
//System.out.println();
matrix_index_max += ";";
}
}
}
//System.out.println(index);
//System.out.println(minGain);
System.out.println("gainArr.length"+gainArr.length);
System.out.println("index"+index);
System.out.println("haha: "+gainArr[index]);
List<TreeNode> nodeList = new ArrayList<TreeNode>();
/*if(gainArr[index] < Math.pow(10,-5))
{
System.out.println("孙子代到达---》");
System.out.println(index);
System.out.println(matrix_index);
TreeNode nt_index = new TreeNode(arr[0][index]);
nt_index.setParent(nt);
nt_index.setValue(arr[0][index]+"你到家了!");
nt_index.setClass1(arr[0][arr[0].length-1]);
nt_index.setNodeList(null);
nodeList.add(nt_index);
//
if(attriCnt.length < 2){
return nodeList;
}
}*/
/*if((attriCnt.length <= 2) &&(gainArr[index] > Math.pow(10,-5))){
//List<TreeNode> nodeList = new ArrayList<TreeNode>();
TreeNode nt_index = new TreeNode(arr[0][index_max]);
nt_index.setParent(nt);
nt_index.setValue(arr[0][index_max]);
nt_index.setValue("我到家了~~~");
nt_index.setClass1(arr[0][arr[0].length-1]);
nt_index.setNodeList(null);
nodeList.add(nt_index);
return nodeList;
}*/
List<TreeNode> nodeList_inv = new ArrayList<TreeNode>();
//List<TreeNode> nodeList = new ArrayList<TreeNode>();
String key = "";
System.out.println();
System.out.println(matrix_index);
// 每次完成计
int des = 0;;
for(Map.Entry<String,Integer> entry: indOfAttiValue_index.entrySet()){
des++;
int row = indOfAttiValue_index.get(entry.getKey());
//int col = indOfClass_index.get("类名");
int col = attriCnt.length-1;
System.out.println("其他节点");
/*
System.out.println("row is:"+row);
System.out.println("col-1 is:" + (matrix_index.split(";")[row].split(",").length-1));*/
String num = matrix_index.split(";")[row].split(",")[matrix_index.split(";")[row].split(",").length-1];
key = entry.getKey();
System.out.println(key);
/*for(int i=0;i<arr.length;i++){
String str = "";
for(int j=0;j<arr[0].length;j++){
str += arr[i][j] + ",";
}
System.out.println(str);
}
System.out.println(Arrays.toString(attriCnt));
System.out.println("arr.length: "+arr.length+",arr[0].length: "+arr[0].length);
System.out.println("num: "+num+",arr[0].length-1: "+ (arr[0].length-1));*/
//getSon(arr, attriCnt, index, entry.getKey());
String[][] arr_son = new String[new Integer(num)][arr[0].length-1] ;
int[] attriCnt_son = new int[attriCnt.length-1];
int m = 0;
for(int i=0; i< arr.length; i++){
if(key.equals(arr[i][index])){
int n = 0;
for(int j =0; j<arr[0].length; j++){
if( j != index){
//System.out.println("m: "+m+",n: "+n);
//System.out.println("i: "+i+",j: "+j);
arr_son[m][n++] = arr[i][j];
}
}
m++;
}
}
int temp = 0;
for(Map.Entry<Integer,Set<String>> entry1: indOfValues.entrySet()){
temp = entry1.getKey();
if(entry1.getValue().contains(key)){
break;
}
}
System.out.println("属性对应矩阵横坐标:"+temp);
int k = 0;
for(int i=0;i<attriCnt.length;i++){
if( i != temp){
attriCnt_son[k++] = attriCnt[i];
}
}
//System.out.println(Arrays.toString(attriCnt_son));
//getSon(arr, attriCnt, index, entry.getKey());
for(int i=0;i<arr_son.length;i++){
String str = "";
for(int j=0;j<arr_son[0].length;j++){
str += arr_son[i][j] + ",";
}
System.out.println(str);
}
System.out.println(Arrays.toString(attriCnt_son));
System.out.println("---------------------------处理子代中:" + des+" ---------------------------------------");
TreeNode nt_index_inv = new TreeNode(key);
nt_index_inv.setParent(nt);
//nt_index_inv.setValue("child "+des+" ");
nodeList_inv = parti(arr_son,attriCnt_son,nt_index_inv);
if(null == nodeList_inv){
nt_index_inv.setValue(key);
nt_index_inv.setClass1(arr_son[0][arr_son[0].length-1]);
}
nt_index_inv.setNodeList(nodeList_inv);
nodeList.add(nt_index_inv);
//clean(String[][] arr, int[] attriCnt, int ind); //构建并digui
//parti(String[][] arr, int[] attriCnt);
}
return nodeList;
}
public static double getGain(String[][] arr, int[] attriCnt,int ind){ //数据、属性数目,计算曾毅列
int ClassInd = attriCnt[attriCnt.length-1]+1; //类数目
int matrix[][] = new int[attriCnt[ind]][ClassInd]; //曾毅
Map<String,Integer> indOfAttiValue = new HashMap<String,Integer>();
Map<String,Integer> indOfClass = new HashMap<String,Integer>();
for(int i=0; i<arr.length; i++){
if(null == arr[i][ind]){
break;
}
Integer row = indOfAttiValue.get(arr[i][ind]);
Integer col = indOfClass.get(arr[i][ClassInd]);
if(null == row){
row = indOfAttiValue.size();
indOfAttiValue.put(arr[i][ind],indOfAttiValue.size());
}
if(null == col){
col = indOfClass.size();
indOfClass.put(arr[i][ClassInd],indOfClass.size());
}
/*System.out.println(row);
System.out.println(arr[i][ind]);
System.out.println(col);
System.out.println(arr[i][ClassInd]);*/
matrix[row][col]++;
matrix[row][ClassInd-1]++;
//System.out.println();
}
/*System.out.println(attriCnt[ind]);
System.out.println(ClassInd);*/
/*for(int i=0; i<attriCnt[ind]; i++){
for(int j=0; j<ClassInd; j++){
System.out.println(matrix[i][j]);
}
System.out.println();
}*/
float tmp = 0;
float cnt = 0;
double g = 0;
for(int i=0; i<attriCnt[ind]; i++){
for(int j=0; j<ClassInd-1; j++){
//System.out.println(i+","+j+"--->"+matrix[i][ClassInd-1] +"," +matrix[i][j]);
cnt = matrix[i][ClassInd-1];
if((matrix[i][ClassInd-1] != matrix[i][j]) && (0 != matrix[i][j]) ){
//System.out.println(matrix[i][j]+", "+matrix[i][ClassInd-1]);
tmp = matrix[i][j];
float new_tmp = tmp/cnt;
//System.out.println(new_tmp);
g -= new_tmp*log2(new_tmp);
}
}
}
return g;
}
public static void getSon(String[][] arr, int[] attriCnt, int index, String key){
String[][] arr_son = new String[arr[0].length][arr.length] ;
int[] attriCnt_son = new int[attriCnt.length-1];
for(int i=0; i< arr.length; i++){
if(key.equals(arr[i][index])){
int j = 0;
for(int k =0; k<arr[0].length; k++){
if( k != index){
arr_son[j++] = arr[k];
System.out.println(arr[i][k]+",");
}
}
System.out.println();
}
}
int k = 0;
for(int i=0;i<attriCnt.length;i++){
if( i != index){
attriCnt_son[k++] = attriCnt[i];
System.out.println(attriCnt[i]+",");
}
}
/*String[][] arr_son = new String[arr[0].length][arr.length-1] ;
int[] attriCnt_son = new int[attriCnt.length-1];
for(int i=0; i< arr.length; i++){
int j = 0;
for(int k =0; k<arr[0].length; k++){
if( k != index){
arr_son[j++] = arr[k];
System.out.println(arr[i][k]+",");
}
}
System.out.println();
}
int k = 0;
for(int i=0;i<attriCnt.length;i++){
if( i != index){
attriCnt_son[k++] = attriCnt[i];
System.out.println(attriCnt[i]+",");
}
}*/
}
public static double log2(float g){
double a = Math.log10(g);
double b = Math.log10(2.0);
double c = a/b;
return c;
}
public static void printNode(TreeNode nt, String space){
if(null != nt){
String str = space;
str += "value is: "+nt.getValue();
if(!("".equals(nt.getClass1()))){
str += "; "+"class is: "+nt.getClass1();
}
System.out.println(str);
System.out.println();
List<TreeNode> tn = nt.getNodeList();
if(null != tn){
for(TreeNode n: tn){
printNode(n,space+space);
}
}
System.out.println();
}
}
}
class TreeNode{
TreeNode parent = null;
String value = "";
String Class = "";
List<TreeNode> nodeList = null;
TreeNode(String value){
this.value = value;
}
void setParent(TreeNode parent){
this.parent = parent;
}
void setValue(String value){
this.value = value;
}
void setClass1(String Class){
this.Class = Class;
}
void setNodeList(List<TreeNode> nodeList){
this.nodeList = nodeList;
}
TreeNode getParent(){
return this.parent ;
}
String getValue(){
return this.value;
}
String getClass1(){
return this.Class;
}
List<TreeNode> getNodeList(){
return this.nodeList;
}
}
0 0
- 我的decision实现
- 我的decision实现 数据
- Decision Tree的matlab实现及原理
- Decision Tree 及实现
- Decision Tree 及实现
- JBPM-Decision的用法
- 决策树Decision Tree 及实现
- Decision
- Decision
- decision
- Decision
- 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
- 【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)
- 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
- 【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)
- jbpm中Decision的使用
- jbpm中Decision的使用
- jbpm中Decision的使用
- Android Cordova 插件开发之创建项目
- 【Android应用开发】RecycleView API 翻译 (文档翻译)
- 自己编写的Spring4.x教程可以下载了
- 小白学习HTML——第二天
- 第十周项目3
- 我的decision实现
- 致第一次写博客的自己(为什么写博客)
- linux装OpenOffice后传---中文乱码的解决
- 5分钟入门数据分析
- 第14周项目1 (4)验证平衡二叉树相关算法
- Why HBase
- 1,设计模式连载概述
- 第十五周项目一(2)希尔排序
- ubuntu下安装pyspider