gen3<-function() { # liczy wszystkie kombinacje 3 liczb 0-1 tj. 8 tt<-matrix(0,nrow=8,ncol=3) nr<-0 for (i in 0:1) for (j in 0:1) for (k in 0:1) { nr<-nr+1 tt[nr,1]<-i tt[nr,2]<-j tt[nr,3]<-k } return(tt) } w<-gen3() ***************************************** gen10<-function(w) { # oblicza kombinacje 3 modeli dla 10 obserwacji przy zadanej dokładności dopisz<-function(z,zw) { # sprawdza czy dana kombinacja juz jest i jesli nie - dopisuje ja na koniec jest<-0 for (j in 1:nrow(z)) if (sum(zw==z[j,])==ncol(z)) {jest<-1; break} if (jest==0) z<-rbind(z,zw) return(z) } tt<-matrix(0,ncol=10) for (i1 in 1:8) for (i2 in 1:8) for (i3 in 1:8) for (i4 in 1:8) for (i5 in 1:8) for (i6 in 1:8) for (i7 in 1:8) for (i8 in 1:8) for (i9 in 1:8) for (i10 in 1:8) { suma1<-w[i1,1]+w[i2,1]+w[i3,1]+w[i4,1]+w[i5,1]+w[i6,1]+w[i7,1]+w[i8,1]+w[i9,1]+w[i10,1] suma2<-w[i1,2]+w[i2,2]+w[i3,2]+w[i4,2]+w[i5,2]+w[i6,2]+w[i7,2]+w[i8,2]+w[i9,2]+w[i10,2] suma3<-w[i1,3]+w[i2,3]+w[i3,3]+w[i4,3]+w[i5,3]+w[i6,3]+w[i7,3]+w[i8,3]+w[i9,3]+w[i10,3] if (suma1==6&suma2==6&suma3==6) { tts<-as.matrix(sort(cbind(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10))) tt<-dopisz(tt,tts) print(nrow(tt)) } } return(tt) } wyn<-gen10(w) ************************ rozklad<-function(x,kunch=FALSE) { # buduje rozkłady wariantów decyzji pojedynczych modeli # dla 10 obserwacji - jak w ksiazce Kuncheva (TRUE) kol<-ncol(x) wie<-nrow(x) tt<-matrix(0,nrow=wie,ncol=8) tt2<-tt colnames(tt)<-c("000","001","010","011","100","101","110","111") colnames(tt2)<-c("111","101","011","001","110","100","010","000") for (i in 1:wie) { mb<-numeric(length=8) for (j in 1:kol) for (k in 1:8) mb[k]<-mb[k]+as.numeric(x[i,j]==k) tt[i,]<-mb } tt2[,1]<-tt[,8] tt2[,2]<-tt[,6] tt2[,3]<-tt[,4] tt2[,4]<-tt[,2] tt2[,5]<-tt[,7] tt2[,6]<-tt[,5] tt2[,7]<-tt[,3] tt2[,8]<-tt[,1] if (kunch) tt2 else tt } rr<-rozklad(wyn) ***************************** rozkoduj<-function(x) { # zamienia wyniki z procedury gen3_10 na 77 tablic # z wynikami klasyfikacji o wymiarach 10 x 3 w<-matrix(0,nrow=8,ncol=3) w[1,]<-c(0,0,0) w[2,]<-c(0,0,1) w[3,]<-c(0,1,0) w[4,]<-c(0,1,1) w[5,]<-c(1,0,0) w[6,]<-c(1,0,1) w[7,]<-c(1,1,0) w[8,]<-c(1,1,1) kol<-ncol(x) wie<-nrow(x) tt<-rep(0, 10*3*77) dim(tt)<-c(10,3,77) tto<-matrix(0,nrow=kol,ncol=3) for (i in 1:wie) { tto<-matrix(0,nrow=kol,ncol=3) for (j in 1:kol) tto[j,]<-w[x[i,j],] tt[,,i]<-tto } tt } roz<-rozkoduj(wyn) ************************************ liczb<-function(w,bl=FALSE) { # oblicza blad lub dokladnosc w glosowaniu dla 3 modeli i 10 obs # na podstawie tabeli 77 x 10 (x) # TRUE - blad, FALSE - dokladnosc oz<-c(0,0,0,1,0,1,1,1) # wynik glosowania wiekszosciowego dl 8 kombinacji 3 modeli kol<-ncol(w) wie<-nrow(w) blad<-matrix(0,nrow=wie) colnames(blad)<-c("dokl") rownames(blad)<-1:wie for (i in 1:wie) { ss<-sum(oz*w[i,]) blad[i]<-(ss/10) } if (bl) { colnames(blad)<-c("blad") blad<-1-blad } blad } tablica<-liczb(rr,bl=T) *************************************** div_sr<-function(ww) { div_pair<-function(o1,o2) { # do obliczen w procedurze # o1 oracle label for classifier 1 # o2 oracle label for classifier 2 # tm - wyjscie tm<-matrix(0,nrow=7,ncol=1) tt<-table(o1,o2) t1<-matrix(0,ncol=2,nrow=2) t1<-tt if (sum(o1)==0 & sum(o2)==0) t1[1,1]<-tt[1,1] if (sum(o1)==length(o1) & sum(o2)==length(o2)) t1[2,2]<-tt[1,1] if (sum(o1)==0 & sum(o2)>0) t1[1,]<-tt[1,] if (sum(o1)>0 & sum(o2)==0) t1[,1]<-tt[,1] a<-t1[2,2] b<-t1[2,1] c<-t1[1,2] d<-t1[1,1] tm[1]<-((a*d)-(b*c))/sqrt((a+b)*(c+d)*(a+c)*(b+d)) tm[2]<-((a+d)-(b+c))/(a+b+c+d) tm[3]<-(a*d-b*c)/(a*d+b*c) tm[4]<-d/(a+b+c+d) tm[5]<-(2*(a*c-b*d))/((a+b)*(c+d)+(a+c)*(b+d)) tm[6]<-(b+c)/(a+b+c+d) tm[7]<-(a+d)/(a+b+c+d) return(tm) } wo<-matrix(0,nrow=10,ncol=3) tw<-rep(0,7*4*77) dim(tw)<-c(7,4,77) colnames(tw)<-c("C1,C2","C1,C3","C2,C3","Srednia") rownames(tw)<-c("Pears","Hamm","Yule","CompD","Kappa","Disag","Zgod") for (i in 1:77) { wo<-ww[,,i] kol<-ncol(wo) wie<-nrow(wo) md<-matrix(0,nrow=7,ncol=4) nr<-0 for (j in 1:(kol-1)) for (k in (j+1):kol) { # dla jednej warstwy macierzy (jeden uklad klasyfikacji) nr<-nr+1 md[,nr]<-div_pair(wo[,j],wo[,k]) } for (j in 1:7) md[j,4]<-2*sum(md[j,1:kol])/(kol*(kol-1)) tw[,,i]<-md } tw } tab77<-div_sr(roz) mt<-tab77[,4,] mr<-t(mt) cor(mr) blad<-liczb(rr,bl=T) razem<-cbind(blad,mr) cor(razem) ########################################### plot(razem[,3],razem[,1],ylab="Błąd modelu zagregowanego",xlim=c(-0.7,1),xlab="Wartości miary",main="Miara Hamanna",pch=16) #points(razem[39,3],razem[39,1],cex=1.5,pch=15) #points(razem[45,3],razem[45,1],cex=1.5,pch=17) text(0.0,0.1,"Model nr 39",pos=4) text(0.0,0.6,"Model nr 45",pos=2) arrows(0.0,0.1,razem[39,3],razem[39,1],length = 0.15, angle = 20, code = 2) arrows(0.0,0.6,razem[45,3],razem[45,1],length = 0.15, angle = 20, code = 2) plot(razem[,4],razem[,1],ylab="Błąd modelu zagregowanego",xlim=c(-0.7,1),xlab="Wartości miary",main="Miara Yule'a",pch=16) #points(razem[39,4],razem[39,1],cex=1.5,pch=15) #points(razem[45,4],razem[45,1],cex=1.5,pch=17) text(0.0,0.1,"Model nr 39",pos=4) text(0.0,0.6,"Model nr 45",pos=2) arrows(0.0,0.1,razem[39,4],razem[39,1],length = 0.15, angle = 20, code = 2) arrows(0.0,0.6,razem[45,4],razem[45,1],length = 0.15, angle = 20, code = 2)