接上篇文章《自然语言处理入门小白从0开始学自然语言处理+学习笔记(一)》

  • 自然语言处理(NLP)开发环境搭建√
  • 分词demo(搭建helloworld工程)√
  • 案例:nlp实现预测天气冷暖感知度 √
  • —案例需求和数据准备√
  • —可视化数据分析√
  • —KNN模型原理及欧式距离计算√
  • —KNN分类器模型实现
  • —利用KNN分类器采访随机游客预测天气感知度
  • —机器学习库sklearn实现预测天气冷暖感知度
  • 自然语言处理学习总结归纳

上代码
#coding=utf8
from audioop import reverse

  1. import numpy as np
  2. from numpy import *
  3. import matplotlib
  4. import matplotlib.pyplot as plt
  5. '''创建数据源、返回数据集和类标签'''
  6. def creat_dataset():
  7. datasets = array([[8,4,2],[7,1,1],[1,4,4],[3,0,5]])#数据集
  8. labels = ['非常热','非常热','一般热','一般热']#类标签
  9. return datasets,labels
  10. '''可视化数据分析'''
  11. def analyse_data_plot(x,y):
  12. plt.scatter(x,y)
  13. plt.show()
  14. '''构造KNN分类器'''
  15. def knn_Classifier(newV,datasets,labels,k):
  16. import operator
  17. #1.计算样本数据与样本库数据之间的距离
  18. SqrtDist = EuclideanDistance3(newV,datasets)
  19. #2.根据距离进行排序,按照列向量进行排序
  20. sortDistIndexs = SqrtDist.argsort(axis=0)
  21. #print(sortDistIndexs)
  22. #3.针对K个点,统计各个类别的数量
  23. classCount = {}#统计各个类别分别的数量
  24. for i in range(k):
  25. #根据距离排序索引值,找到类标签
  26. votelabel = labels[sortDistIndexs[i]]
  27. #print(sortDistIndexs[i],votelabel)
  28. #统计类标签的键值对
  29. classCount[votelabel] = classCount.get(votelabel,0)+1
  30. #print(classCount)
  31. #4.投票机制,少数服从多数原则
  32. #对各个分类字典进行排序,降序,itemgetter按照value排序
  33. sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1),reverse=1)
  34. #print(newV,'KNN投票预测结果:',sortedClassCount[0][0])
  35. return sortedClassCount
  36. '''欧氏距离计算1:d²=(x1-x2)²+(y1-y2)²'''
  37. def ComputerEuclideanDistance(x1,y1,x2,y2):
  38. d = math.sqrt(math.pow((x1-x2),2)+math.pow((y1-y2),2))
  39. return d
  40. '''欧氏距离计算2:多维度支持'''
  41. def EuclideanDistance(instance1,instance2,length):
  42. d = 0
  43. for i in range(length):
  44. d += pow((instance1[i]-instance2[i]),2)
  45. return math.sqrt(d)
  46. '''欧氏距离计算3'''
  47. def EuclideanDistance3(newV,datasets):
  48. #1.获取数据向量的行向量维度和纵向量维度值
  49. rowsize,colsize = datasets.shape
  50. #2.各特征向量之间做差值
  51. diffMat = tile(newV,(rowsize,1)) - datasets
  52. #3.对差值平方
  53. sqDiffMat = diffMat ** 2
  54. #4.差值平方和进行开方
  55. SqrtDist = sqDiffMat.sum(axis=1) ** 0.5
  56. return SqrtDist
  57. if __name__ == '__main__':
  58. #1.创建数据集和类标签
  59. datasets,labels = creat_dataset()
  60. print('数据集:\n',datasets,'\n','类标签:\n',labels)
  61. #2.数据可视化分析
  62. #analyse_data_plot(datasets[:,0],datasets[:,1])
  63. #3.1.欧式距离计算
  64. d = ComputerEuclideanDistance(2,4,8,2)
  65. print('欧氏距离计算1:',d)
  66. #3.2.欧式距离计算
  67. d2 = EuclideanDistance([2,4],[8,2],2)
  68. print('欧式距离计算2:',d2)
  69. #3.3.欧式距离计算,可支持多维
  70. d3 = EuclideanDistance3([2,4,4],datasets)
  71. print('欧式距离计算3:',d3)
  72. #KNN分类器
  73. newV = [2,4,4]
  74. #4.1.单实例构造KNN分类器
  75. res = knn_Classifier(newV,datasets,labels,3)
  76. print(newV,'单实例KNN投票预测结果是:',res)
  77. #4.2.多实例构造KNN分类器
  78. vecs = array([[2,4,4],[3,0,0],[5,7,2]])
  79. for vec in vecs:
  80. res = knn_Classifier(vec,datasets,labels,3)
  81. print(vec,'多实例KNN投票预测结果是:',res[0][0])

运行结果:
file

file
上代码:

  1. #coding=utf8
  2. from audioop import reverse
  3. import numpy as np
  4. from numpy import *
  5. import matplotlib
  6. import matplotlib.pyplot as plt
  7. '''创建数据源、返回数据集和类标签'''
  8. def creat_dataset():
  9. datasets = array([[8,4,2],[7,1,1],[1,4,4],[3,0,5]])#数据集
  10. labels = ['非常热','非常热','一般热','一般热']#类标签
  11. return datasets,labels
  12. '''可视化数据分析'''
  13. def analyse_data_plot(x,y):
  14. plt.scatter(x,y)
  15. plt.show()
  16. '''构造KNN分类器'''
  17. def knn_Classifier(newV,datasets,labels,k):
  18. import operator
  19. #1.计算样本数据与样本库数据之间的距离
  20. SqrtDist = EuclideanDistance3(newV,datasets)
  21. #2.根据距离进行排序,按照列向量进行排序
  22. sortDistIndexs = SqrtDist.argsort(axis=0)
  23. #print(sortDistIndexs)
  24. #3.针对K个点,统计各个类别的数量
  25. classCount = {}#统计各个类别分别的数量
  26. for i in range(k):
  27. #根据距离排序索引值,找到类标签
  28. votelabel = labels[sortDistIndexs[i]]
  29. #print(sortDistIndexs[i],votelabel)
  30. #统计类标签的键值对
  31. classCount[votelabel] = classCount.get(votelabel,0)+1
  32. #print(classCount)
  33. #4.投票机制,少数服从多数原则
  34. #对各个分类字典进行排序,降序,itemgetter按照value排序
  35. sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1),reverse=1)
  36. #print(newV,'KNN投票预测结果:',sortedClassCount[0][0])
  37. return sortedClassCount
  38. '''欧氏距离计算1:d²=(x1-x2)²+(y1-y2)²'''
  39. def ComputerEuclideanDistance(x1,y1,x2,y2):
  40. d = math.sqrt(math.pow((x1-x2),2)+math.pow((y1-y2),2))
  41. return d
  42. '''欧氏距离计算2:多维度支持'''
  43. def EuclideanDistance(instance1,instance2,length):
  44. d = 0
  45. for i in range(length):
  46. d += pow((instance1[i]-instance2[i]),2)
  47. return math.sqrt(d)
  48. '''欧氏距离计算3'''
  49. def EuclideanDistance3(newV,datasets):
  50. #1.获取数据向量的行向量维度和纵向量维度值
  51. rowsize,colsize = datasets.shape
  52. #2.各特征向量之间做差值
  53. diffMat = tile(newV,(rowsize,1)) - datasets
  54. #3.对差值平方
  55. sqDiffMat = diffMat ** 2
  56. #4.差值平方和进行开方
  57. SqrtDist = sqDiffMat.sum(axis=1) ** 0.5
  58. return SqrtDist
  59. #利用KNN分类器预测随机访客天气感知度
  60. def Predict_temperature():
  61. #1.创建数据集和类标签
  62. datasets,labels = creat_dataset()
  63. #2.采访新游客
  64. iceCream = float(input('Q:请问你今天吃了几个冰激凌?\n'))
  65. drinkWater = float(input('Q:请问你今天喝了几杯水?\n'))
  66. playAct = float(input('Q:请问你今天户外活动了几个小时?\n'))
  67. newV = array([iceCream,drinkWater,playAct])
  68. res = knn_Classifier(newV,datasets,labels,3)
  69. print('该访客认为北京的天气是:',res[0][0])
  70. if __name__ == '__main__':
  71. #1.创建数据集和类标签
  72. datasets,labels = creat_dataset()
  73. #KNN分类器预测随机访客天气感知度
  74. Predict_temperature()

运行结果:
file
file

上代码:

  1. # coding = utf8
  2. from sklearn import neighbors
  3. from numpy import *
  4. import nlp001.knn as KNN
  5. def knn_sklearn_predict(newV,datasets,labels):
  6. #调用机器学习库knn分类器算法
  7. knn = neighbors.KNeighborsClassifier()
  8. #传入参数、特征数据、分类标签
  9. knn.fit(datasets,labels)
  10. #knn预测
  11. predictRes = knn.predict([newV])
  12. print('该访客认为北京天气是:\t',predictRes,'非常热' if predictRes[0] == 0 else '一般热')
  13. #利用KNN分类器预测随机访客天气感知度
  14. def Predict_temperature():
  15. #1.创建数据集和类标签
  16. datasets,labels = KNN.creat_datasets()
  17. #2.采访新游客
  18. iceCream = float(input('Q:请问你今天吃了几个冰激凌?\n'))
  19. drinkWater = float(input('Q:请问你今天喝了几杯水?\n'))
  20. playAct = float(input('Q:请问你今天户外活动了几个小时?\n'))
  21. newV = array([iceCream,drinkWater,playAct])
  22. knn_sklearn_predict(newV,datasets,labels)
  23. if __name__ == '__main__':
  24. Predict_temperature()

knn.py中新增函数(该示例中包含调用knn.py中的模块)

  1. '''创建数据源、返回数据集和类标签'''
  2. def creat_datasets():
  3. datasets = array([[8,4,2],[7,1,1],[1,4,4],[3,0,5],[9,4,2],[7,0,1],[1,5,4],[4,0,5]])#数据集
  4. labels = [0,0,1,1,0,0,1,1]#类标签:0代表非常热,1代表一般热
  5. return datasets,labels

file

版权声明:本文为dreamzhiya原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/dreamzhiya/p/12930939.html