1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 02 22:02:08 2018
@author: user
"""
from scipy.spatial import distance
import numpy as np
def ReadData(fileName):
f = open(fileName, 'r');
lines = f.read().splitlines();
f.close();
items = [];
for i in range(1, len(lines)):
line = lines[i].split(',');
itemFeatures = [];
for j in range(len(line)-1):
v = float(line[j]); # Convert feature value to float
itemFeatures.append(v); # Add feature value to dict
items.append(itemFeatures);
return items;
def normalize(lst):
s = sum(lst)
return map(lambda x: float(x)/s, lst)
def BiGC(X,s):
S=149*[0]
for i in range(1, len(X)):
#euclidian distance
for j in range(1, len(X)):
if j!=i:
S[i]=S[i]+distance.euclidean(X[i], X[j])
S[i]= (S[i])/2
print S
Q=X[:]
Q=list(X)
ti=0;
x=0;
Pt=149*[[]]
k=[]
dist=149*[0]
cpt=0
#repeat
t=np.argsort(S)
t =t[::-1]
t=t.tolist()
print S[12]
print S[117]
while(1):
ts=0
while(1):
if(X[t[ts]] in Q):
break
t.remove(t[ts])
cpt=0
for j in range(1, len(X)):
x=distance.euclidean(X[t[ts]], X[j])
dist[j]=x
norm= normalize(dist)
for j in range(1, len(X)):
if (norm[j]>=s and (X[j] in Q)):
Pt[ti].append(X[j])
Q.remove(X[j])
cpt=cpt+1;
if(cpt!= 0):
ti=ti+1
k.append(X[t[ts]])
t.remove(t[ts])
print ('Pt num ', ti, ' = ', len (Pt[ti]))
if(len (Q)==0 or len (t)==0):
break
#del Pt[ti][:]
return S
X=100*[];
items=ReadData("C:\Users\user\Desktop\Python projects workspace\KmeansClustering\iris.txt")
S=BiGC(items,0.006) |
Partager