学习数据挖掘决策树ID3算法

一个月前的C语言程序设计课上学习了决策树ID3算法然后自己用了两个多星期的时间开始用C语言实现,结果由于过程太过于复杂,写出来的东西就跟屎一样。可能是自己对于这个算法理解的不够深刻,或者是在设计的时候没有构思好。所以决定在这里写一写大概的构思然后再去用C实现。这样可能会更加有效率一点。决策树之ID3算法:ID3算法的实质是检索哪个属性的分类能力更强,然后用拿
摘要由CSDN通过智能技术生成

微笑一个月前的C语言程序设计课上学习了决策树ID3算法
然后自己用了两个多星期的时间开始用C语言实现,结果由于过程太过于复杂,写出来的东西就跟屎一样。
可能是自己对于这个算法理解的不够深刻,或者是在设计的时候没有构思好。
所以决定在这里写一写大概的构思然后再去用C实现。
这样可能会更加有效率一点。



决策树之ID3算法:


ID3算法的实质是检索哪个属性的分类能力更强,然后用拿个分类能力强的属性将数据分类,然后继续检索继续分类。

这样最后分完之后就会是一个树的结构。

分到最后的时候数据会到达一定的纯度。

之后你拿一个样本过来,顺着这个树往下找,找到它所属于的那一堆数据里,也就是叶节点上。

就能根据这一堆数据生和死的比例来对样本进行判断。


如何判断一个属性的分类能力?


根据香农的信息论。香农定义了一个名叫信息熵的东西,来说明一个系统的信息稳定程度。

一个系统的信息熵越小,那么用它分类出的系统就越稳定,它的分类能力就比较强。


信息熵的计算公式:(n1 / m) * log2(n1 / m) + (n2 / m) * log2(n2 / m) + ........... +  (nn / m) * log2(nn / m)



具体的构建步骤:(以泰坦尼克号的数据为训练模型)


训练数据的结构:(第一列是生死标签)


//上一节课老师跟我说可以不用树的结构去构建数据结构,但是我实在不知道该怎么写,在他的口中用所谓字符数组的结构去做要比我这个简单很多。

//所以在这里还是采用我以前想的那个树的结构去做。


第一步,我们需要有一个函数来读取文件数据,我们选择一个二维数组去储存。
我觉得这个函数还是不错的。

int getData()//获取数据
{
	FILE *p;
	if (auto err = fopen_s(&p, "C:\\Users\\XueChuanyu\\Desktop\\test.txt", "r") == NULL)
	{
		printf("\nNo sucn a file");
	}

	int i = 0, k = 0;
	for (i = 0; i < DATASIZE; i++)
	{
		for (k = 0; k < 8; k++)
		{
			fscanf_s(p, "%lf", &data[i][k]);
			if (k == 3)
			{
				disperseAge(data[i][3], 15);
			}
			if (k == 6)
			{
				disperseAge(data[i][6], 70);
			}
		}
	}

	fclose(p);

	return 0;

}


但是我们有 很多数据都是连续的数据,所以要先进行离散化
这个函数也还算能用的。

double disperseAge(double x, int different)// 根据离散间隔值离散化
{

	if (x < different)
	{
		x = 0;
		return x;
	}
	else
	{
	
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值