Advertisement
lucast0rres

IA 24.08.17

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