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
Esempio n. 4
0
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