Advertisement
lucast0rres

IA 29.08.17

Aug 29th, 2017
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.08 KB | None | 0 0
  1. #https://notepad.pw/uni7-ia-manha-knn-exercicio
  2.  
  3. from random import random, randint
  4. import math
  5.  
  6. def wineprice(rating, age):
  7.     peak_age = rating-50
  8.     price = rating/2
  9.     if (age > peak_age):
  10.         price = price*(5-(age-peak_age))
  11.     else:
  12.         price = price*(5*((age+1)/peak_age))
  13.     if price < 0:
  14.         price = 0
  15.     return price
  16.    
  17. def winedataset(size):
  18.     raws = []
  19.     for i in range(size):
  20.         rating = random()*50+50
  21.         age = random()*50
  22.         price = wineprice(rating, age)
  23.         price *= (random()*0.4+0.8)
  24.         raws.append({'input':(rating,age),
  25.                     'result':price})
  26.     return raws
  27.  
  28. def euclidean(v1,v2):
  29.     d = 0.0
  30.     for i in range(len(v1)):
  31.         d += (v1[i]-v2[i])**2
  32.     return math.sqrt(d)
  33.    
  34. def getdistances(data, vec1):
  35.     distancelist = []
  36.     for i in range(len(data)):
  37.         vec2 = data[i]['input']
  38.         distancelist.append((euclidean(vec1, vec2),i))
  39.     distancelist.sort()
  40.     return distancelist
  41.  
  42. def knnestimate(data, vec1):
  43.     # Get sorted distances
  44.     dlist = getdistances(data,vec1)
  45.     avg = 0.0
  46.     avglist = []
  47.     # Take the average of the top k results
  48.     for k in range(1,16):
  49.       for i in range(k):
  50.         idx = dlist[i][1]
  51.         avg += data[idx]['result']
  52.       avg = avg / k
  53.       avglist.append(avg)
  54.     for j in avglist:
  55.       if j == min(avglist):
  56.         return avglist.index(j)+1
  57.  
  58. #Dataset de Treinamento
  59. data_test = winedataset(70)
  60. #Dataset de Teste
  61. data_real = winedataset(30)
  62. print(knnestimate(data_test,(95.0,3.0)))
  63.  
  64. print("### BANCO DE TESTE ###")
  65. for i in data_test:
  66.     print("Preco\t|\tClassificacao\t| Idade\t| Valor K")
  67.     print('{:.2f}\t|\t{:.2f}\t        | {:.2f}\t {}'.format(i['result'],i['input'][0],i['input'][1], knnestimate(data_test,(i['input'][0], i['input'][1]))))
  68.  
  69. print("\n### BANCO REAL ###")
  70. for i in data_real:
  71.     print("Preco\t|\tClassificacao\t| Idade")
  72.     print('{:.2f}\t|\t{:.2f}\t        | {:.2f}'.format(i['result'],i['input'][0],i['input'][1]))
  73.  
  74. #dist = euclidean(data[0]['input'], data[1]['input'])
  75. #print(dist)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement