接上篇文章《自然语言处理入门小白从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


钻石狗
1 声望1 粉丝