Changeset 7850:4c86d6010ae1 in orange


Ignore:
Timestamp:
04/15/11 17:46:44 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
d0be929e84ab9305de9959ea8ebfcd91970ecca9
Message:

Fixed a jumping progress bar (ticket #738).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Unsupervised/OWKMeans.py

    r7096 r7850  
    238238            self.progressBarInit() 
    239239            Ks = range(self.optimizationFrom, self.optimizationTo + 1) 
    240             self.optimizationRun =[(k, orngClustering.KMeans( 
     240            outer_callback_count = len(Ks) * self.restarts 
     241            outer_callback_state = {"restart": 0} 
     242            optimizationRun = [] 
     243            for k in Ks: 
     244                def outer_progress(km): 
     245                    outer_callback_state["restart"] += 1 
     246                    self.progressBarSet(100.0 * outer_callback_state["restart"] / outer_callback_count) 
     247                     
     248                def inner_progress(km): 
     249                    estimate = self.progressEstimate(km) 
     250                    self.progressBarSet(min(estimate / outer_callback_count + \ 
     251                                            outer_callback_state["restart"] * \ 
     252                                            100.0 / outer_callback_count, 
     253                                            100.0)) 
     254                      
     255                kmeans = orngClustering.KMeans( 
    241256                    self.data, 
    242257                    centroids = k, 
     
    246261                    distance = self.distanceMeasures[self.distanceMeasure][1], 
    247262                    scoring = self.scoringMethods[self.scoring][1], 
    248                     inner_callback = lambda val: self.progressBarSet(min(self.progressEstimate(val)/len(Ks) + k * 100.0 / len(Ks), 100.0)) 
    249                     )) for k in Ks] 
     263                    outer_callback = outer_progress, 
     264                    inner_callback = inner_progress 
     265                    ) 
     266                optimizationRun.append((k, kmeans)) 
     267                 
     268                if self.restarts == 1: 
     269                    outer_progress(None) 
     270                     
     271            self.optimizationRun = optimizationRun  
    250272            self.progressBarFinished() 
    251273            self.bestRun = (min if getattr(self.scoringMethods[self.scoring][1], "minimize", False) else max)(self.optimizationRun, key=lambda (k, run): run.score) 
     
    285307             
    286308    def progressEstimate(self, km): 
    287         norm = math.log(len(self.data), 10) 
     309        norm = math.log(len(km.data), 10) 
    288310        if km.iteration < norm: 
    289311            return min(80.0 * km.iteration / norm, 90.0) 
Note: See TracChangeset for help on using the changeset viewer.