C4.5c语言

典型的错误!

这是书上的一个错误。

应该是:

因为第一个表达式m=ab为假,所以短路,不计算第二个表达式。

一个c语言编程的问题,4.5什么是2不是1? 你的问题应该是为什么是2而不是3?

答案是else自动寻找最接近它的未配对的进行配对。所以else和if(b0)成对,而不是if(ab),所以整个判断语句没有执行,C的值也没有变。

C语言中的%4.5f和中等4.5是什么意思? ?:合在一起就是三眼操作,表达式规范为:

e1

e2

e3

当e1为真时,执行e2,否则执行e3。

比如:

(同Internationalorganizations)国际组织

a=5,b=3,x

x=(ab)?甲:乙

结果是x=5。

跪求C4.5算法,c语言... 具体算法步骤如下:1创建节点N 2。如果训练集为空,则在返回节点N中将其标记为失败3如果训练集中的所有记录都属于同一类别,则用该类别标记节点N 4。如果候选属性为空,则返回n作为叶节点,并将其标记为训练集中最常见的类。5对于每个候选属性attribute_list 6如果候选属性是连通的,那么7离散化这个属性,8选择候选属性attribute _ list中信息增益最高的属性D 9,将节点N标记为每个属性的属性d 11,属性D的一致值d 11从节点N开始生长一个条件为D=d的分支,12让我们进行训练。集合D=d中的训练样本的集合13if是空的14加上一个叶子,标记为训练集中最常见的类15else加上具有C4.5(R-{D},C,s)返回的点。

可以参考的c代码。

C4.5算法源代码(c)

// C4.5_test.cpp:定义控制台应用程序的入口点。

//

#包含" stdafx.h "

#包含stdio.h

#包含数学. h

#包含“malloc.h”

#包含stdlib.h

const int MAX = 10

输入输入;

int I = 0;//列数

int j = 0;//行数

void build_tree(FILE *fp,int * iSamples,int* iAttribute,int I level);//输出规则

int choose _ attribute(int * is samples,int * I attribute);//通过计算信息增益率选择test_attribute。

double info(double dTrue,double d false);//计算所需的信息

双熵(double dTrue,double dFalse,double dAll);//求熵

double splitinfo(int* list,double dAll);

int check _ samples(int * is samples);//检查样本是否都在同一个类中。

int check _ normal(int * is samples);//检查最常见的类

int check _ attribute _ null(int * I attribute);//检查属性是否为空。

void get _ attributes(int * is samples,int *iAttributeValue,int iAttribute);

int _tmain(int argc,_TCHAR* argv[])

{

FILE * fp

FILE * fp1

char iGet

int a = 0;

int b = 0;//a,b是循环变量。

int * iSamples

int * iAttribute

fp = fopen("c:\\input.txt "," r ");

if (NULL == fp)

{

printf(" error \ n ");

返回0;

}

iGet = getc(FP);

while (('\n '!= iGet)(EOF!= iGet))

{

if(',' == iGet)

{

我;

}

iGet = getc(FP);

}

我;

I attribute =(int *)malloc(sizeof(int)* I);

for(int k = 0;ki;k)

{

I attribute[k]=(int)malloc(sizeof(int));

I attribute[k]= 1;

}

while (EOF!= iGet)

{

if ('\n' == iGet)

{

j;

}

iGet = getc(FP);

}

j;

iInput =(int * *)malloc(sizeof(int *)* j);

is samples =(int *)malloc(sizeof(int)* j);

for(a = 0;一个j;答

{

iInput[a]=(int *)malloc(sizeof(int)* I);

is samples[a]=(int)malloc(sizeof(int));

is samples[a]= a;

}

a = 0;

fclose(FP);

fp=fopen("c:\\input.txt "," r ");

iGet = getc(FP);

while(EOF!= iGet)

{

如果((','!= iGet)('\n '!= iGet))

{

iInput[a][b]= iGet-48;

b;

}

如果(b == i)

{

a;

b = 0;

}

iGet = getc(FP);

}

fp1 = fopen("d:\\output.txt "," w ");

build_tree(fp1,iSamples,iAttribute,0);

fclose(FP);

返回0;

}

void build_tree(FILE * fp,int * iSamples,int* iAttribute,int level)//

{

int iTest _ Attribute = 0;

int iAttributeValue[MAX];

int k = 0;

int l = 0;

int m = 0;

int * iSamples1

for(k = 0;kMAXk)

{

iAttributeValue[k]=-1;

}

if(0 = = check _ samples(is samples))

{

fprintf(fp," result: %d\n ",I input[is samples[0]][I-1]);

返回;

}

if(1 = = check _ attribute _ null(I attribute))

{

fprintf(fp," result: %d\n ",check _ normal(is amples));

返回;

}

iTest _ Attribute = choose _ Attribute(is samples,I Attribute);

I Attribute[iTest _ Attribute]=-1;

get _ attributes(is samples,iAttributeValue,iTest _ Attribute);

k = 0;

while ((-1!= iAttributeValue[k])(k MAX))

{

l = 0;

m = 0;

while ((-1!= is samples[l])(l j))

{

if(I input[is samples[l]][iTest _ Attribute]= = iAttributeValue[k])

{

m;

}

l;

}

isamples 1 =(int *)malloc(sizeof(int)*(m 1));

l = 0;

m = 0;

while ((-1!= is samples[l])(l j))

{

if(I input[is samples[l]][iTest _ Attribute]= = iAttributeValue[k])

{

is samples 1[m]= is samples[l];

m;

}

l;

}

is samples 1[m]=-1;

if(-1 = = is samples 1[0])

{

fprintf(fp," result: %d\n ",check _ normal(is amples));

返回;

}

fprintf(fp," level%d: %d = %d\n ",level,iTest_Attribute,iAttributeValue[k]);

build_tree(fp,iSamples1,iAttribute,level 1);

k;

}

}

int choose _ attribute(int * is samples,int* iAttribute)

{

int iTestAttribute =-1;

int k = 0;

int l = 0;

int m = 0;

int n = 0;

int iTrue = 0;

int I false = 0;

int itrue 1 = 0;

int I false 1 = 0;

int iDepart[MAX];

int I record[MAX];

双齿性= 0.0;

double dGainratio = 0.0

双重测试= 0.0;

for(k = 0;kMAXk)

{

iDepart[k]=-1;

I record[k]= 0;

}

k = 0;

而((l!=2)(k(i - 1)))

{

if (iAttribute[k] == -1)

{

l;

}

k;

}

如果(l == 1)

{

for(k = 0;k(k-1);k)

{

if (iAttribute[k] == -1)

{

return I attribute[k];

}

}

}

for(k = 0;k(I-1);k)

{

l = 0;

iTrue = 0;

if false = 0;

if (iAttribute[k]!= -1)

{

while ((-1!= is samples[l])(l j))

{

if(0 = = I input[is samples[l]][I-1])

{

iFalse

}

if(1 = = I input[is samples[l]][I-1])

{

iTrue

}

l;

}

for(n = 0;nl;N )//计算这个属性有多少个不同的值,并记录下来。

{

m = 0;

while((iDepart[m]!=-1)(m!=MAX))

{

if(I input[is samples[n]][I attribute[k]]= = iDepart[m])

{

打破;

}

m;

}

if (-1 == iDepart[m])

{

iDepart[m]= I input[is samples[n]][I attribute[k]];

}

}

while ((iDepart[m]!= -1)(m!=MAX))

{

for(n = 0;nl;n)

{

if(I input[is samples[n]][I attribute[k]]= = iDepart[m])

{

if(1 = = I input[is samples[n]][I-1])

{

iTrue1

}

if(0 = = I input[is samples[n]][I-1])

{

iFalse1

}

I record[m];

}

}

dEntropy =熵((double)iTrue1,(double)if false 1,(double)l);

itrue 1 = 0;

if false 1 = 0;

m;

}

double dSplitinfo = split info(I record,(double)l);

if (-1 == iTestAttribute)

{

iTestAttribute = k;

dGainratio = (info((double)iTrue,(double)if false)-dEntropy)/dSplitinfo;

}

其他

{

test = (info((double)iTrue,(double)if false)-dEntropy)/dSplitinfo;

中频(数据增益比测试)

{

iTestAttribute = k;

dGainratio = test

}

}

}

}

返回iTestAttribute

}

双信息(双数据真实,双数据虚假)

{

double dInfo = 0.0

din fo =((dTrue/(dTrue dFalse))*(log(dTrue/(dTrue dFalse))/log(2.0))(dFalse/(dTrue dFalse))*(log(dFalse/(dTrue dFalse))/log(2.0))*(-1);

返回dInfo

}

双熵(双数据,双数据,双数据)

{

双齿性= 0.0;

dEntropy =(dTrue dFalse)* info(dTrue,dFalse)/dAll;

返回dEntropy

}

double splitinfo(int* list,double dAll)

{

int k = 0;

double dSplitinfo = 0.0

而(0!=列表[k])

{

dSplitinfo-=((double)list[k]/(double)dAll)*(log((double)list[k]/(double)dAll));

k;

}

返回dSplitinfo

}

int check_samples(int *iSamples)

{

int k = 0;

int b = 0;

while ((-1!= is samples[k])(k j-1))

{

if (iInput[k][i-1]!= I输入[k 1][i-1])

{

b = 1;

打破;

}

k;

}

返回b;

}

int check _ normal(int * is samples)

{

int k = 0;

int iTrue = 0;

int I false = 0;

while ((-1!= is samples[k])(k I))

{

if(0 = = I input[is samples[k]][I-1])

{

iFalse

}

其他

{

iTrue

}

k;

}

if (iTrue = iFalse)

{

返回1;

}

其他

{

返回0;

}

}

int check _ attribute _ null(int * I attribute)

{

int k = 0;

while (k (i-1))

{

if (-1!= iAttribute[k])

{

返回0;

}

k;

}

返回1;

}

void get _ attributes(int * is samples,int *iAttributeValue,int iAttribute)

{

int k = 0;

int l = 0;

while ((-1!= is samples[k])(k j))

{

l = 0;

而(-1!= iAttributeValue[l])

{

if(I input[is samples[k]][I attribute]= = I attribute value[l])

{

打破;

}

l;

}

if (-1 == iAttributeValue[l])

{

iAttributeValue[l]= iInput[is samples[k]][iAttribute];

}

k;

}

}

用C语言求解下面的4.5,4.6,4.7。 /*

求连通数的最大公约数和最小公倍数

*/

#包含stdio.h

int main()

{

int m,n,a,b;

Printf("请输入两个数字:\ n ");

scanf("%d%d ",a,b);

m = a;

n = b;

而(a!= b)

{

如果(a b)

a = a-b;

其他

b = b-a;

}

printf(" m,n的最大公约数是%d\n ",a);

printf(" m,n的最小公倍数是%d\n ",m * n/a);

}

# includestdio.h

#includestring.h

int main()

{

char a[50];

int i,p = 0,q = 0,m = 0,n = 0;

Printf("请输入要计数的字符串:");

获取(a);

for(I = 0;一个[我]!= '\0';我)

{

如果((a[I]= 65a[I]= 90)| |(a[I]= 97a[I]= 122))

p;

else if(a[i] == ' ')

q;

else if(a[i] = 48 a[i] = 57)

m;

其他

n;

}

Printf("英文字母个数:%d\n ",p);

Printf("空格数:%d\n ",q);

Printf("位数:%d\n ",m);

Printf("其他字符数:%d\n ",n);

返回0;

}

#包含stdio.h

int fac(int a);

int main()

{

int sum = 0;

int I;

for(I = 1;i = 20我)

{

sum = fac(I);

}

printf("sum = %d\n ",sum);

返回0;

}

整数因子(整数a)

{

int j;

如果(一个0)

Printf("a 0,输入错误");

else if( a == 0 || a== 1)

j = 1;

其他

j = fac(a-1)* a;

返回j;

}

c语言,%c和% number c,例如“A =% c,% 4.5c”,A和A输出的两个A有什么区别? 你好,

按照你写的格式输出,编译就是错误。

输出结果:a,a

%4.5表示4个占位符和5个小数位。

修改步骤如下:改为浮点数。

你可以看到。%4.2f

4:表示占四位,超过四位就原样输出。

. 2:表示保留两位小数。

相关文章

发表新评论