Changeset 7987:dba23fbb582c in orange


Ignore:
Timestamp:
06/06/11 14:51:00 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
4a00c111a26e3a2840487fcfabaef4b2135fc7a5
Message:

Show a warning when sparse algorithm is selected but the data does not appear to be sparse.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Associate/OWAssociationRules.py

    r7868 r7987  
    1010import OWGUI 
    1111 
     12 
     13def table_sparsness(table): 
     14    """ Return the table sparseness (the ratio of unknown values in the table) 
     15    for both the regular part (attributes) and meta attributes (basket format). 
     16     
     17    :param table: Data table. 
     18    :type table: :class:`Orange.data.Table` 
     19     
     20    """ 
     21    unknown_count = 0 
     22    all_count = 0 
     23     
     24    for ex in table: 
     25        for val in ex: 
     26            if val.isSpecial(): 
     27                unknown_count += 1 
     28            all_count += 1 
     29    regular_sparseness = float(unknown_count) / (all_count or 1) 
     30     
     31    metas = table.domain.getmetas().values() 
     32    unknown_count = 0 
     33    all_count = 0 
     34     
     35    for ex in table: 
     36        for meta in metas: 
     37            val = ex[meta] 
     38            if val.isSpecial(): 
     39                unknown_count += 1 
     40            all_count += 1 
     41    meta_sparseness = float(unknown_count) / (all_count or 1) 
     42    return regular_sparseness, meta_sparseness 
     43 
     44     
    1245class OWAssociationRules(OWWidget): 
    1346    settingsList = ["useSparseAlgorithm", "classificationRules", "minSupport", "minConfidence", "maxRules"] 
     
    2962 
    3063        box = OWGUI.widgetBox(self.space, "Algorithm", addSpace = True) 
    31         self.cbSparseAlgorithm = OWGUI.checkBox(box, self, 'useSparseAlgorithm', 'Use algorithm for sparse data', tooltip="Use original Agrawal's algorithm", callback = self.checkSparse) 
    32         self.cbClassificationRules = OWGUI.checkBox(box, self, 'classificationRules', 'Induce classification rules', tooltip="Induce classification rules") 
     64        self.cbSparseAlgorithm = OWGUI.checkBox(box, self, 'useSparseAlgorithm', 
     65                                        'Use algorithm for sparse data', 
     66                                        tooltip="Use original Agrawal's algorithm", 
     67                                        callback=self.checkSparse) 
     68         
     69        self.cbClassificationRules = OWGUI.checkBox(box, self, 'classificationRules', 
     70                                        'Induce classification rules', 
     71                                        tooltip="Induce classification rules") 
    3372        self.checkSparse() 
    3473 
     
    5998    def generateRules(self): 
    6099        self.error() 
     100        self.warning(0) 
    61101        if self.dataset: 
     102            if self.dataset and self.useSparseAlgorithm and not self.datasetIsSparse: 
     103                self.warning(0, "Using algorithm for sparse data, but data does not appear to be sparse!") 
    62104            try: 
    63105                num_steps = 20 
     
    77119            self.send("Association Rules", None) 
    78120 
    79  
    80121    def checkSparse(self): 
    81122        self.cbClassificationRules.setEnabled(not self.useSparseAlgorithm) 
     
    83124            self.cbClassificationRules.setChecked(0) 
    84125 
    85  
    86     def setData(self,dataset): 
     126    def setData(self, dataset): 
    87127        self.dataset = dataset 
     128        if dataset is not None: 
     129            regular, meta = table_sparsness(dataset) 
     130            self.datasetIsSparse = regular > 0.4 or meta > 0.4 
     131             
    88132        self.generateRules() 
     133         
    89134 
    90135if __name__=="__main__": 
Note: See TracChangeset for help on using the changeset viewer.