コード例 #1
0
 def run(self, itter):
     bestFitness = np.inf
     bestGen = []
     bestCentroid = None
     for a in range(itter):
         i = 0
         for ant in self.ants:
             ant.init()
             ant.run()
             #print(ant.tabu)
             if( ant.fitness<bestFitness):
                 bestFitness= ant.fitness
                 bestCentroid = ant.centroid
             print ("=========================")
             print ("ant number: "+str(i))
             print ("fitness : " +str(ant.fitness))
             i+=1
         print("=====================================")
         print("Itteration : %s"%(a))
         print("=====================================")
         print("bestfitness : %s"%(bestFitness))
         bestGen.append(bestFitness)
     for i in range(len(bestGen)):
         print("best fitness at generation -%s : %s" %(i, bestGen[i]))
     clust = KMeans(self.data.data,bestCentroid, self.ansdict)
     clust.run(20)
     print("===================================================")
     print("====================K-Means========================")
     print("===================================================")
     print("SSE : %s"%(clust.getaccsse()))
     print("SSE : %s"%(clust.getacc()))
     print("Assigned data : %s"%(clust.assignedNum))
     #print(self.pheromap)
     return self.pheromap
import random
from dataset import Dataset
from KMeans import KMeans

Data = Dataset('nursery.txt')
Data.run()
numCen = 5
centroid = [
    Data.data[random.randrange(0, len(Data.data))].copy()
    for i in range(numCen)
]
Clust = KMeans(Data.data, centroid, 5)
Clust.run(10)
print(Clust.getaccsse())
print(Clust.getacc())
コード例 #3
0
    def Evolutionize(self):
        bestGeneration = []
        bestCentroid = None
        bestFitness = np.inf
        for i in range(self.itter):
            tempBestGen = np.inf
            for j in range(self.populationsize):
                particles = [k for k in range(self.populationsize)
                             if k != j]  #not current
                randomparticle = []
                for a in range(3):
                    ran = random.choice(particles)
                    randomparticle.append(ran)
                    particles.remove(ran)

                a, b, c = randomparticle
                mutant = []
                for z in range(self.centroidNum):
                    mutant.append([])
                    for x in range(self.dimension):
                        #print(len(self.population[a].centroid))
                        #print(len(self.population[a].centroid[z]))
                        tempa = self.population[a].centroid[z][x]
                        tempb = self.population[b].centroid[z][x]
                        tempc = self.population[c].centroid[z][x]
                        temp = tempa - self.mut * (tempb - tempc)
                        mutant[z].append(temp)
                    #temp = [self.population[a].centroid[z][itt] +
                    #        self.mut * (self.population[b].centroid[z][itt]
                    #       - self.population[c].centroid[z][itt]) for itt in range(len(self.population[0].centroid[z])-1)]
                    #print (temp)
                #print(mutant)
                for a in range(len(mutant)):
                    for b in range(len(mutant[a])):
                        mutant[a][b] = np.clip(mutant[a][b], self.bounddown[a],
                                               self.boundup[a])

                crossTruth = [
                    np.random.rand(self.dimension) < self.crossp
                    for a in range(self.centroidNum)
                ]
                #print(crossTruth)

                trial = self.population[j].centroid.copy()
                for a in range(len(crossTruth)):
                    for b in range(len(crossTruth[a])):
                        if (crossTruth[a][b]):
                            trial[a][b] = mutant[a][b]
                temp = self.population[j].getfitness(trial)
                print("=========================")
                print("particle number: " + str(j))
                print("fitness trial : " + str(temp))
                print("self best : " + str(self.population[j].lastfitness))
                #print("%s, %s" %(self.population[j].lastfitness,tempBestGen))
                #print("%s" %(self.population[j].lastfitness<tempBestGen))
                if self.population[j].lastfitness < tempBestGen:
                    #recording best fitness each generation
                    tempBestGen = self.population[j].lastfitness

                if (self.population[j].lastfitness < bestFitness):
                    bestFitness = self.population[j].lastfitness
                    bestCentroid = self.population[j].centroid

                if temp < self.population[j].lastfitness:
                    self.population[j].lastfitness = temp
                    self.population[j].centroid = trial

            bestGeneration.append(tempBestGen)
            print("=====================================")
            print("Itteration : %s" % (i))
            print("=====================================")
            print("bestfitness : %s" % (min(self.fitness)))

        for i in range(len(bestGeneration)):
            print("best fitness at generation -%s : %s" %
                  (i, bestGeneration[i]))
        print("---------------------------------------------------")
        print("Centroid")
        print("---------------------------------------------------")
        for i in range(len(bestCentroid)):
            print("centroid-%s :%s" % (i, bestCentroid[i]))
        clust = KMeans(self.data.data, bestCentroid, self.ansdict)
        clust.run(self.itterkmeans)
        print("===================================================")
        print("====================K-Means========================")
        print("===================================================")
        print("SSE : %s" % (clust.getaccsse()))
        print("Akurasi : %s" % (clust.getacc()))
        print("Assigned data : %s" % (clust.assignedNum))
        print("---------------------------------------------------")
        print("Centroid")
        print("---------------------------------------------------")
        for i in range(len(clust.centroid)):
            print("centroid-%s :%s" % (i, clust.centroid[i]))
        clust.print_Output()