⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 owsom.py

📁 orange源码 数据挖掘技术
💻 PY
字号:
"""
<name>SOM</name>
<description>Self organizing maps</description>
<icon>SOM.png</icon>
<contact>Ales Erjavec (ales.erjevec324(@at@)email.si)</contact> 
<priority>5010</priority>
"""

import orange, orangeom
import orngSOM
from OWWidget import *
import OWGUI

class OWSOM(OWWidget):
    settingsList=["xdim", "ydim", "neighborhood", "topology", "alphaType", "iterations1", "iterations2",
                  "radius1", "radius2", "alpha1", "alpha2"]
    def __init__(self ,parent=None , signalManager=None, name="SOM"):
        OWWidget.__init__(self, parent, signalManager, name)

        self.inputs=[("Examples", ExampleTable, self.data)]
        self.outputs=[("Classifier", orange.Classifier), ("Learner", orange.Learner), ("SOMMap", orangeom.SOMMap)]

        self.LearnerName=""
        self.xdim=5
        self.ydim=10
        self.neighborhood=0
        self.topology=0
        self.alphaType=0
        self.iterations1=1000
        self.iterations2=10000
        self.radius1=5
        self.radius2=5
        self.alpha1=0.05
        self.alpha2=0.01
        self.loadSettings()
        self.TopolMap=[orangeom.SOMLearner.HexagonalTopology, orangeom.SOMLearner.RectangularTopology]
        self.NeighMap=[orangeom.SOMLearner.BubbleNeighborhood, orangeom.SOMLearner.GaussianNeighborhood]
        self.AlphaMap=[orangeom.SOMLearner.LinearFunction, orangeom.SOMLearner.InverseFunction]
        self.learnerName=OWGUI.lineEdit(self.controlArea, self, "LearnerName", box="Learner/Classifier Name", tooltip="Name to be used by other widgets to identify yor Learner/Classifier")
        self.learnerName.setText("SOM Classifier")
        box=OWGUI.widgetBox(self.controlArea, self)
        OWGUI.spin(box, self, "xdim", 4, 1000, orientation="horizontal", label="X Dim")
        OWGUI.spin(box, self, "ydim", 4, 1000, orientation="horizontal", label="Y Dim")
        OWGUI.radioButtonsInBox(self.controlArea, self, "topology", ["Hexagonal topology", "Rectangular topology"], box="Topology")
        OWGUI.radioButtonsInBox(self.controlArea, self, "neighborhood", ["Bubble neighborhood","Gaussian neighborhood"], box="Neighborhood")
        OWGUI.radioButtonsInBox(self.controlArea, self, "alphaType", ["Linear function", "Inverse function"], box="Alpha Function Type")
        tabW=QTabWidget(self.controlArea)
        b1=OWGUI.widgetBox(self.controlArea)
        b2=OWGUI.widgetBox(self.controlArea)
        tabW.addTab(b1,"Step 1")
        tabW.addTab(b2,"Step 2")
        OWGUI.spin(b1, self, "iterations1", 10, 100000, orientation="horizontal", label="Num. iter.")
        OWGUI.spin(b2, self, "iterations2", 10, 100000, orientation="horizontal", label="Num. iter.")
        OWGUI.spin(b1, self, "radius1", 2,1000, orientation="horizontal", label="Radius")
        OWGUI.spin(b2, self, "radius2", 2,1000, orientation="horizontal", label="Radius")
        OWGUI.doubleSpin(b1, self, "alpha1", 0.0, 1.0, 0.01, orientation="horizontal", label="Alpha")
        OWGUI.doubleSpin(b2, self, "alpha2", 0.0, 1.0, 0.01, orientation="horizontal", label="Alpha")
        self.alpha1=self.alpha1
        self.alpha2=self.alpha2
        OWGUI.button(self.controlArea, self,  "&Apply settings", callback=self.ApplySettings)
        
        self.resize(100,100)

        
    def data(self, data=None):
        self.data=data
        if data:
            self.ApplySettings()
        else:
            self.send("Classifier", None)
            self.send("SOMMap", None)
            self.send("Learner", None)
        

    def ApplySettings(self):
        topology=self.TopolMap[self.topology]
        neigh=self.NeighMap[self.neighborhood]
        alphaT=self.AlphaMap[self.alphaType]
        params=[{"iterations":self.iterations1, "radius":self.radius1, "alpha":self.alpha1},
                {"iterations":self.iterations2, "radius":self.radius2, "alpha":self.alpha2}]
        self.learner=orngSOM.SOMLearner(xDim=self.xdim, yDim=self.ydim, topology=topology, neighborhood=neigh, alphaType=alphaT, parameters=params)
        
        self.classifier=self.learner(self.data)
        self.classifier.name=self.LearnerName
        self.classifier.setattr("data", self.data)
        if self.data.domain.classVar:
            self.send("Classifier", self.classifier)
        self.send("SOMMap", self.classifier)
        self.send("Learner", self.learner)
        
if __name__=="__main__":
    app=QApplication(sys.argv)
    w=OWSOM()
    app.setMainWidget(w)
    w.show()
    data=orange.ExampleTable("../../doc/datasets/iris.tab")
    
    w.data(data)
    app.exec_loop()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -