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:表示保留两位小数。
最后更新于 2023-10-07 11:55:11 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章