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

📄 discr.c

📁 一个简洁好用的SVM代码
💻 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 + -