自然語言處理入門小白從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