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

📄 classify.c

📁 用于数据挖掘的分类算法,基于c语言的,一个c4.5分类算法
💻 C
字号:
/*************************************************************************//*                                                              	 *//*  Determine the class of a case description from a decision tree	 *//*  --------------------------------------------------------------	 *//*                                                              	 *//*************************************************************************/#include "defns.i"#include "types.i"#include "extern.i"float	*ClassSum=Nil;		/* ClassSum[c] = total weight of class c *//*************************************************************************//*                                                              	 *//*  Categorize a case description using the given decision tree		 *//*                                                              	 *//*************************************************************************/ClassNo Category(CaseDesc, DecisionTree) /*       --------  */    Description CaseDesc;     Tree DecisionTree; {     ClassNo c, BestClass;    if ( ! ClassSum )    {	ClassSum = (float *) malloc((MaxClass+1) * sizeof(float));    }    ForEach(c, 0, MaxClass)    {	ClassSum[c] = 0;    }    Classify(CaseDesc, DecisionTree, 1.0);    BestClass = 0;    ForEach(c, 0, MaxClass)    {	Verbosity(5) printf("class %s weight %.2f\n", ClassName[c], ClassSum[c]);	if ( ClassSum[c] > ClassSum[BestClass] ) BestClass = c;    }    return BestClass;}/*************************************************************************//*                                                              	 *//*  Classify a case description using the given subtree by adjusting	 *//*  the value ClassSum for each class					 *//*                                                              	 *//*************************************************************************/    Classify(CaseDesc, T, Weight)/*  --------  */    Description CaseDesc;     Tree T;    float Weight;{    DiscrValue v, dv;    float Cv;    Attribute a;    ClassNo c;    switch ( T->NodeType )    {        case 0:  /* leaf */	    if ( T->Items > 0 )	    {		/*  Update from ALL classes  */		ForEach(c, 0, MaxClass)		{		    if ( T->ClassDist[c] )		    {			ClassSum[c] += Weight * T->ClassDist[c] / T->Items;		    }		}	    }	    else	    {		ClassSum[T->Leaf] += Weight;	    }	    return;	case BrDiscr:  /* test of discrete attribute */	    a = T->Tested;	    v = DVal(CaseDesc, a);	    if ( v && v <= T->Forks )	/*  Make sure not new discrete value  */	    {		Classify(CaseDesc, T->Branch[v], Weight);	    }	    else	    {		ForEach(v, 1, T->Forks)		{		    Classify(CaseDesc, T->Branch[v], 			     (Weight * T->Branch[v]->Items) / T->Items);		}	    }	    return;	case ThreshContin:  /* test of continuous attribute */	    a = T->Tested;	    Cv = CVal(CaseDesc, a);	    if ( Cv == Unknown )	    {		ForEach(v, 1, 2)		{		    Classify(CaseDesc, T->Branch[v], 			     (Weight * T->Branch[v]->Items) / T->Items);		}	    }	    else	    {		v = ( Cv <= T->Cut ? 1 : 2 );		Classify(CaseDesc, T->Branch[v], Weight);	    }	    return;	case BrSubset:  /* subset test on discrete attribute  */	    a = T->Tested;	    dv = DVal(CaseDesc, a);	    if ( dv )	    {		ForEach(v, 1, T->Forks)		{		    if ( In(dv, T->Subset[v]) )		    {			Classify(CaseDesc, T->Branch[v], Weight);			return;		    }		}	    }	    /*  Value unknown or not found in any of the subsets  */	    ForEach(v, 1, T->Forks)	    {		Classify(CaseDesc, T->Branch[v], 		         (Weight * T->Branch[v]->Items) / T->Items);	    }	    return;    } }

⌨️ 快捷键说明

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