汉堡店销售量预测
某汉堡店每天都会做新鲜的汉堡,每天卖出的汉堡个数与天气等因素有关。请根据如下几个特征,用KNN算法预测当天售卖汉堡的个数。
(1)天气指数1~5:1表示天气很差,5表示天气很好。
(2)是否是周末:周末为1,否则为0。
(3)是否有打折活动:1表示有打折,0表示没有打折。

售出汉堡的历史数据表

K最近邻算法_历史数据

示例:
输入:(依次输入K值、历史数据hamburger、目标值dest)
3
{(4,1,0):100, (3,0,1):75, (1,1,0):40, (4,0,1):95, (5,1,0):150, (2,0,1):60}
(4,1,1)
输出:
115
解释:
最接近的元素个数为3。历史数据用字典表示,其中键为元组,依次表示当天的天气指数、是否是周末、是否有打折活动;值为当天售卖汉堡的个数。目标值为元组,依次表示当天的天气指数、是否是周末、是否有打折活动。

import math
def KDistance(K,dest,source):
    destLen = len(dest)
    sourceLen=len(source)
    distance = []
    final=source
    for i in range(sourceLen):
        Sum = 0
        for j in range(destLen):
            Sum += (dest[j]-source[i][j])*(dest[j]-source[i][j])
        distance.append(math.sqrt(Sum))
    for n in range(sourceLen-K):
        index = distance.index(max(distance))
        distance.remove(distance[index])
        final.remove(final[index])
    return final

def predHamburger(K,hamburger,dest):
    source = []
    for key in hamburger.keys():
        source.append(key)
    result=KDistance(K,dest,source)
    avg=0
    for i in range(len(result)):
        avg+=hamburger[result[i]]
    return avg // K

K = eval(input())
hamburger=eval(input())
dest=eval(input())
print(predHamburger(K,hamburger,dest))