📄 owliftcurve.py
字号:
#load settings
self.loadSettings()
# temp variables
self.dres = None
self.classifierColor = None
self.numberOfClasses = 0
self.targetClass = None
self.numberOfClassifiers = 0
self.numberOfIterations = 0
self.graphs = []
self.maxp = 1000
self.defaultPerfLinePValues = []
# performance analysis (temporary values
self.FPcost = 500.0
self.FNcost = 500.0
self.pvalue = 50.0 ##0.400
# list of values (remember for each class)
self.FPcostList = []
self.FNcostList = []
self.pvalueList = []
# GUI
self.grid.expand(3, 3)
self.graphsGridLayoutQGL = QGridLayout(self.mainArea)
# save each ROC graph in separate file
self.connect(self.graphButton, SIGNAL("clicked()"), self.saveToFile)
## general tab
self.tabs = QTabWidget(self.controlArea, 'tabWidget')
self.generalTab = QVGroupBox(self)
## target class
self.classCombo = OWGUI.comboBox(self.generalTab, self, 'targetClass', box='Target Class', items=[], callback=self.target)
self.classCombo.setMaximumSize(150, 20)
## classifiers selection (classifiersQLB)
self.classifiersQVGB = QVGroupBox(self.generalTab)
self.classifiersQVGB.setTitle("Classifiers")
self.classifiersQLB = QListBox(self.classifiersQVGB)
self.classifiersQLB.setSelectionMode(QListBox.Multi)
self.connect(self.classifiersQLB, SIGNAL("selectionChanged()"), self.classifiersSelectionChange)
self.unselectAllClassifiersQLB = QPushButton("(Un)select all", self.classifiersQVGB)
self.connect(self.unselectAllClassifiersQLB, SIGNAL("clicked()"), self.SUAclassifiersQLB)
# show Lift Curve convex hull
OWGUI.checkBox(self.generalTab, self, 'ShowConvexHull', 'Show Lift Convex Hull', tooltip='', callback=self.setShowConvexHull)
self.tabs.insertTab(self.generalTab, "General")
# performance analysis
self.performanceTab = QVGroupBox(self)
self.performanceTabCosts = QVGroupBox(self.performanceTab)
OWGUI.checkBox(self.performanceTabCosts, self, 'EnablePerformance', 'Show Cost Function', tooltip='', callback=self.setShowPerformanceAnalysis)
## FP and FN cost ranges
mincost = 1; maxcost = 1000; stepcost = 5;
self.maxpsum = 100; self.minp = 1; self.maxp = self.maxpsum - self.minp ## need it also in self.pvaluesUpdated
stepp = 1.0
OWGUI.hSlider(self.performanceTabCosts, self, 'FPcost', box='FP Cost', minValue=mincost, maxValue=maxcost, step=stepcost, callback=self.costsChanged, ticks=50)
OWGUI.hSlider(self.performanceTabCosts, self, 'FNcost', box='FN Cost', minValue=mincost, maxValue=maxcost, step=stepcost, callback=self.costsChanged, ticks=50)
OWGUI.hSlider(self.performanceTabCosts, self, 'pvalue', box='p(cl) [%]', minValue=self.minp, maxValue=self.maxp, step=stepp, callback=self.pvaluesUpdated, ticks=5, labelFormat="%2.1f")
OWGUI.button(self.performanceTabCosts, self, 'Default p(cl)', self.setDefaultPValues) ## reset p values to default
## test set selection (testSetsQLB)
self.testSetsQVGB = QVGroupBox(self.performanceTab)
self.testSetsQVGB.setTitle("Test sets")
self.testSetsQLB = QListBox(self.testSetsQVGB)
self.testSetsQLB.setSelectionMode(QListBox.Multi)
self.connect(self.testSetsQLB, SIGNAL("selectionChanged()"), self.testSetsSelectionChange)
self.unselectAllTestSetsQLB = QPushButton("(Un)select all", self.testSetsQVGB)
self.connect(self.unselectAllTestSetsQLB, SIGNAL("clicked()"), self.SUAtestSetsQLB)
self.tabs.insertTab(self.performanceTab, "Analysis")
# settings tab
self.settingsTab = QVGroupBox(self)
OWGUI.hSlider(self.settingsTab, self, 'PointWidth', box='Point Width', minValue=3, maxValue=5, step=9, callback=self.setPointWidth, ticks=1)
OWGUI.hSlider(self.settingsTab, self, 'CurveWidth', box='Lift Curve Width', minValue=1, maxValue=5, step=1, callback=self.setCurveWidth, ticks=1)
OWGUI.hSlider(self.settingsTab, self, 'ConvexHullCurveWidth', box='Lift Curve Convex Hull', minValue=2, maxValue=9, step=1, callback=self.setConvexHullCurveWidth, ticks=1)
OWGUI.checkBox(self.settingsTab, self, 'ShowDiagonal', 'Show Diagonal', tooltip='', callback=self.setShowDiagonal)
self.tabs.insertTab(self.settingsTab, "Settings")
self.resize(800, 600)
def calcAllClassGraphs(self):
for (cl, g) in enumerate(self.graphs):
g.setNumberOfClassifiersIterationsAndClassifierColors(self.dres.classifierNames, self.numberOfIterations, self.classifierColor)
g.setTestSetData(self.dresSplitByIterations, cl)
g.setShowConvexHull(self.ShowConvexHull)
g.setShowPerformanceLine(self.EnablePerformance)
## user settings
g.setPointWidth(self.PointWidth)
g.setCurveWidth(self.CurveWidth)
g.setShowDiagonal(self.ShowDiagonal)
g.setConvexHullCurveWidth(self.ConvexHullCurveWidth)
g.setHullColor(QColor(self.HullColor))
def results(self, dres):
self.FPcostList = []
self.FNcostList = []
self.pvalueList = []
if not dres:
self.targetClass = None
self.classCombo.clear()
self.removeGraphs()
self.testSetsQLB.clear()
return
self.dres = dres
self.classifiersQLB.clear()
self.testSetsQLB.clear()
self.removeGraphs()
self.classCombo.clear()
self.defaultPerfLinePValues = []
if self.dres <> None:
## classQLB
self.numberOfClasses = len(self.dres.classValues)
self.graphs = []
for i in range(self.numberOfClasses):
self.FPcostList.append( 500)
self.FNcostList.append( 500)
graph = singleClassLiftCurveGraph(self.mainArea, "", "Predicted Class: " + self.dres.classValues[i])
self.graphs.append( graph )
self.classCombo.insertItem(self.dres.classValues[i])
## classifiersQLB
self.classifierColor = []
self.numberOfClassifiers = self.dres.numberOfLearners
if self.numberOfClassifiers > 1:
allCforHSV = self.numberOfClassifiers - 1
else:
allCforHSV = self.numberOfClassifiers
for i in range(self.numberOfClassifiers):
newColor = QColor()
newColor.setHsv(i*255/allCforHSV, 255, 255)
self.classifierColor.append( newColor )
## testSetsQLB
self.dresSplitByIterations = orngStat.splitByIterations(self.dres)
self.numberOfIterations = len(self.dresSplitByIterations)
self.calcAllClassGraphs()
## classifiersQLB
for i in range(self.numberOfClassifiers):
newColor = self.classifierColor[i]
self.classifiersQLB.insertItem(ColorPixmap(newColor), self.dres.classifierNames[i])
self.classifiersQLB.selectAll(1)
## testSetsQLB
self.testSetsQLB.insertStrList([str(i) for i in range(self.numberOfIterations)])
self.testSetsQLB.selectAll(1)
## calculate default pvalues
reminder = self.maxp
for f in orngStat.classProbabilitiesFromRes(self.dres):
v = int(round(f * self.maxp))
reminder -= v
if reminder < 0:
v = v+reminder
self.defaultPerfLinePValues.append(v)
self.pvalueList.append( v)
self.targetClass = 0 ## select first target
self.target()
else:
self.classifierColor = None
self.performanceTabCosts.setEnabled(1)
self.setDefaultPValues()
if __name__ == "__main__":
a = QApplication(sys.argv)
owdm = OWLiftCurve()
a.setMainWidget(owdm)
owdm.show()
a.exec_loop()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -