- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西电数据挖掘决策树算法
数据挖掘算法实验报告
实验题目
基于决策树的分类算法,属性的选择采用ID3 或C4.5策略,采用如下的数据建立分类决策树。
算法基本思想的描述
ID3选择具有最高信息熵增益的属性作为分裂属性,基于这种原则我们首先可以算出初始集合的熵,然后分别求出以各个属性为分裂属性时的熵,然后将通过上面得到的数据算出以各个属性为分裂属性时的信心增益,选择具有最大的信息增益属性作为我们的分裂属性。
编程实现算法
#include iostream
#include math.h
#include string.h
using namespace std;
#define SIZE 14
struct Data
{
char age[10];
char income[10];
char student[10];
char credit_rating[20];
char buys_computer[10];
};
Data data [SIZE]={
{=30,high,no,fair,no},
{=30,high,no,excellent,no},
{31...40,high,no,fair,yes},
{40,medium,no,fair,yes},
{40,low,yes,fair,yes},
{40,low,yes,excellent,no},
{31...40,low,yes,excellent,yes},
{=30,medium,no,fair,no},
{=30,low,yes,fair,yes},
{40,medium,yes,fair,yes},
{=30,medium,yes,excellent,yes},
{31...40,medium,no,excellent,yes},
{31...40,high,yes,fair,yes},
{40,medium,no,excellent,no}
};
double calculate(double a,double b);
void origin_entropy(Data data[],double entropy);
void age_entropy(Data data[],double entropy);
void income_entropy(Data data[],double entropy);
void student_entropy(Data data[],double entropy);
void credit_rating_entropy(Data data[],double entropy);
int main()
{
double origin=0,age=0,student=0,credit_rating=0,income=0;
origin_entropy(data,origin);
age_entropy(data,age);
student_entropy(data,student);
income_entropy(data,income);
credit_rating_entropy(data,credit_rating);
coutinfo(D)=originendl;
cout用age作为分裂属性时:\n熵info(age)(D)=age\t\t信息增益为:origin-ageendl;
cout用income作为分裂属性时:\n熵info(income)(D)=income\t\t信息增益为:origin-incomeendl;
cout用student作为分裂属性时:\n熵info(student)(D)=):student\t\t信息增益为:origin-studentendl;
cout用credit_rating作为分裂属性时:\n熵info(credit_rating)(D)=credit_rating\t信息增益为:origin-credit_ratingendl;
return 0;
}
double calculate(double a,double b)
{
if(a==0)
return 0;
else
return (a/b)*log10(b/a)/log10(2);
}
void origin_entropy(Data data[],double entropy)
{
int i;
double yes=0, no=0;
for( i=0;iSIZE;i++)
{
if(strcmp(data[i].buys_computer,yes)==0)
yes++;
else
no+
文档评论(0)