def KMeans2(TabData, ClusterCount, Metric, Weight, PrimCent): TabDataNormal, UnKeysMat, MEMat, DMat, Y=PrepareForKNN(TabData, len(TabData[0])) TabDataNormal.pop(0) TabDataNormal=list(zip(*TabDataNormal)) mu1=PrimaryCenter(TabDataNormal, Y, ClusterCount, Metric, Weight, PrimCent) Default=[] for i in TabDataNormal[0]: if isinstance(i, list)==True: Default.append([0 for ii in i]) else: Default.append(0) while True: ClusterList=CreateClusterList(TabDataNormal, mu1, Metric, Weight) mu2=[] #print('0: {0} 1: {1} 2: {2} 3: {3} 4: {4}'. format(len(ClusterList[0]), len(ClusterList[1]), len(ClusterList[2]), len(ClusterList[3]), len(ClusterList[4]))) for Cluster in ClusterList: center=CenterOfMass(Cluster, Default) mu2.append(center) if (mu1==mu2): break else: mu1=mu2[:] mu=CloseToCenterOfMass(ClusterList, mu1, Metric, Weight) OptTabData=GetOptimizedTabData(TabData, TabDataNormal, mu) return OptTabData
def TimurAlgorithm2(TabData): OptTabData, Id=[], {} TabDataNormal, UnKeysMat, MEMat, DMat, Y=PrepareForKNN(TabData, len(TabData[0])) TabDataNormal.pop(0) ClusterList={} for i, y in enumerate(Y): if ClusterList.get(y)==None: ClusterList[y]=[i] else: ClusterList[y].append(i) for key in ClusterList.keys(): Cluster=ClusterList[key] for Column in TabDataNormal: min, max=Column[Cluster[0]], Column[Cluster[0]] idmin, idmax=Cluster[0], Cluster[0] for i in Cluster[1:]: if Column[i]<min: min=Column[i] idmin=i elif Column[i]>max: max=Column[i] idmax=i Id[idmin], Id[idmax]=idmin, idmax for id in sorted(Id.keys()): OptTabData.append(TabData[id]) return OptTabData
def TimurAlgorithm(TabData): IdTab=[Str[0] for Str in TabData] TabDataNormal, UnKeysMat, MEMat, DMat, Y=PrepareForKNN(TabData, len(TabData[0])) TabDataNormal.pop(0) #TabDataNormal=list(zip(*TabDataNormal)) Id, d=[], {} for y in Y: if d.get(y)==None: d[y]=len(d) ClusterList=[[] for i in range(0, len(d))] for i, y in enumerate(Y): ClusterList[d.get(y)].append(i) for Column in TabDataNormal: for ClNum, Cluster in enumerate(ClusterList): #flash('------'+str(ClNum)+'------') max, min, idmax, idmin=Column[Cluster[0]], Column[Cluster[0]], Cluster[0], Cluster[0] for i in Cluster: if Column[i]>max: max=Column[i] idmax=i if Column[i]<min: min=Column[i] idmin=i #flash('IdMax: '+str(idmax)+' Max: '+str(max)) #flash('IdMin: '+str(idmin)+' Min: '+str(max)) Id.append(IdTab[idmax]) Id.append(IdTab[idmin]) Id.sort() Id1 = [e for i,e in enumerate(Id) if e not in Id[:i]] return Id1
def Classification2(TabData, Metric, Weight, Similarity): TabDataNormal, UnKeysMat, MEMat, DMat, Y=PrepareForKNN(TabData, len(TabData[0])) TabDataNormal.pop(0) TabDataNormal=list(zip(*TabDataNormal)) for i, Str1 in enumerate(TabDataNormal): PartTabDataNormal=(TabDataNormal)[i+1:] for j, Str2 in enumerate(PartTabDataNormal): dist=globals()[Metric](Str1, Str2, Weight) if dist<=Similarity: PartTabDataNormal.pop(j) TabDataNormal.pop(i+1+j) TabData.pop(i+1+j) return TabData