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

  • 2020 年 5 月 21 日
  • 筆記

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