自然语言处理入门小白从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])
运行结果:
利用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
#利用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()
运行结果:
机器学习库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