资源简介
关于C语言的决策树 里面有c语言的源代码 还有一些简单的介绍
代码片段和文件信息
#include “stdio.h“
#include “malloc.h“
#include “string.h“
#include “math.h“
#define M 100 //样本数据条数最大100
#define N 10 //每个属性取值最多10个,类别最多10个
#define Len 20 //属性名及类名最长20个字符
typedef struct Node
{
int splitting_criterion;
bool Is_leafnode;
int ClassID; //
struct Node* child[N];//假设每个属性最多有10个值
}T_Node;
int Attri_Count=0;//实际属性数目
int total_att_vavle[N+1];//每个属性实际的取值个数最后一个为类的数量
void Compute_each_class_number(int d[][N+1]int tem_countint each_class_nember[])//计算每个类的元组数
{
int i;
for (i=0;i {
each_class_nember[d[i][Attri_Count]]++;
}
}
bool All_in_oneclass(int d[][N+1]int tem_count)
{
int i=0;
int t;
t=d[0][Attri_Count];
for (i=0;i {
if (t!=d[i][Attri_Count])
{
return false;
}
}
return true;
}
bool Is_attlist_empty(int attribute_list[])
{
int i=0;
for (i=0;i {
if (attribute_list[i]!=-1)
{
return false;
}
}
return true;
}
int Get_mostclass(int d[][N+1]int n)
{
int num[N]={0};
int i=0j=0;
int t=0;
for (i=0;i {
num[d[i][Attri_Count]]++;
}
for (i=0;i {
if (t {
t=num[i];
j=i;
}
}
return j;
}
void To_zero(int a[N])
{
int i;
for (i=0;i<10;i++)
{
a[i]=0;
}
}
void To_zero_double(double a[N])
{
int i;
for (i=0;i<10;i++)
{
a[i]=0;
}
}
double Compute_InfoD(int each_class_number[]int temp_count)//each_class_number[i]表示i类的元组数temp_count是总共的元组数
{
double p[N]; //任意一个元组属于某类的概率
double InfoD=0;
int i=0;
To_zero_double(p);
for (i=0;i {
p[i]=(double)each_class_number[i]/temp_count;
}
for (i=0;i {
if (p[i]!=0)
{
InfoD = InfoD+p[i]*log(p[i])/log(2);
}
}
return InfoD*(-1);
}
int Attribute_selection_method(int d[][N+1]int tem_countint attribute_list[])
{
double InfoD[N];//各属性的InfoInfo[Attri_Count]是类别的Info
double att_value_info[N+1];//att_value_info[i]表示某个属性在i取值上的Info
To_zero_double(InfoD);
To_zero_double(att_value_info);
int di[M][N+1];//某一属性在某一取值上的所有元组集合
int di_count=0;//di包含的元组数
int each_class_number[N]={0};//某个元组集合中每个类的元组数
Compute_each_class_number(dtem_counteach_class_number);//计算d中所有元组每个类的元组数
InfoD[Attri_Count]=Compute_InfoD(each_class_numbertem_count);//计算类别的Info
int i=0j=0k=0;
// int each_class_num[10];//某个属性在某个取值上各类的元组个数
for (i=0;i {
if (attribute_list[i]!=-1)
{
for (j=0;j {
for (k=0;k {
if (d[k][i]==j)
{
for (int l=0;l<=Attri_Count;l++)
{
di[di_count][l]=d[k][l];
}
di_count++;
}
}
To_zero(each_class_number);//将某个属性在某个取值上各类的元组清零
Compute_each_class_number(didi_counteach_class_number);//计算集合d
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 233547 2009-12-30 20:23 decision_tree\Debug\decision_tree.exe
文件 230660 2009-12-30 20:23 decision_tree\Debug\decision_tree.ilk
文件 19149 2009-12-30 20:23 decision_tree\Debug\decision_tree.obj
文件 418816 2009-12-30 20:23 decision_tree\Debug\decision_tree.pdb
文件 41984 2009-12-30 20:23 decision_tree\Debug\vc60.idb
文件 53248 2009-12-30 20:23 decision_tree\Debug\vc60.pdb
文件 8863 2009-12-30 20:23 decision_tree\decision_tree.cpp
文件 3485 2009-12-30 20:15 decision_tree\decision_tree.dsp
文件 532 2009-12-30 20:17 decision_tree\decision_tree.dsw
文件 41984 2009-12-30 20:24 decision_tree\decision_tree.ncb
文件 48640 2009-12-30 20:24 decision_tree\decision_tree.opt
文件 1283 2009-12-30 20:23 decision_tree\decision_tree.plg
文件 377 2009-12-18 19:46 decision_tree\input.txt
文件 974 2009-12-18 20:31 decision_tree\source_input.txt
文件 40 2009-12-30 18:21 decision_tree\source_test.txt
文件 16 2009-12-30 20:16 decision_tree\test.txt
文件 1794560 2010-04-16 16:51 decision_tree\决策树.ppt
目录 0 2009-12-30 20:26 decision_tree\Debug
目录 0 2010-04-16 16:51 decision_tree
----------- --------- ---------- ----- ----
2898158 19
- 上一篇:Dijskra算法 floyd算法
- 下一篇:心电信号检测C语言编写的程序
评论
共有 条评论