自然语言处理入门小白从0开始学自然语言处理+学习笔记(二)

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

1、自然语言处理学习路径规划

  • 自然语言处理(NLP)开发环境搭建√

  • 分词demo(搭建helloworld工程)√

  • 案例:nlp实现预测天气冷暖感知度 √

  • ---案例需求和数据准备√

  • ---可视化数据分析√

  • ---KNN模型原理及欧式距离计算√

  • ---KNN分类器模型实现

  • ---利用KNN分类器采访随机游客预测天气感知度

  • ---机器学习库sklearn实现预测天气冷暖感知度

  • 自然语言处理学习总结归纳

    2、案例:nlp实现预测天气冷暖感知度

    KNN分类器模型实现

    上代码

      #coding=utf8
      from audioop import reverse
    
      import numpy as np
      from numpy import *
      import matplotlib
      import matplotlib.pyplot as plt
      '''创建数据源、返回数据集和类标签'''
      def creat_dataset():
              datasets = array([[8,4,2],[7,1,1],[1,4,4],[3,0,5]])#数据集
              labels = ['非常热','非常热','一般热','一般热']#类标签
          return datasets,labels
    
      '''可视化数据分析'''
      def analyse_data_plot(x,y):
              plt.scatter(x,y)
              plt.show()
    
      '''构造KNN分类器'''
      def knn_Classifier(newV,datasets,labels,k):
              import operator
              #1.计算样本数据与样本库数据之间的距离
              SqrtDist = EuclideanDistance3(newV,datasets)
              #2.根据距离进行排序,按照列向量进行排序
              sortDistIndexs = SqrtDist.argsort(axis=0)
              #print(sortDistIndexs)
              #3.针对K个点,统计各个类别的数量
              classCount = {}#统计各个类别分别的数量
              for i in range(k):
                      #根据距离排序索引值,找到类标签
                      votelabel = labels[sortDistIndexs[i]]
                      #print(sortDistIndexs[i],votelabel)
                      #统计类标签的键值对
                      classCount[votelabel] = classCount.get(votelabel,0)+1
              #print(classCount)
              #4.投票机制,少数服从多数原则
              #对各个分类字典进行排序,降序,itemgetter按照value排序
              sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1),reverse=1)
              #print(newV,'KNN投票预测结果:',sortedClassCount[0][0])
              return sortedClassCount
    
      '''欧氏距离计算1:d²=(x1-x2)²+(y1-y2)²'''
          def ComputerEuclideanDistance(x1,y1,x2,y2):
              d = math.sqrt(math.pow((x1-x2),2)+math.pow((y1-y2),2))
          return d
    
      '''欧氏距离计算2:多维度支持'''
      def EuclideanDistance(instance1,instance2,length):
              d = 0
              for i in range(length):
                  d += pow((instance1[i]-instance2[i]),2)
                  return math.sqrt(d)
      '''欧氏距离计算3'''
      def EuclideanDistance3(newV,datasets):
              #1.获取数据向量的行向量维度和纵向量维度值
              rowsize,colsize = datasets.shape
              #2.各特征向量之间做差值
              diffMat = tile(newV,(rowsize,1)) - datasets
              #3.对差值平方
              sqDiffMat = diffMat ** 2
              #4.差值平方和进行开方
              SqrtDist = sqDiffMat.sum(axis=1) ** 0.5
              return SqrtDist
    
      if __name__ == '__main__':
    
              #1.创建数据集和类标签
              datasets,labels = creat_dataset()
              print('数据集:\n',datasets,'\n','类标签:\n',labels)
    
              #2.数据可视化分析
              #analyse_data_plot(datasets[:,0],datasets[:,1])
    
              #3.1.欧式距离计算
              d = ComputerEuclideanDistance(2,4,8,2)
              print('欧氏距离计算1:',d)
    
              #3.2.欧式距离计算
              d2 = EuclideanDistance([2,4],[8,2],2)
              print('欧式距离计算2:',d2)
    
              #3.3.欧式距离计算,可支持多维
              d3 = EuclideanDistance3([2,4,4],datasets)
              print('欧式距离计算3:',d3)
    
              #KNN分类器
              newV = [2,4,4]
    
              #4.1.单实例构造KNN分类器
              res = knn_Classifier(newV,datasets,labels,3)
              print(newV,'单实例KNN投票预测结果是:',res)
    
              #4.2.多实例构造KNN分类器
              vecs = array([[2,4,4],[3,0,0],[5,7,2]])
              for vec in vecs:
                      res = knn_Classifier(vec,datasets,labels,3)
                      print(vec,'多实例KNN投票预测结果是:',res[0][0])

    运行结果: file

    利用KNN分类器采访随机游客预测天气感知度

    file 上代码:

          #coding=utf8
          from audioop import reverse
    
          import numpy as np
          from numpy import *
          import matplotlib
          import matplotlib.pyplot as plt
          '''创建数据源、返回数据集和类标签'''
          def creat_dataset():
                  datasets = array([[8,4,2],[7,1,1],[1,4,4],[3,0,5]])#数据集
                  labels = ['非常热','非常热','一般热','一般热']#类标签
                  return datasets,labels
    
          '''可视化数据分析'''
          def analyse_data_plot(x,y):
                  plt.scatter(x,y)
                  plt.show()
    
          '''构造KNN分类器'''
          def knn_Classifier(newV,datasets,labels,k):
                  import operator
                  #1.计算样本数据与样本库数据之间的距离
                  SqrtDist = EuclideanDistance3(newV,datasets)
                  #2.根据距离进行排序,按照列向量进行排序
                  sortDistIndexs = SqrtDist.argsort(axis=0)
                  #print(sortDistIndexs)
                  #3.针对K个点,统计各个类别的数量
                  classCount = {}#统计各个类别分别的数量
                  for i in range(k):
                          #根据距离排序索引值,找到类标签
                          votelabel = labels[sortDistIndexs[i]]
                          #print(sortDistIndexs[i],votelabel)
                          #统计类标签的键值对
                          classCount[votelabel] = classCount.get(votelabel,0)+1
                  #print(classCount)
                  #4.投票机制,少数服从多数原则
                  #对各个分类字典进行排序,降序,itemgetter按照value排序
                  sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1),reverse=1)
                  #print(newV,'KNN投票预测结果:',sortedClassCount[0][0])
                  return sortedClassCount
    
          '''欧氏距离计算1:d²=(x1-x2)²+(y1-y2)²'''
          def ComputerEuclideanDistance(x1,y1,x2,y2):
                  d = math.sqrt(math.pow((x1-x2),2)+math.pow((y1-y2),2))
                  return d
    
          '''欧氏距离计算2:多维度支持'''
          def EuclideanDistance(instance1,instance2,length):
                  d = 0
                  for i in range(length):
                          d += pow((instance1[i]-instance2[i]),2)
                  return math.sqrt(d)
          '''欧氏距离计算3'''
          def EuclideanDistance3(newV,datasets):
                  #1.获取数据向量的行向量维度和纵向量维度值
                  rowsize,colsize = datasets.shape
                  #2.各特征向量之间做差值
                  diffMat = tile(newV,(rowsize,1)) - datasets
                  #3.对差值平方
                  sqDiffMat = diffMat ** 2
                  #4.差值平方和进行开方
                  SqrtDist = sqDiffMat.sum(axis=1) ** 0.5
                  return SqrtDist
    
          #利用KNN分类器预测随机访客天气感知度
          def Predict_temperature():
                  #1.创建数据集和类标签
                  datasets,labels = creat_dataset()
                  #2.采访新游客
                  iceCream = float(input('Q:请问你今天吃了几个冰激凌?\n'))
                  drinkWater = float(input('Q:请问你今天喝了几杯水?\n'))
                  playAct = float(input('Q:请问你今天户外活动了几个小时?\n'))
                  newV = array([iceCream,drinkWater,playAct])
                  res = knn_Classifier(newV,datasets,labels,3)
                  print('该访客认为北京的天气是:',res[0][0])
    
          if __name__ == '__main__':
    
                  #1.创建数据集和类标签
                  datasets,labels = creat_dataset()
                  #KNN分类器预测随机访客天气感知度
                  Predict_temperature()

    运行结果: file file

    机器学习库sklearn实现预测天气冷暖感知度

    上代码:

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

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

    '''创建数据源、返回数据集和类标签'''
    def creat_datasets():
      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]])#数据集
      labels = [0,0,1,1,0,0,1,1]#类标签:0代表非常热,1代表一般热
      return datasets,labels

    3、自然语言处理学习总结归纳

    file

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值