예제 #1
0
    def constructDecisionTree(self):
        # initialize
        nsfdb = MySQLdb.connect(host="localhost", user="******", db="nsfdb")
        nsfcur = nsfdb.cursor()
        self.capabilitylist = []
        self.learning_input = []
        self.learning_output = []
        self.nsflist = []
        self.nsf_capability = []

        # find all registered capabilities
        nsfcur.execute("SELECT DISTINCT cname FROM capabilitytable")
        rows = nsfcur.fetchall()
        rowlen = len(rows)
        for ptr in rows:
            self.capabilitylist.append(ptr[0])
            self.learning_output.append([])

        # construct database for decision tree
        nsfcur.execute("SELECT DISTINCT nname FROM nsftable")
        rows = nsfcur.fetchall()
        for ptr in rows:
            self.nsflist.append(ptr[0])

        for nsf in self.nsflist:
            temp_capalist = []
            nsfcur.execute("SELECT cname FROM capabilitytable WHERE nname='" +
                           nsf + "'")
            rows = nsfcur.fetchall()
            for ptr in rows:
                temp_capalist.append(ptr[0])
            self.nsf_capability.append(temp_capalist)
        """
    learning_temp = []
    for i in range(len(self.capabilitylist)):
      learning_temp.append(False)
    self.learning_input.append(learning_temp)
    for i in range(len(self.nsf_capability)):
      self.learning_output[i].append(False)
    """

        for x in range(len(self.nsf_capability)):
            learning_temp = []
            for i in range(len(self.capabilitylist)):
                if self.capabilitylist[i] in self.nsf_capability[x]:
                    learning_temp.append(True)
                else:
                    learning_temp.append(False)
            self.learning_input.append(learning_temp)
            for y in range(len(self.nsf_capability)):
                self.learning_output[y].append(x == y)

        for i in range(len(self.nsf_capability)):
            capa_temp = []
            for j in range(len(self.nsf_capability[i])):
                capa_temp.append(self.nsf_capability[i][j])
            for j in range(len(self.nsf_capability)):
                if i != j:
                    for k in range(len(self.nsf_capability[j])):
                        if self.nsf_capability[j][k] in capa_temp:
                            capa_temp.remove(self.nsf_capability[j][k])
            learning_temp = []
            for j in range(len(self.capabilitylist)):
                if self.capabilitylist[j] in capa_temp:
                    learning_temp.append(True)
                else:
                    learning_temp.append(False)
            self.learning_input.append(learning_temp)
            for y in range(len(self.nsf_capability)):
                self.learning_output[y].append((i == y and len(capa_temp) > 0))

        # construct Decision Tree
        self.dtlist = []
        for i in range(len(self.nsf_capability)):
            self.dtlist.append(
                DecisionTree.DecisionTreeNode(self.learning_input,
                                              self.learning_output[i], 0.005,
                                              self.capabilitylist))
        nsfcur.close()
        nsfdb.close()