Changeset 3524:fd86b1953797 in orange


Ignore:
Timestamp:
04/11/07 12:13:11 (7 years ago)
Author:
janezd <janez.demsar@…>
Branch:
default
Convert:
59620db9654d6a256de2f0410a8949a95c73b1f1
Message:
  • fixed first triangle
  • added correlations to output
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/orngPade.py

    r3389 r3524  
    1616 
    1717def clearCache(cache): 
    18     cache.points = cache.tri = cache.stars = cache.dts = cache.deltas = cache.findNearest = cache.attrStat = None 
     18    cache.points = cache.tri = cache.stars = cache.dts = cache.deltas = cache.errors = cache.findNearest = cache.attrStat = None 
    1919 
    2020 
     
    4141    cache.contAttributes = [attributes[i] for i in cache.contIndices] 
    4242    cache.attributes = [(attr.name, attr.varType) for attr in cache.contAttributes] 
    43      
     43 
    4444    clearCache(cache) 
    4545    return cache 
     
    7373    return None 
    7474 
    75 def simplex_with_xn(cache, xn,Star): 
     75def simplex_with_xn(cache, xn, Star): 
    7676    for simplex in Star: 
    77         bl = [numpy.linalg.det(a) for a in inside(cache, xn,simplex)] 
     77        bl = [numpy.linalg.det(a) for a in inside(cache, xn, simplex)] 
    7878        if reduce(lambda x,y: x and y, [i<0 for i in bl]) or reduce(lambda x,y: x and y, [i>0 for i in bl]): 
    7979            return simplex 
     
    106106    S = cache.stars 
    107107 
    108     if not cache.dts: 
    109         cache.dts = [min([ min([ dist(points[x][:-1],points[v][:-1]) for v in simplex if v!=x], 0) for simplex in S[x]], 0)*.1 for x in xrange(npoints)] 
     108    if not cache.dts:         
     109        cache.dts = [min([ min([ dist(points[x][:-1],points[v][:-1]) for v in simplex if v!=x]) for simplex in S[x]])*.1 for x in xrange(npoints)] 
    110110 
    111111 
     
    128128            xn[d] += dt 
    129129            swx = simplex_with_xn(cache, xn, S) 
    130             if swx:                 
     130            if swx:           
    131131                if DBG: 
    132132                    print "iskanje cudnih trikotnikov" 
     
    166166                    else: 
    167167                        deltas[d] = "?" 
    168                         continue 
    169  
     168                    continue 
     169             
    170170            vecs = numpy.array([numpy.array(points[p][:-1])-O for p in swx if p!=x]) 
    171171            vecs = vecs.transpose() 
     
    581581            if div:# and i<40: 
    582582                b = (Sxy*n - Sx*Sy) / div 
    583 ##                    a = (Sy - b*Sx)/n 
    584 ##                    err = (n * a**2 + b**2 * Sxx + Syy + 2*a*b*Sx - 2*a*Sy - 2*b*Sxy) 
    585 ##                    tot = Syy - Sy**2/n 
    586 ##                    mod = tot - err 
    587 ##                    merr = err/(n-2) 
    588 ##                    F = mod/merr 
    589 ##                    Fprob = statc.fprob(F, 1, int(n-2)) 
     583                 
     584#                div = Sx*Sy/n - Sxy 
     585#                if abs(div) < 1e-10: 
     586#                    cache.errors[exi][d] = 1 
     587#                else: 
     588#                    B = ((Syy - Sy**2/n) - (Sxx - Sx**2/n)) / 2 / div 
     589# 
     590#                    b_p = -B + math.sqrt(B**2+1) 
     591#                    a = Sy/n - b_p * Sx/n 
     592#                    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) 
     593# 
     594#                    b_2 = -B - math.sqrt(B**2+1) 
     595#                    a = Sy/n - b_p * Sx/n 
     596#                    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) 
     597#                     
     598#                    if error1 < error2 and error1 >= 0: 
     599#                        cache.errors[exi][d] = error1 
     600#                    elif error2 >= 0: 
     601#                        cache.errors[exi][d] = error2 
     602#                    else: 
     603#                        cache.errors[exi][d] = 42 
     604#                        print error1, error2 
     605                             
     606                a = (Sy - b*Sx)/n 
     607                err = (n * a**2 + b**2 * Sxx + Syy + 2*a*b*Sx - 2*a*Sy - 2*b*Sxy) 
     608                tot = Syy - Sy**2/n 
     609                mod = tot - err 
     610                merr = err/(n-2) 
     611                if merr < 1e-10: 
     612                    F = 0 
     613                    Fprob = 1 
     614                else: 
     615                    F = mod/merr 
     616                    Fprob = statc.fprob(F, 1, int(n-2)) 
     617                cache.errors[exi][d] = Fprob 
    590618#                        print "%.4f" % Fprob, 
    591619                #print ("%.3f\t" + "%.0f\t"*6 + "%f\t%f") % (w, ref_x, ex_x, n, a, b, merr, F, Fprob) 
     
    608636 
    609637     
    610 def createQTable(cache, data, dimensions, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, originalAsMeta = False): 
     638def createQTable(cache, data, dimensions, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, correlationsAsMeta = False, originalAsMeta = False): 
    611639    nDimensions = len(dimensions) 
    612640     
     
    638666            metaIDs.append(metaID) 
    639667 
     668    corMetaIDs = [] 
     669    if correlationsAsMeta: 
     670        for dim in dimensions: 
     671            metaVar = orange.FloatVariable("corr(%s)" % cache.attributes[dim][0]) 
     672            metaID = orange.newmetaid() 
     673            dom.addmeta(metaID, metaVar) 
     674            corMetaIDs.append(metaID) 
     675        metaVar = orange.FloatVariable("corr") 
     676        metaID = orange.newmetaid() 
     677        dom.addmeta(metaID, metaVar) 
     678        corMetaIDs.append(metaID) 
     679 
    640680    if originalAsMeta: 
    641681        originalID = orange.newmetaid() 
     
    647687    paded = orange.ExampleTable(dom, data) 
    648688 
    649     for pad, alldeltas in zip(paded, cache.deltas): 
     689    for i, (pad, alldeltas) in enumerate(zip(paded, cache.deltas)): 
    650690        deltas = [alldeltas[d] for d in dimensions] 
    651691 
     
    666706                pad.setmeta(*a) 
    667707 
    668     return paded, derivativeID, metaIDs, originalID 
    669  
    670  
    671 def pade(data, attributes = None, method = tubedRegression, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, originalAsMeta = False): 
     708        if correlationsAsMeta: 
     709            if 0 or hasattr(cache, "errors"): 
     710                for id, val in zip(corMetaIDs, [cache.errors[i][d] for d in dimensions]): 
     711                    pad.setmeta(id, val) 
     712                pad.setmeta(corMetaIDs[-1], min([cache.errors[i][d] for d in dimensions])) 
     713            else: 
     714                for id, val in zip(corMetaIDs[:-1], deltas): 
     715                    pad.setmeta(id, type(val) == str and "?" or abs(val)) 
     716                pad.setmeta(corMetaIDs[-1], min([abs(v) for v in alldeltas if type(v) == float])) 
     717 
     718    return paded, derivativeID, metaIDs, corMetaIDs, originalID 
     719 
     720 
     721def pade(data, attributes = None, method = tubedRegression, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, correlationsAsMeta = False, originalAsMeta = False): 
    672722    cache = makeBasicCache(data) 
    673723    cache.deltas = [[None] * len(cache.contAttributes) for x in xrange(len(data))] 
     
    685735 
    686736    method(cache, dimensions) 
    687     return createQTable(cache, data, dimensions, outputAttr, threshold, MQCNotation, derivativeAsMeta, differencesAsMeta, originalAsMeta) 
     737    return createQTable(cache, data, dimensions, outputAttr, threshold, MQCNotation, derivativeAsMeta, differencesAsMeta, correlationsAsMeta, originalAsMeta) 
    688738 
    689739 
Note: See TracChangeset for help on using the changeset viewer.