Skip to content

Commit

Permalink
szukanie K
Browse files Browse the repository at this point in the history
  • Loading branch information
Krzysztof Nowak committed May 21, 2012
1 parent 8353cb3 commit 89d4de7
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 4 deletions.
36 changes: 33 additions & 3 deletions SWD.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,35 @@ def _srednia(self, obiekty):
sr[zm] = float(suma)/len(obiekty)
return sr

def sklasyfikuj_k(self, k, klasy_tmp, indeksy, srednie):
rozrzuty_suma = 0.0;
wartosci = []
for wektor in self.lista:
wartosci.append([wektor[i] for i in indeksy])
for t in range(k):
#TODO BUG,
osobniki = [wartosci[i] for i in range(len(wartosci)) if klasy_tmp[i]==t]
srednia = self._srednia(osobniki)
#srednia = srednie[t]
max_rozrzut = max([self.metrykaEuklidesowa(osobniki[i], srednia) for i in range(len(osobniki))])
rozrzuty_suma += max_rozrzut
return rozrzuty_suma


def znajdz_k_srednich(self, metryka, klasa_decyzyjna, indeksy, N=None):
k_max = 10; #do ilu klas maksymalnie szukac
k_min = 2
rozrzuty = []
for k in range(k_min, k_max+1):
klasy_tmp, srednie = self.licz_k_srednich(k,metryka,klasa_decyzyjna, indeksy, N, False)
rozrzuty.append([self.sklasyfikuj_k(k,klasy_tmp,indeksy,srednie), k, klasy_tmp])
wynik = sorted(rozrzuty, key=lambda a: a[0])[0]
for w in range(len(self.lista)):
self.lista[w].append(wynik[2][w])
self.kolumny.append('Metoda %d-srednich'%(wynik[1]))
self.typy.append(int)
return wynik


def licz_k_srednich(self, k, metryka, klasa_decyzyjna, indeksy, N=None, dopasuj=True):
"""
Expand Down Expand Up @@ -440,9 +469,10 @@ def DBG_k_srednich():
z = Zbior()
z.wczytaj('dane/irisdat2.txt', '\t', 0, 1,1)
z.rzutuj_dane()
output = z.licz_k_srednich(3,z.metrykaEuklidesowa,4,[0,1,2,3], None)
if output['result'] == 'OK':
print output['val']
#output = z.licz_k_srednich(3,z.metrykaEuklidesowa,4,[0,1,2,3], None)
#if output['result'] == 'OK':
#print output['val']
print z.znajdz_k_srednich(z.metrykaEuklidesowa,4,[0,1,2,3])
if(__name__ == "__main__"):
DBG_k_srednich()

17 changes: 16 additions & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,22 @@ def Metoda_K_Srednich(self):
self.populate_from_set()

def Metoda_K_Srednich_search(self):
pass #TODO

indeksy, ok = QtGui.QInputDialog.getText(self, 'Indeksy Zmiennych', 'Podaj indeksy kolumn oddzielone ",":')
if not ok:
return

klasa, ok = QtGui.QInputDialog.getText(self, 'Klasa decyzyjna', 'Podaj indeks klasy decyzyjnej:')
if not ok:
return

indeksy = [int(i) for i in indeksy.split(',')]
klasa = int(klasa)

wynik = self.zb.znajdz_k_srednich(self.zb.metrykaEuklidesowa,klasa, indeksy)
self.populate_from_set()
self.PopupMessage("Podsumowanie szukania K", "Optymalne K: %d, Suma odchylen: %.3f" %(wynik[1],wynik[0]))

def __init__(self):
QtGui.QMainWindow.__init__(self)

Expand Down

0 comments on commit 89d4de7

Please sign in to comment.