Return: -> Valor de coherencia """ suma = 0 num = 0 for clu in clustering: c = A.get_centroide(clustering[clu]) for i in clustering[clu]: d = distance.euclidean(c,i) suma += d*d num +=1 return suma/(num*1.0) if __name__ == "__main__": instancias = A.read_file() co_r = [] co_d = [] co_p = [] K = range(2,21) # K = [2..20] for k in K: print "-------------",k,"-------------" res = A.kmeans(k, instancias) co_d.append(media([coherencia_diametro(res[0][c]) for c in res[0]])) co_r.append(media([coherencia_radio(res[0][c]) for c in res[0]])) co_p.append(coherencia_promedio(res[0])) plot(K,co_d,"diametro") plot(K,co_r,"radio") plot(K,co_p,"promedio")
if n == 0: dot += "\t"+Nodo[0]+'0 [label="'+Nodo[0]+'"];\n' for child in Nodo[1]: # escribimos cada arista con los hijos e incrementamos n para evitar repeticiones # dado que puede repetirse el nombre en los hijos n+=1 # ######## Id del Nodo -> id de su hijo [ valor del atributo que divide] if len(child[1]) == 0: dot += "\t"+Nodo[0]+str(m)+" -> "+child[0]+str(n)+' [label="'+child[2]+'"];\n' # ######### Id del hijo [nombre que se va a mostrar] dot += "\t"+child[0]+str(n)+' [label="'+child[0]+'"];\n' # es una hoja y por tanto una clase le damos un aspecto diferente # ademas no mandamos escribir sus hijos dot += "\t"+child[0]+str(n)+ '[style="filled",shape=box,fillcolor="cornsilk3", color="red"];\n' else: dot += "\t"+Nodo[0]+str(m)+" -> "+child[0]+str(n)+' [label="'+child[2]+'"];\n' # ######### Id del hijo [nombre que se va a mostrar] dot += "\t"+child[0]+str(n)+' [label="'+child[0]+'"];\n' # si no es una hoja lo pintamos (d,n)= dotNodo(child,n) dot += d return (dot,n) if __name__ == '__main__' : (inst,attr,clas) = A.read_file() candidates = [k for k in attr] ida = A.id3(inst,attr,clas,candidates) print toDOT(ida)