Changeset 3652:2a282bac3fcb in orange


Ignore:
Timestamp:
05/14/07 14:25:25 (7 years ago)
Author:
jure <jure@…>
Branch:
default
Convert:
69dc276d2bfb8a12e86e58c53c59dcb671b8aaea
Message:

* empty log message *

Location:
orange
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Regression/OWPade.py

    r3580 r3652  
    1313class OWPade(OWWidget): 
    1414 
    15     settingsList = ["output", "method", "derivativeAsMeta", "originalAsMeta", "savedDerivativeAsMeta", "differencesAsMeta", "correlationsAsMeta", "enableThreshold", "threshold"] 
     15    settingsList = ["output", "method", "derivativeAsMeta", "originalAsMeta", "savedDerivativeAsMeta", "differencesAsMeta", "enableThreshold", "threshold"] 
     16    #contextHandlers = {"": DomainContextHandler("", ["outputAttr", ContextField("attributes", DomainContextHandler.RequiredList, selected="dimensions")], False, False, False, False)} 
    1617    contextHandlers = {"": PerfectDomainContextHandler("", ["outputAttr", ContextField("attributes", selected="dimensions")])} 
    1718 
    18     methodNames = ["First Triangle", "Star Regression", "Star Univariate Regression", "Tube Regression", "1D Qing"] 
    19     methods = [orngPade.firstTriangle, orngPade.starRegression, orngPade.starUnivariateRegression, orngPade.tubedRegression, orngPade.qing1D] 
    20  
     19    #methodNames = ["First Triangle", "Star Regression", "Star Univariate Regression", "Tube Regression", "Canceling"]     
     20    #methods = [orngPade.firstTriangle, orngPade.starRegression, orngPade.starUnivariateRegression, orngPade.tubedRegression, orngPade.canceling] 
     21    methodNames = ["First Triangle", "Star Univariate Regression", "Tube Regression"]     
     22    methods = [orngPade.firstTriangle, orngPade.starUnivariateRegression, orngPade.tubedRegression] 
     23     
    2124    def __init__(self, parent = None, signalManager = None, name = "Pade"): 
    2225        OWWidget.__init__(self, parent, signalManager, name)  #initialize base class 
     
    3134        self.savedDerivativeAsMeta = 0 
    3235        self.differencesAsMeta = 1 
    33         self.correlationsAsMeta = 1 
    3436        self.originalAsMeta = 1 
    3537        self.enableThreshold = 0 
     
    3739        self.method = 2 
    3840        self.useMQCNotation = False 
    39         self.persistence = 40 
     41        #self.persistence = 40 
    4042 
    41         self.nNeighbours = 30 
    42  
     43        self.nNeighbours = 30         
     44         
    4345        self.loadSettings() 
    4446 
     
    5456        OWGUI.comboBox(box, self, "method", callback = self.methodChanged, items = self.methodNames) 
    5557#        self.nNeighboursSpin = OWGUI.spin(box, self, "nNeighbours", 10, 200, 10, label = "Number of neighbours" + "  ", callback = self.methodChanged) 
    56         self.persistenceSpin = OWGUI.spin(box, self, "persistence", 0, 100, 5, label = "Persistence (0-100)" + "  ", callback = self.methodChanged, controlWidth=50, callbackOnReturn = True) 
     58        #self.persistenceSpin = OWGUI.spin(box, self, "persistence", 0, 100, 5, label = "Persistence (0-100)" + "  ", callback = self.methodChanged, controlWidth=50) 
    5759 
    5860        OWGUI.separator(box) 
     
    6870        self.outputLB = OWGUI.comboBox(OWGUI.indentedBox(box), self, "outputAttr", callback=self.outputDiffChanged) 
    6971 
    70         box = OWGUI.widgetBox(self.controlArea, "Output meta attributes", addSpace = True) 
     72        box = OWGUI.widgetBox(self.controlArea, "Output meta attributes", addSpace = True)       
    7173        self.metaCB = OWGUI.checkBox(box, self, "derivativeAsMeta", label="Qualitative constraint") 
    7274        OWGUI.checkBox(box, self, "differencesAsMeta", label="Derivatives of selected attributes") 
    73         OWGUI.checkBox(box, self, "correlationsAsMeta", label="Absolute values of derivatives") 
    7475        OWGUI.checkBox(box, self, "originalAsMeta", label="Original class attribute") 
    7576 
     
    7879        self.adjustSize() 
    7980        self.activateLoadedSettings() 
    80  
    81         self.persistenceSpin.setEnabled(self.methods[self.method] == orngPade.qing1D) 
    82  
     81         
     82        #self.persistenceSpin.setEnabled(self.methods[self.method] == orngPade.canceling) 
     83         
    8384        self.setFixedWidth(self.sizeHint().width()) 
    8485 
     
    9899 
    99100    def dimensionsChanged(self): 
     101        print self.dimensions 
    100102        if self.output and self.dimensions: 
    101103            if not self.metaCB.isEnabled(): 
     
    112114    def methodChanged(self): 
    113115        self.deltas = None 
    114         self.persistenceSpin.setEnabled(self.methods[self.method] == orngPade.qing1D) 
     116        #self.persistenceSpin.setEnabled(self.methods[self.method] == orngPade.canceling) 
    115117        #self.nNeighboursSpin.setEnabled(bool(self.method==3)) 
    116118 
     
    118120    def onDataInput(self, data): 
    119121        self.closeContext() 
    120         if data and self.isDataWithClass(data, orange.VarTypes.Continuous): 
     122        if data: 
    121123            orngPade.makeBasicCache(data, self) 
    122124 
    123125            icons = OWGUI.getAttributeIcons() 
     126            print data.domain.attributes, self.contAttributes 
    124127            self.outputLB.clear() 
    125128            for attr in self.contAttributes: 
    126129                self.outputLB.insertItem(icons[attr.varType], attr.name) 
    127  
     130            
    128131            self.dimensions = range(len(self.attributes)) 
    129132        else: 
     
    143146        if not self.deltas: 
    144147            self.deltas = [[None] * len(self.contAttributes) for x in xrange(len(self.data))] 
    145         if not self.errors: 
    146             self.errors = [[None] * len(self.contAttributes) for x in xrange(len(self.data))] 
    147148 
    148149        dimensionsToCompute = [d for d in self.dimensions if not self.deltas[0][d]] 
     
    151152        if dimensionsToCompute: 
    152153            self.progressBarInit() 
    153             self.methods[self.method](self, dimensionsToCompute, self.progressBarSet, persistence=self.persistence/100.) 
     154            self.methods[self.method](self, dimensionsToCompute, self.progressBarSet) 
    154155            self.progressBarFinished() 
    155156 
    156         paded, derivativeID, metaIDs, classID, corrIDs = orngPade.createQTable(self, data, self.dimensions, 
     157        paded, derivativeID, metaIDs, classID = orngPade.createQTable(self, data, self.dimensions, 
    157158                                                             not self.output and -1 or self.outputAttr, 
    158159                                                             self.enableThreshold and abs(self.threshold), 
    159                                                              self.useMQCNotation, self.derivativeAsMeta, self.differencesAsMeta, self.correlationsAsMeta, self.originalAsMeta) 
     160                                                             self.useMQCNotation, self.derivativeAsMeta, self.differencesAsMeta, self.originalAsMeta) 
    160161        self.send("Examples", paded) 
    161162 
    162  
    163  
     163                             
     164        
    164165if __name__=="__main__": 
    165166    import sys 
     
    169170    a.setMainWidget(ow) 
    170171    ow.show() 
    171     ow.onDataInput(orange.ExampleTable(r"c:\D\ai\Orange\test\squin\xyz-t")) 
    172 #    ow.onDataInput(orange.ExampleTable(r"c:\delo\qing\smartquin\x2y2.txt")) 
     172    #ow.onDataInput(orange.ExampleTable(r"c:\D\ai\Orange\test\squin\xyz-t")) 
     173    ow.onDataInput(orange.ExampleTable(r"C:\delo\PADE\JJ_testi\sinxsiny\sinxsiny_noise05.tab")) 
    173174    a.exec_loop() 
    174  
     175     
    175176    ow.saveSettings() 
  • orange/orngPade.py

    r3650 r3652  
    1717def clearCache(cache): 
    1818    cache.points = cache.tri = cache.stars = cache.dts = cache.deltas = cache.findNearest = cache.attrStat = None 
    19     if hasattr(cache, "errors"): 
    20         delattr(cache, "errors") 
    2119 
    2220 
     
    5250    import orangeom 
    5351    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') 
    5465#    return [map(int, string.split(l[i],' ')) for i in xrange(num_of_triangles+1) if l[i]!=''] 
    5566 
     
    117128    for x, (S, xp, dt, deltas) in enumerate(zip(cache.stars, points, cache.dts, cache.deltas)): 
    118129        for d in dimensions: 
    119  
    120130            xn = xp[:-1] 
    121              
    122131            DBG=0 
    123             if xn[0]>16 and xn[1]<44.5 and xn[1]>43: 
    124             #if xn[0]>4.7 and xn[0]<4.9 and xn[1]<24.5 and xn[1]>23.5: 
    125                 DBG=1 
    126                 print "DBG" 
     132#            if xn[0]>16 and xn[1]<44.5 and xn[1]>43: 
     133#            #if xn[0]>4.7 and xn[0]<4.9 and xn[1]<24.5 and xn[1]>23.5: 
     134#                DBG=1 
     135#                #print "DBG" 
    127136             
    128137            O = numpy.array(xp[:-1]) 
     
    130139            xn[d] += dt 
    131140            swx = simplex_with_xn(cache, xn, S) 
    132             if swx:           
    133                 if DBG: 
    134                     print "iskanje cudnih trikotnikov" 
    135                     print swx 
    136                     print [points[k] for k in swx] 
     141            if swx: 
     142#                if DBG: 
     143#                    print "iskanje cudnih trikotnikov" 
     144#                    print swx 
     145#                    print [points[k] for k in swx] 
    137146                obrni = 1 
    138147#                if DBG: 
     
    177186 
    178187            deltas[d] = obrni * (xnz-xp[-1]) / dt 
     188            #print "DELTAS = ",deltas[d] 
    179189 
    180190        if progressCallback: 
     
    565575                cache.deltas[exi][d] = "?" 
    566576                continue 
    567             if max(mx) < 1e-10: 
     577            if max(mx)==0: 
    568578                kw = math.log(.001) 
    569579            else: 
     
    583593            if div:# and i<40: 
    584594                b = (Sxy*n - Sx*Sy) / div 
    585                  
    586 #                div = Sx*Sy/n - Sxy 
    587 #                if abs(div) < 1e-10: 
    588 #                    cache.errors[exi][d] = 1 
    589 #                else: 
    590 #                    B = ((Syy - Sy**2/n) - (Sxx - Sx**2/n)) / 2 / div 
    591 # 
    592 #                    b_p = -B + math.sqrt(B**2+1) 
    593 #                    a = Sy/n - b_p * Sx/n 
    594 #                    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) 
    595 # 
    596 #                    b_2 = -B - math.sqrt(B**2+1) 
    597 #                    a = Sy/n - b_p * Sx/n 
    598 #                    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) 
    599 #                     
    600 #                    if error1 < error2 and error1 >= 0: 
    601 #                        cache.errors[exi][d] = error1 
    602 #                    elif error2 >= 0: 
    603 #                        cache.errors[exi][d] = error2 
    604 #                    else: 
    605 #                        cache.errors[exi][d] = 42 
    606 #                        print error1, error2 
    607                              
    608                 a = (Sy - b*Sx)/n 
    609                 err = (n * a**2 + b**2 * Sxx + Syy + 2*a*b*Sx - 2*a*Sy - 2*b*Sxy) 
    610                 tot = Syy - Sy**2/n 
    611                 mod = tot - err 
    612                 merr = err/(n-2) 
    613                 if merr < 1e-10: 
    614                     F = 0 
    615                     Fprob = 1 
    616                 else: 
    617                     F = mod/merr 
    618                     Fprob = statc.fprob(F, 1, int(n-2)) 
    619                 cache.errors[exi][d] = Fprob 
     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)) 
    620602#                        print "%.4f" % Fprob, 
    621603                #print ("%.3f\t" + "%.0f\t"*6 + "%f\t%f") % (w, ref_x, ex_x, n, a, b, merr, F, Fprob) 
     
    638620 
    639621     
    640 def createQTable(cache, data, dimensions, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, correlationsAsMeta = False, originalAsMeta = False): 
     622def createQTable(cache, data, dimensions, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, originalAsMeta = False): 
    641623    nDimensions = len(dimensions) 
    642624     
     
    651633             
    652634    dom = orange.Domain(data.domain.attributes, classVar) 
    653     dom.addmetas(data.domain.getmetas()) 
    654635    setattr(dom, "constraintAttributes", [cache.contAttributes[i] for i in dimensions]) 
    655636 
     
    668649            metaIDs.append(metaID) 
    669650 
    670     corMetaIDs = [] 
    671     if correlationsAsMeta: 
    672         for dim in dimensions: 
    673             metaVar = orange.FloatVariable("corr(%s)" % cache.attributes[dim][0]) 
    674             metaID = orange.newmetaid() 
    675             dom.addmeta(metaID, metaVar) 
    676             corMetaIDs.append(metaID) 
    677         metaVar = orange.FloatVariable("corr") 
    678         metaID = orange.newmetaid() 
    679         dom.addmeta(metaID, metaVar) 
    680         corMetaIDs.append(metaID) 
    681  
    682651    if originalAsMeta: 
    683652        originalID = orange.newmetaid() 
     
    689658    paded = orange.ExampleTable(dom, data) 
    690659 
    691     for i, (pad, alldeltas) in enumerate(zip(paded, cache.deltas)): 
     660    for pad, alldeltas in zip(paded, cache.deltas): 
    692661        deltas = [alldeltas[d] for d in dimensions] 
    693  
     662         
    694663        if needQ: 
    695664            qs = "".join([(delta > threshold and "0") or (delta < -threshold and "1") or (delta == "?" and "?") or "2" for delta in deltas]) 
     
    708677                pad.setmeta(*a) 
    709678 
    710         if correlationsAsMeta: 
    711             if hasattr(cache, "errors"): 
    712                 maxerr = -1e20 
    713                 for id, val in zip(corMetaIDs, [cache.errors[i][d] for d in dimensions]): 
    714                     if val == None: 
    715                         pad.setmeta(id, "?") 
    716                     else: 
    717                         pad.setmeta(id, val) 
    718                         maxerr = max(maxerr, val) 
    719                 pad.setmeta(corMetaIDs[-1], maxerr) 
    720             else: 
    721                 minder = 0 
    722                 for id, val in zip(corMetaIDs[:-1], deltas): 
    723                     if type(val) == str: 
    724                         pad.setmeta(id, "?") 
    725                     else: 
    726                         pad.setmeta(id, abs(val)) 
    727                         minder = min(minder, abs(val)) 
    728                 pad.setmeta(corMetaIDs[-1], minder) 
    729  
    730     return paded, derivativeID, metaIDs, corMetaIDs, originalID 
    731  
    732  
    733 def pade(data, attributes = None, method = tubedRegression, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, correlationsAsMeta = False, originalAsMeta = False): 
     679    return paded, derivativeID, metaIDs, originalID 
     680 
     681 
     682def pade(data, attributes = None, method = tubedRegression, outputAttr = -1, threshold = 0, MQCNotation = False, derivativeAsMeta = False, differencesAsMeta = False, originalAsMeta = False): 
    734683    cache = makeBasicCache(data) 
    735684    cache.deltas = [[None] * len(cache.contAttributes) for x in xrange(len(data))] 
    736     if method == tubedRegression: 
    737         cache.errors = [[None] * len(cache.contAttributes) for x in xrange(len(data))] 
    738  
    739685    cache.nNeighbours = 30 
    740686 
     
    750696 
    751697    method(cache, dimensions) 
    752     return createQTable(cache, data, dimensions, outputAttr, threshold, MQCNotation, derivativeAsMeta, differencesAsMeta, correlationsAsMeta, originalAsMeta) 
     698    return createQTable(cache, data, dimensions, outputAttr, threshold, MQCNotation, derivativeAsMeta, differencesAsMeta, originalAsMeta) 
    753699 
    754700 
Note: See TracChangeset for help on using the changeset viewer.