Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }