Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from random import random, randint
- import math
- def wineprice(rating, age):
- peak_age = rating-50
- price = rating/2
- if (age > peak_age):
- price = price*(5-(age-peak_age))
- else:
- price = price*(5*((age+1)/peak_age))
- if price < 0:
- price = 0
- return price
- def winedataset():
- raws = []
- for i in range(10):
- rating = random()*50+50
- age = random()*50
- price = wineprice(rating, age)
- price *= (random()*0.4+0.8)
- raws.append({'input':(rating,age),
- 'result':price})
- return raws
- def euclidean(v1,v2):
- d = 0.0
- for i in range(len(v1)):
- d += (v1[i]-v2[i])**2
- return math.sqrt(d)
- def getdistances(data, vec1):
- distancelist = []
- for i in range(len(data)):
- vec2 = data[i]['input']
- distancelist.append((euclidean(vec1, vec2),i))
- distancelist.sort()
- return distancelist
- def knnestimate(data, vec1, k = 5):
- # Get sorted distances
- dlist = getdistances(data,vec1)
- avg = 0.0
- # Take the average of the top k results
- for i in range(k):
- idx = dlist[i][1]
- avg += data[idx]['result']
- avg = avg / k
- return avg
- #print(wineprice(95,3))
- data = winedataset()
- #print(knnestimate(data,(95.0,3.0)))
- for i in data:
- print("Preco\t|\tClassificacao\t| Idade")
- print('{:.2f}\t|\t{:.2f}\t | {:.2f}'.format(i['result'],i['input'][0],i['input'][1]))
- print(i['input'][0])
- #dist = euclidean(data[0]['input'], data[1]['input'])
- #print(dist)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement