python3 sklearn之 knn学习

小鱼儿 2022-01-14 14:31 281阅读 0赞

1,我们给定电影的数据表示如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMDA4MzI1_size_16_color_FFFFFF_t_70

2,问题的数据化:

knn是根据距离的长短进行分类的,通过分类之后我们可以对以后的数据进行判定是属于那种类型,现在我们通过一个实例电影的武打场景次数和接吻场景次数来判定电影是武打片还是爱情片,我们来给定一系列的数据如下所示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMDA4MzI1_size_16_color_FFFFFF_t_70 1

3,算法依赖于求解的路径公式:

20190613214900852.jpg

4,通过公式分类可以看到如下图结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMDA4MzI1_size_16_color_FFFFFF_t_70 2

数据如果多的时候分类效果好的话如下图所示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMDA4MzI1_size_16_color_FFFFFF_t_70 3

5,看完上面我们已经已经大致明白了knn的算法实现,现在我们用代码来实现看看,并且给定数据测试一下:

  1. import numpy as np
  2. import operator
  3. def createDataset():
  4. #7组二维特征
  5. group = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2],[18,90]])
  6. #7组对应标签
  7. labels = ('爱情片','爱情片','爱情片','动作片','动作片','动作片','爱情片')
  8. return group,labels
  9. def classify(intX,dataSet,labels,k):
  10. '''
  11. KNN算法
  12. '''
  13. #numpy中shape[0]返回数组的行数,shape[1]返回列数
  14. dataSetSize = dataSet.shape[0]
  15. #将intX在横向重复dataSetSize次,纵向重复1次
  16. #例如intX=([1,2])--->([[1,2],[1,2],[1,2],[1,2]])便于后面计算
  17. diffMat = np.tile(intX,(dataSetSize,1))-dataSet
  18. #二维特征相减后乘方
  19. sqdifMax = diffMat**2
  20. #计算距离
  21. seqDistances = sqdifMax.sum(axis=1)
  22. distances = seqDistances**0.5
  23. print ("distances:",distances)
  24. #返回distance中元素从小到大排序后的索引
  25. sortDistance = distances.argsort()
  26. print ("sortDistance:",sortDistance)
  27. classCount = {}
  28. for i in range(k):
  29. #取出前k个元素的类别
  30. voteLabel = labels[sortDistance[i]]
  31. #print ("第%d个voteLabel=%s",i,voteLabel)
  32. classCount[voteLabel] = classCount.get(voteLabel,0)+1
  33. #dict.get(key,default=None),字典的get()方法,返回指定键的值,如果值不在字典中返回默认值。
  34. #计算类别次数
  35. #key=operator.itemgetter(1)根据字典的值进行排序
  36. #key=operator.itemgetter(0)根据字典的键进行排序
  37. #reverse降序排序字典
  38. sortedClassCount = sorted(classCount.items(),key = operator.itemgetter(1),reverse = True)
  39. #结果sortedClassCount = [('动作片', 2), ('爱情片', 1)]
  40. print ("sortedClassCount:",sortedClassCount)
  41. return sortedClassCount[0][0]
  42. if __name__ == '__main__':
  43. group,labels = createDataset()
  44. test = [20,101]
  45. test1 = [108,19]
  46. test_class = classify(test,group,labels,3)
  47. print (test_class)
  48. test_class1 = classify(test1,group,labels,2)
  49. print (test_class1)

运行结果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMDA4MzI1_size_16_color_FFFFFF_t_70 4

发表评论

表情:
评论列表 (有 0 条评论,281人围观)

还没有评论,来说两句吧...

相关阅读

    相关 机器学习方法KNN

    K最近邻(k-Nearest Neighbor,KNN)分类算法,思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属

    相关 python3 sklearn决策树

    1,问题描述: 小王的目的是通过下周天气预报寻找什么时候人们会运动,以适时调整雇员数量。因此首先他必须了解人们决定是否运动的原因。 在2周时间内我们得到以下记录: 天气状