Changeset 3654:4d436863257b in orange


Ignore:
Timestamp:
05/14/07 15:03:46 (7 years ago)
Author:
janezd <janez.demsar@…>
Branch:
default
Convert:
c10dc7d07362ea7e4f8ec715c8bdfbd3ced74af4
Message:
  • commit undid Jure's changes
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/orngPade.py

    r3652 r3654  
    5050    import orangeom 
    5151    return orangeom.qhull(cache.data.toNumpy("a")[0][:, cache.contIndices]).tolist() 
    52 #    num_points = len(points) 
    53 #    pts1 = points 
    54 #    f = file('input4qdelaunay.tab','w') 
    55 #    f.write(reduce(lambda x, y: x+y, [str(len(cache.contAttributes))+"\n"+str(len(pts1))+"\n"]+ [string.join([str(x) for x in pts1[i][:-1]],'\t')+'\n' for i in xrange(num_points)] )) # [str(pts1[i][0])+"\t"+str(pts1[i][1])+"\n" for i in xrange(num_points)] 
    56 #    f.close() 
    57 #    os.system(pathQHULL + r"\qdelaunay s i Qt TO 'outputFromQdelaunay.tab' < input4qdelaunay.tab") 
    58 #    f = file('outputFromQdelaunay.tab','r') 
    59 #    vhod = f.read() 
    60 #    f.close() 
    61 #    k = string.find(vhod,'\n') 
    62 #    num_of_triangles = int(vhod[0:k]) 
    63 #    vhod = vhod[k+1:] 
    64 #    l = string.split(vhod,' \n') 
    6552#    return [map(int, string.split(l[i],' ')) for i in xrange(num_of_triangles+1) if l[i]!=''] 
    6653 
     
    575562                cache.deltas[exi][d] = "?" 
    576563                continue 
    577             if max(mx)==0: 
     564            if max(mx) < 1e-10: 
    578565                kw = math.log(.001) 
    579566            else: 
     
    593580            if div:# and i<40: 
    594581                b = (Sxy*n - Sx*Sy) / div 
    595 ##                    a = (Sy - b*Sx)/n 
    596 ##                    err = (n * a**2 + b**2 * Sxx + Syy + 2*a*b*Sx - 2*a*Sy - 2*b*Sxy) 
    597 ##                    tot = Syy - Sy**2/n 
    598 ##                    mod = tot - err 
    599 ##                    merr = err/(n-2) 
    600 ##                    F = mod/merr 
    601 ##                    Fprob = statc.fprob(F, 1, int(n-2)) 
     582                 
     583#                div = Sx*Sy/n - Sxy 
     584#                if abs(div) < 1e-10: 
     585#                    cache.errors[exi][d] = 1 
     586#                else: 
     587#                    B = ((Syy - Sy**2/n) - (Sxx - Sx**2/n)) / 2 / div 
     588# 
     589#                    b_p = -B + math.sqrt(B**2+1) 
     590#                    a = Sy/n - b_p * Sx/n 
     591#                    error1 = 1/(1+b_p**2) * (Syy + a**2 + b_p**2*Sxx - 2*a*Sy + 2*a*b_p*Sx - 2*b_p*Sxy) 
     592# 
     593#                    b_2 = -B - math.sqrt(B**2+1) 
     594#                    a = Sy/n - b_p * Sx/n 
     595#                    error2 = 1/(1+b_p**2) * (Syy + a**2 + b_p**2*Sxx - 2*a*Sy + 2*a*b_p*Sx - 2*b_p*Sxy) 
     596#                     
     597#                    if error1 < error2 and error1 >= 0: 
     598#                        cache.errors[exi][d] = error1 
     599#                    elif error2 >= 0: 
     600#                        cache.errors[exi][d] = error2 
     601#                    else: 
     602#                        cache.errors[exi][d] = 42 
     603#                        print error1, error2 
     604                             
     605                a = (Sy - b*Sx)/n 
     606                err = (n * a**2 + b**2 * Sxx + Syy + 2*a*b*Sx - 2*a*Sy - 2*b*Sxy) 
     607                tot = Syy - Sy**2/n 
     608                mod = tot - err 
     609                merr = err/(n-2) 
     610                if merr < 1e-10: 
     611                    F = 0 
     612                    Fprob = 1 
     613                else: 
     614                    F = mod/merr 
     615                    Fprob = statc.fprob(F, 1, int(n-2)) 
     616                cache.errors[exi][d] = Fprob 
    602617#                        print "%.4f" % Fprob, 
    603618                #print ("%.3f\t" + "%.0f\t"*6 + "%f\t%f") % (w, ref_x, ex_x, n, a, b, merr, F, Fprob) 
     
    620635 
    621636     
    622 def createQTable(cache, data, dimensions, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, originalAsMeta = False): 
     637def createQTable(cache, data, dimensions, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, correlationsAsMeta = False, originalAsMeta = False): 
    623638    nDimensions = len(dimensions) 
    624639     
     
    633648             
    634649    dom = orange.Domain(data.domain.attributes, classVar) 
     650    dom.addmetas(data.domain.getmetas()) 
    635651    setattr(dom, "constraintAttributes", [cache.contAttributes[i] for i in dimensions]) 
    636652 
     
    649665            metaIDs.append(metaID) 
    650666 
     667    corMetaIDs = [] 
     668    if correlationsAsMeta: 
     669        for dim in dimensions: 
     670            metaVar = orange.FloatVariable("corr(%s)" % cache.attributes[dim][0]) 
     671            metaID = orange.newmetaid() 
     672            dom.addmeta(metaID, metaVar) 
     673            corMetaIDs.append(metaID) 
     674        metaVar = orange.FloatVariable("corr") 
     675        metaID = orange.newmetaid() 
     676        dom.addmeta(metaID, metaVar) 
     677        corMetaIDs.append(metaID) 
     678 
    651679    if originalAsMeta: 
    652680        originalID = orange.newmetaid() 
     
    658686    paded = orange.ExampleTable(dom, data) 
    659687 
    660     for pad, alldeltas in zip(paded, cache.deltas): 
     688    for i, (pad, alldeltas) in enumerate(zip(paded, cache.deltas)): 
    661689        deltas = [alldeltas[d] for d in dimensions] 
    662690         
     
    677705                pad.setmeta(*a) 
    678706 
    679     return paded, derivativeID, metaIDs, originalID 
    680  
    681  
    682 def pade(data, attributes = None, method = tubedRegression, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, originalAsMeta = False): 
     707        if correlationsAsMeta: 
     708            if hasattr(cache, "errors"): 
     709                maxerr = -1e20 
     710                for id, val in zip(corMetaIDs, [cache.errors[i][d] for d in dimensions]): 
     711                    if val == None: 
     712                        pad.setmeta(id, "?") 
     713                    else: 
     714                        pad.setmeta(id, val) 
     715                        maxerr = max(maxerr, val) 
     716                pad.setmeta(corMetaIDs[-1], maxerr) 
     717            else: 
     718                minder = 0 
     719                for id, val in zip(corMetaIDs[:-1], deltas): 
     720                    if type(val) == str: 
     721                        pad.setmeta(id, "?") 
     722                    else: 
     723                        pad.setmeta(id, abs(val)) 
     724                        minder = min(minder, abs(val)) 
     725                pad.setmeta(corMetaIDs[-1], minder) 
     726 
     727    return paded, derivativeID, metaIDs, corMetaIDs, originalID 
     728 
     729 
     730def pade(data, attributes = None, method = tubedRegression, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, correlationsAsMeta = False, originalAsMeta = False): 
    683731    cache = makeBasicCache(data) 
    684732    cache.deltas = [[None] * len(cache.contAttributes) for x in xrange(len(data))] 
     733    if method == tubedRegression: 
     734        cache.errors = [[None] * len(cache.contAttributes) for x in xrange(len(data))] 
     735 
    685736    cache.nNeighbours = 30 
    686737 
     
    696747 
    697748    method(cache, dimensions) 
    698     return createQTable(cache, data, dimensions, outputAttr, threshold, MQCNotation, derivativeAsMeta, differencesAsMeta, originalAsMeta) 
     749    return createQTable(cache, data, dimensions, outputAttr, threshold, MQCNotation, derivativeAsMeta, differencesAsMeta, correlationsAsMeta, originalAsMeta) 
    699750 
    700751 
Note: See TracChangeset for help on using the changeset viewer.