コード例 #1
0
ファイル: runGui.py プロジェクト: wnsdlf2001/lamstarCDSS
    def train(self):
        allSamples = goodSamples = 0.0
        self.log('Starting the real training...', 'main')
        if self.sender() == self.ui.actionTrain:
            procData = processData(self.trainPat)
            result = procData.readContents()
            data = inputData()
            data.addAll(result)
            self.ls = Lamstar.lamstar(15, 1)
            for iter in range(10):
                print('Iteration %s' % iter)
                for i in range(data.getCount()):
                    print('Training data : ', i)
                    self.arr2Image(data.getWholeArray(i), 'input')
                    #raw_input('Enter')
                    self.ls.train(data.getSubWords(i), data.getOutputs(i))
                if (self.debug > 0):
                    self.log('Iteration no:' + str(iter), 'main')
                    self.log('No of nodes' + str(self.ls.getNoOfNodes()),
                             'main')

        elif self.sender() == self.ui.actionRun_Test:
            #goodSamples = allSamples = 0
            procData = processData(self.testPat)
            result = procData.readContents()
            data = inputData()
            data.addAll(result)
            files = []
            for afile in os.listdir(self.testingDir):
                if afile[-3:] == 'png' and afile.find('procced') != -1:
                    files.append(afile)
            files.sort()
            print('Quering for test data')
            self.log('Quering for test data', 'main')
            print('number of items: %s' % (data.getCount()))
            for i in range(data.getCount()):
                self.log('Querying for ' + files[i].rpartition('/')[-1],
                         'query')
                print('Querying for ' + files[i].rpartition('/')[-1])
                self.arr2Image(data.getWholeArray(i), 'input')
                (result, BMU) = self.ls.query(data.getSubWords(i))
                arr = self.constructArr(BMU)
                self.arr2Image(arr, 'output')
                self.log(result, 'status')
                allSamples += 1
                if files[i].find(result + '-') != -1:
                    goodSamples += 1
                self.ui.resultLabel.setText(result)
            self.log('No of nodes: ' + str(self.ls.getNoOfNodes()), 'main')
            self.log('No of links: ' + str(self.ls.getNoOfLinks()), 'main')
            self.log(
                'Accuracy = ' + str(
                    (float(goodSamples) / allSamples) * 100) + '%', 'main')
            print('Good sample=%s all=%s' % (goodSamples, allSamples))
コード例 #2
0
ファイル: runGui.py プロジェクト: mareurs/lamstar
    def train(self):
        allSamples = goodSamples = 0.0
        self.log('Starting the real training...', 'main')
        if self.sender() == self.ui.actionTrain:
            procData = processData(self.trainPat)
            result = procData.readContents()
            data = inputData()
            data.addAll(result)
            self.ls = Lamstar.lamstar(15, 1)
            for iter in range(10):
                print('Iteration %s' % iter)
                for i in range(data.getCount()):
#                    print('Training data : ', i)
#                    self.arr2Image(data.getWholeArray(i),'input')
#                    raw_input('Enter')
                    self.ls.train(data.getSubWords(i), data.getOutputs(i))
                if(self.debug > 0):
                    self.log('Iteration no:' + str(iter), 'main')
                    self.log('No of nodes' + str(self.ls.getNoOfNodes()), 'main')

        elif self.sender() == self.ui.actionRun_Test:
            goodSamples = allSamples = 0
            procData = processData(self.testPat)
            result = procData.readContents()
            data = inputData()
            data.addAll(result)
            files = []
            for afile in os.listdir(self.testingDir):
                if afile[-3:] == 'jpg' and afile.find('procced') != -1:
                    files.append(afile)
            files.sort()
            print('Quering for test data')
            self.log('Quering for test data', 'main')
            print('number of items: %s' % (data.getCount()))
            for i in range(data.getCount()):
                self.log('Querying for ' + files[i].rpartition('/')[-1], 'query')
                print('Querying for ' + files[i].rpartition('/')[-1])
                self.arr2Image(data.getWholeArray(i), 'input')
                (result, BMU) = self.ls.query(data.getSubWords(i))
                arr = self.constructArr(BMU)
                self.arr2Image(arr, 'output')
                self.log(result, 'status')
                allSamples += 1
                if files[i].find(result + '-') != -1:
                    goodSamples += 1
                self.ui.resultLabel.setText(result)
            self.log('No of nodes: ' + str(self.ls.getNoOfNodes()), 'main')
            self.log('No of links: ' + str(self.ls.getNoOfLinks()), 'main')
            self.log('Accuracy = ' + str((float(goodSamples) / allSamples) * 100) + '%', 'main')
            print ('Good sample=%s all=%s' % (goodSamples, allSamples))
コード例 #3
0
ファイル: Lamstar.py プロジェクト: mareurs/lamstar
    def getNoOfLinks(self):
        return len(self.Link2OutputDict)

    def printTable(self):
        for key in sorted(self.LinkTable.keys()):
            print('%s %s' % (key, self.LinkTable[key]))

    def maxFromDict(self, dictionary):
        return max(dictionary.iteritems(), key=lambda item: sum(item[1]))[0]


if __name__ == '__main__':

    procData = processData('data/images/processed/all/150x200.pat')
    result = procData.readContents()
    data = inputData()
    data.addAll(result)

    preData = processData('data/images/processed/unseen/unseen.pat')
    result = preData.readContents()
    unseenData = inputData()
    unseenData.addAll(result)

    ls = lamstar(10, 1)
    for _ in range(10):
        for i in range(data.getCount()):
#            print('Training data : ', i)
            ls.train(data.getSubWords(i), data.getOutputs(i))
#            sys.stdin.read(1)

#    ls.printSOMs()
コード例 #4
0
ファイル: Lamstar.py プロジェクト: wnsdlf2001/lamstarCDSS
    def printTable(self):
        for key in self.LinkTable.keys():
            print('%s %s' % (key, self.LinkTable[key]))

    def maxFromDict(self, dictionary):
        #return min(dictionary.items(), key=lambda item: sum(item[1])/float(len(item[1])))[0]
        return max(dictionary.items(), key=lambda item: sum(item[1]))[0]


if __name__ == '__main__':

    #procData = processData('data/images/processed/all/150x200.pat')
    procData = processData('data/clevepro.pat')
    result = procData.readContents()
    data = inputData()
    data.addAll(result)

    # #preData = processData('data/images/processed/unseen/unseen.pat')
    # preData = processData('data/.txt')
    # result = preData.readContents()
    # unseenData = inputData()
    # unseenData.addAll(result)

    ls = lamstar(10, 1)
    for _ in range(10):
        for i in range(data.getCount()):
            print('Training data : ', i)
            ls.train(data.getSubWords(i), data.getOutputs(i))
    #sys.stdin.read(1)
コード例 #5
0
ファイル: runConsole.py プロジェクト: wnsdlf2001/lamstarCDSS
    def train(
        self,
        traindata,
        iternum,
        distth,
        bywho,
    ):

        procData = processData(traindata, self.label)
        result = procData.readContents()
        data = inputData()
        data.addAll(result)
        b = []
        for i in range(0, data.getCount()):
            b.append(i)
        if bywho == 'train':
            if self.trainnumber > data.getCount():  #에외처리
                print(
                    "training data is larger than number of dataset. Choose trainnum lower than "
                    + str(data.getCount()))
                return 0
            self.ls = Lamstar.lamstar(self.subwordnumber,
                                      1)  #램스타 객체 생성(서브워드 갯수만큼)
            #b = random.sample(range(0, data.getCount()), self.trainnumber)
            for iter in range(iternum):
                #print('Training Iteration %s' % iter)
                for i in range(self.trainnumber):  #num of subwords
                    #print('Training data : ', b[i])  #샘플링 데이터 인덱스 확인 가능
                    self.ls.train(data.getSubWords(b[i], self.subwordlist),
                                  data.getOutputs(b[i]), distth)  #트레이닝

        elif bywho == 'test':
            b = b[data.getCount() - self.testnumber:data.getCount()]
            accuarcy = 0
            TP = 0
            TN = 0
            FP = 0
            FN = 0
            #if self.testnumber > data.getCount():
            #    print("testing data is larger than number of dataset. Choose testnum lower than " + str(data.getCount()))
            #    return 0
            print("Training iteration: " + str(self.iternum))
            #a =[]
            #for i in range(0, data.getCount()):
            #    a.append(i)
            for i in range(len(b)):
                #    p = a[random.randrange(0, len(a) - 1)]

                #print("")
                #print("Validation "+str(i))
                queryvalue = self.ls.query(
                    data.getSubWords(b[i], self.subwordlist))
                if queryvalue == data.getOutputs(b[i]):
                    #     print("GT : " + data.getOutputs(i) +"  ST : " + queryvalue + " Result : TRUE")
                    accuarcy += 1
            # else:
            #     print("GT : " + data.getOutputs(i) + "  ST : " + queryvalue + " Result : FALSE")
            # print("")
                if int(data.getOutputs(b[i])) == 0 and int(queryvalue) == 0:
                    TN += 1
                if int(data.getOutputs(b[i])) == 1 and int(queryvalue) == 1:
                    TP += 1
                if int(data.getOutputs(b[i])) == 0 and int(queryvalue) == 1:
                    FP += 1
                if int(data.getOutputs(b[i])) == 1 and int(queryvalue) == 0:
                    FN += 1

            accuarcy /= int(len(b))  # 분할 validation 버젼
            #accuarcy /= self.testnumber #랜덤 샘플링 버젼
            #print("Accuarcy : " + str(accuarcy * 100) + "%")
            if TP == 20: exit
            else:
                if TP + FP == 0:
                    prec = 0
                elif TN + FP == 0:
                    print("TN + FP is Zero! setting prec to 0")
                    prec = 0
                else:
                    prec = TN / (TN + FP)
                if TP + FN == 0:
                    rec = 0
                else:
                    rec = TP / (TP + FN)
            #accuracy = (TP + TN)/(TP + TN + FP + FN)
            #if (rec == 0) and (prec == 0): exit

                print("Sensitivity:" + str(rec * 100) + "%",
                      "Precision:" + str(prec * 100) + "%",
                      "Accuarcy:" + str(accuarcy * 100) + "%")
                print("TP:" + str(TP) + "  TN:" + str(TN) + "  FP:" + str(FP) +
                      "  FN:" + str(FN))
                print("")