/// <summary> /// 计算关键属性的依赖度 /// </summary> /// <returns>依赖度集合1-13存储在0-12</returns> public List <double> calDependance() { List <double> keyDependance = new List <double>(); //关键属性的依赖度 int sampleNum = trainCollection.Count; //相似样本个数 //计算决策属性的划分 Depend dec = new Depend(true); for (int j = 0; j < sampleNum; j++)//遍历相似样本,进行属性划分 { dec.addRecord(trainCollection[j][0].ToString(), j); } int keyNum = keyCollection.Count; for (int i = 1; i < keyNum; i++)//遍历属性求出相应的依赖度 { //计算关键属性的划分 Depend depend = new Depend(true); //不考虑属性类型,一律按照文本处理 for (int j = 0; j < sampleNum; j++) //遍历样本,进行属性划分 { depend.addRecord(trainCollection[j][i].ToString(), j); } //求出依赖度 keyDependance.Add(depend.getDependance(dec, sampleNum)); } //for (int i = 0; i < keyDependance.Count; i++) //{ // Console.Write(keyDependance[i].ToString() + " "); //} return(keyDependance); }
/// <summary> /// 获取关系依赖度 /// </summary> /// <param name="dec">决策划分依赖对象</param> /// <param name="allNum">样本总数</param> /// <returns>依赖度</returns> public double getDependance(Depend dec, int allNum) { double sum = 0; //正域的数量 int divNum = divs.Count; //当前划分的个数 List <Div> decDivs = dec.divs; //决策属性的划分 int decDivNum = decDivs.Count; //决策划分的个数 for (int i = 0; i < divNum; i++) //遍历划分集合 { Div keyDiv = divs[i]; for (int j = 0; j < decDivNum; j++) { Div decDiv = decDivs[j]; if (decDiv.containDiv(keyDiv)) { sum += keyDiv.getRecNum(); break; } } } return(sum / allNum); }