Ex_treme's blog.

案例:NLP技术实现预测天气冷暖感知度(KNN分类器模型实现2)

2018/11/14 Share

构造KNN分类器

  • 获取新的样本数据
  • 获取样本库的数
  • 选择K值
  • 计算样本数据与样本库之间的距离
  • 根据距离进行排序
  • 针对K个点,统计各个类别的数量
  • 投票机制,少数服从多数原则

初始化

  • 获取新的样本数据
  • 获取样本库的数
  • 选择K值
1
2
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个点,统计各个类别的数量
  • 投票机制,少数服从多数原则
1
2
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]

构造单个分类器

1
2
3
4
5
6
7
ice = 5
water = 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小时,因为他觉得今天非常热。

批量分类预测

1
2
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小时,因为他觉得今天一般热。

CATALOG
  1. 1. 构造KNN分类器
    1. 1.1. 初始化
    2. 1.2. 计算
    3. 1.3. 构造单个分类器
    4. 1.4. 批量分类预测