id3,没调试

C++信息熵与决策树算法实现
本文介绍了一个使用C++实现的信息熵计算及决策树算法增益的例子。通过定义结构体和函数来处理数据集,计算正例和反例的数量,并进一步计算信息熵与增益值。
#include "string.h"
#include "iostream.h"
#include "math.h"
#define dataCol 4
#define dataNum 4
typedef int                 BOOL;
struct data{
BOOL line[dataCol];
BOOL choosed;
}dat[dataNum];
//dat comein[20];
int getDataPlus(data d[] , int Col)
{
int num = 0 ;
for(int j = 0 ; j < dataCol ; j++)
if(d[j].line[Col]!=0 && d[j].choosed ==0)
{
num++;
}
return num;
}


int getDataMinu(data d[] , int Col)
{
int num = 0 ;
for(int j = 0 ; j < dataCol ; j++)
if(d[j].line==0 && d[j].choosed ==0)
{
num++;
}
return num;
}




double EntropyT(data d[] , int Col , BOOL isPlus = true)
{
double p1,p2;
p1 = getDataPlus(d,Col)/(getDataPlus(d,Col) + getDataMinu(d,Col));
p2 = getDataMinu(d,Col)/(getDataPlus(d,Col) + getDataMinu(d,Col));
return -p1*(log(p1)/log(2)) -p2 * (log(p2)/log(2));
}
double Gain(int Col1 = -1, int Col2 = 0)
{


dat[Col1].choosed = true;
double p1,p2;
p1 = getDataPlus(dat,Col1)/(getDataPlus(dat,Col1) + getDataMinu(dat,Col1));
p2 = getDataMinu(dat,Col2)/(getDataPlus(dat,Col2) + getDataMinu(dat,Col2));
if(Col1 != -1)
{
return EntropyT(dat,Col1) - p1 * EntropyT(dat,Col2 , true) - p2 * EntropyT(dat,Col2 , false);
}
else
{
return - p1 * EntropyT(dat,Col2 , true) - p2 * EntropyT(dat,Col2 , false);
}


}
void main()
{
int n;
cin>>n;
for(int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < dataCol ; j++)
cin>>dat[i].line[j];
}


double gn[dataNum];
int slctSq[dataNum];
for(int k = 0 ; k < dataNum ; k++)
for(int j = 1 ; j < dataNum ; j++)
{
gn[j] = Gain(k,j);
}




}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值