Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.52 KB | None | 0 0
  1. trainingData=[['slashdot','USA','yes',18,'None'],
  2.         ['google','France','yes',23,'Premium'],
  3.         ['google','France','yes',23,'Basic'],
  4.         ['google','France','yes',23,'Basic'],
  5.         ['digg','USA','yes',24,'Basic'],
  6.         ['kiwitobes','France','yes',23,'Basic'],
  7.         ['google','UK','no',21,'Premium'],
  8.         ['(direct)','New Zealand','no',12,'None'],
  9.         ['(direct)','UK','no',21,'Basic'],
  10.         ['google','USA','no',24,'Premium'],
  11.         ['slashdot','France','yes',19,'None'],
  12.         ['digg','USA','no',18,'None'],
  13.         ['google','UK','no',18,'None'],
  14.         ['kiwitobes','UK','no',19,'None'],
  15.         ['digg','New Zealand','yes',12,'Basic'],
  16.         ['slashdot','UK','no',21,'None'],
  17.         ['google','UK','yes',18,'Basic'],
  18.         ['kiwitobes','France','yes',19,'Basic']]
  19. def entropy(rows):
  20.     from math import log
  21.     log2=lambda x:log(x)/log(2)
  22.     results=uniquecounts(rows)
  23.     # Now calculate the entropy
  24.     ent=0.0
  25.     for r in results.keys():
  26.         p=float(results[r])/len(rows)
  27.         ent=ent-p*log2(p)
  28.     return ent
  29. def buildtree(rows,scoref=entropy):
  30.     if len(rows)==0: return decisionnode()
  31.     current_score=scoref(rows)
  32.     # promenlivi so koi sledime koj kriterium e najdobar
  33.     best_gain=0.0
  34.     best_criteria=None
  35.     best_sets=None
  36.     column_count=len(rows[0])-1
  37.     for col in range(0,column_count): # za sekoja kolona (col se dvizi vo intervalot 0 do column_count-1)
  38.         # Sledniov ciklus e za generiranje na recnik od razlicni vrednosti vo ovaa kolona
  39.         column_values={}
  40.         for row in rows:
  41.             column_values[row[col]]=1
  42.             # za sekoja redica se zema vrednosta vo ovaa kolona i se postavuva kako kluc vo column_values
  43.             # za sekoja razlicna vrednost na ovaa kolona se pravi podelba na mnozestvoto
  44.         for value in column_values.keys():
  45.             (set1,set2)=divideset(rows,col,value)
  46.             # za konkretnata podelba se presmetuva informaciona dobivka (gain)
  47.             p=float(len(set1))/len(rows) # verojatnost da se pogodi tekovnata vrednost na ovoj atribut
  48.             gain=current_score-p*scoref(set1)-(1-p)*scoref(set2)
  49.             if gain>best_gain and len(set1)>0 and len(set2)>0:
  50.                 # ovaa e podelba e najadobra do sega pa ke ja zacuvame
  51.                 best_gain=gain
  52.                 best_criteria=(col,value)
  53.                 best_sets=(set1,set2)
  54.     # gradenje na podgrankite
  55.     if best_gain>0:
  56.         # bidejki dobivkata e >0 mozna e druga podelba
  57.         trueBranch=buildtree(best_sets[0])
  58.         falseBranch=buildtree(best_sets[1])
  59.         return decisionnode(col=best_criteria[0],value=best_criteria[1], tb=trueBranch, fb=falseBranch)
  60.     else:
  61.         #ne e mozna druga podelba bidejki site instanci vo ova mnozestvo ja imaat istata klasa
  62.         #rezultato sto ke se vrati ke sodrzi recnik so kluc klasata koja se predviduva
  63.         #vo ovoj list i vrednost kolku pati bila sretnata vo trening mnozestvoto
  64.         return decisionnode(results=uniquecounts(rows))
  65. def printtree(tree,indent=''):
  66.     # Ako ova e list?
  67.     if tree.results!=None:
  68.         print str(tree.results)
  69.     else:
  70.         # se pecati uslovot (indeks na kolonata i vrednost)
  71.         print str(tree.col)+':'+str(tree.value)+'? '
  72.         # Se pecatat True grankite, pa potoa F grankite
  73.         print indent+'T->',
  74.         printtree(tree.tb,indent+' ')
  75.         print indent+'F->',
  76.         printtree(tree.fb,indent+' ')
  77.  
  78. if __name__ == "__main__":
  79.     # referrer='slashdot'
  80.     # location='US'
  81.     # readFAQ='no'
  82.     # pagesVisited=19
  83.     # serviceChosen='None'
  84.  
  85.     referrer=input()
  86.     location=input()
  87.     readFAQ=input()
  88.     pagesVisited=input()
  89.     serviceChosen=input()
  90.     testCase=[referrer, location, readFAQ, pagesVisited, serviceChosen]
  91.     trainingData.append(testCase)
  92.     t=buildtree(trainingData)
  93.     printtree(t)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement