⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 discr.c

📁 用于数据挖掘的分类算法,基于c语言的,一个c4.5分类算法
💻 C
字号:
/*************************************************************************//*									 *//*	Evaluation of a test on a discrete valued attribute		 *//*      ---------------------------------------------------		 *//*									 *//*************************************************************************/#include "buildex.i"/*************************************************************************//*									 *//*  Set Info[] and Gain[] for discrete partition of items Fp to Lp	 *//*									 *//*************************************************************************/    EvalDiscreteAtt(Att, Fp, Lp, Items)/*  ---------------  */     Attribute Att;    ItemNo Fp, Lp;     ItemCount Items;{     ItemCount KnownItems;    float DiscrKnownBaseInfo(), ComputeGain(), TotalInfo();    ComputeFrequencies(Att, Fp, Lp);    KnownItems = Items - ValFreq[0];    /*  Special case when no known values of the attribute  */    if ( Items <= ValFreq[0] )    {	Verbosity(2) printf("\tAtt %s: no known values\n", AttName[Att]);	Gain[Att] = -Epsilon;	Info[Att] = 0.0;	return;    }    Gain[Att] = ComputeGain(DiscrKnownBaseInfo(KnownItems, MaxAttVal[Att]),			    UnknownRate[Att], MaxAttVal[Att], KnownItems);    Info[Att] = TotalInfo(ValFreq, 0, MaxAttVal[Att]) / Items;    Verbosity(2)    {    	printf("\tAtt %s", AttName[Att]);    	Verbosity(3) PrintDistribution(Att, MaxAttVal[Att], true);    	printf("\tinf %.3f, gain %.3f\n", Info[Att], Gain[Att]);    }} /*************************************************************************//*									 *//*  Compute frequency tables Freq[][] and ValFreq[] for attribute	 *//*  Att from items Fp to Lp, and set the UnknownRate for Att		 *//*									 *//*************************************************************************/    ComputeFrequencies(Att, Fp, Lp)/*  ------------------  */    Attribute Att;    ItemNo Fp, Lp;{    Description Case;     ClassNo c;    DiscrValue v;    ItemCount CountItems();    ItemNo p;    ResetFreq(MaxAttVal[Att]);    /*  Determine the frequency of each class amongst cases	with each possible value for the given attribute  */    ForEach(p, Fp, Lp)    { 	Case = Item[p];	Freq[ DVal(Case,Att) ][ Class(Case) ] += Weight[p];    }     /*  Determine the frequency of each possible value for the	given attribute  */    ForEach(v, 0, MaxAttVal[Att])     { 	ForEach(c, 0, MaxClass)	{	    ValFreq[v] += Freq[v][c];	}    }    /*  Set the rate of unknown values of the attribute  */     UnknownRate[Att] = ValFreq[0] / CountItems(Fp, Lp);}/*************************************************************************//*									 *//*  Return the base info for items with known values of a discrete	 *//*  attribute, using the frequency table Freq[][]			 *//*	 								 *//*************************************************************************/float DiscrKnownBaseInfo(KnownItems, MaxVal)/*    ------------------  */    DiscrValue MaxVal;    ItemCount KnownItems;{    ClassNo c;    ItemCount ClassCount;    double Sum=0;    DiscrValue v;    ForEach(c, 0, MaxClass)    {	ClassCount = 0;	ForEach(v, 1, MaxVal)	{	    ClassCount += Freq[v][c];	}	Sum += ClassCount * Log(ClassCount);    }    return (KnownItems * Log(KnownItems) - Sum) / KnownItems;}/*************************************************************************//*									 *//*  Construct and return a node for a test on a discrete attribute	 *//*									 *//*************************************************************************/    DiscreteTest(Node, Att)/*  ----------  */    Tree Node;    Attribute Att;{    ItemCount CountItems();    Sprout(Node, MaxAttVal[Att]);    Node->NodeType	= BrDiscr;    Node->Tested	= Att;    Node->Errors	= 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -