构造KNN分类器
- 获取新的样本数据
- 获取样本库的数
- 选择K值
- 计算样本数据与样本库之间的距离
- 根据距离进行排序
- 针对K个点,统计各个类别的数量
- 投票机制,少数服从多数原则
 初始化
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | class knn_Classifier(object):"""构造KNN分类器"""
 
 def __init__(self, newV, dataset, labels):
 self.newV = newV  # 1 获取新的样本数据
 self.dataset = dataset  # 2 获取样本库的数
 self.labels = labels  # 2 获取样本库的标签
 def classify(self, k):# 选择K值
 pass
 
 | 
 计算
- 计算样本数据与样本库之间的距离
- 根据距离进行排序
- 针对K个点,统计各个类别的数量
- 投票机制,少数服从多数原则
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | def classify(self, k):# 选择K值SqrtDist = EuclideanDistance3(self.newV, self.dataset)  # 4 计算样本数据与样本库之间的距离
 sortedDistIndexs = SqrtDist.argsort(axis=0)  # 5 根据距离进行排序
 
 classCount = {}  # 6 针对K个点,统计各个类别的数量
 for i in range(k):
 votelabel = self.labels[sortedDistIndexs[i]]
 classCount[votelabel] = classCount.get(votelabel, 0) + 1
 
 sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)  # 7 投票机制,少数服从多数原则
 return sortedClassCount[0][0]
 
 | 
 构造单个分类器
| 12
 3
 4
 5
 6
 7
 
 | ice = 5water = 10
 time = 1
 newV = [ice, water, time]
 k = knn_Classifier(newV, dataset, labels)
 res = k.classify(len(dataset))
 print("某人吃了{}个冰淇淋,喝了{}升水,在户外活动了{}小时,因为他觉得今天{}。".format(newV[0],newV[1],newV[2],res))
 
 | 
数据集:[[8 4 2][7 1 1] [1 4 4] [3 0 5]
标签:[‘非常热’, ‘非常热’, ‘一般热’, ‘一般热’]
某人吃了5个冰淇淋,喝了10升水,在户外活动了1小时,因为他觉得今天非常热。
 批量分类预测
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | vecs = array([[2, 1, 1], [2, 1, 5], [5, 1, 23], [5, 4, 1], [2, 3, 2]])for vec in vecs:
 ice = vec[0]
 water = vec[1]
 time = vec[2]
 newV = [ice, water, time]
 k = knn_Classifier(newV, dataset, labels)
 res = k.classify(len(dataset))
 print("某人吃了{}个冰淇淋,喝了{}升水,在户外活动了{}小时,因为他觉得今天{}。".format(newV[0], newV[1], newV[2], res))
 
 | 
某人吃了2个冰淇淋,喝了1升水,在户外活动了1小时,因为他觉得今天一般热
某人吃了2个冰淇淋,喝了1升水,在户外活动了5小时,因为他觉得今天一般热。
某人吃了5个冰淇淋,喝了1升水,在户外活动了23小时,因为他觉得今天一般热。
某人吃了5个冰淇淋,喝了4升水,在户外活动了1小时,因为他觉得今天非常热。
某人吃了2个冰淇淋,喝了3升水,在户外活动了2小时,因为他觉得今天一般热。