案例-NLP实现预测天气冷暖感知度
案例:NLP预测天气冷暖感知度
1、案例需求
根据吃冰淇淋和喝水的数量,判断成都天气冷热程度。
成都春熙路街头采访记录一些游客吃了多少冰淇淋,又喝了几瓶水,他觉得成都天气怎么样(这里只考虑二分类问题,假设只有‘非常热’和‘一般热’)
其中特征向量包括两个分别是冰激凌数t1和喝水数t2,户外活动时长t3:
对应的标签类别分别是非常热A和一般热B。
2、实验数据准备
- 构造模拟数据
人员 | 冰淇淋 | 喝水 | 户外活动时长 | 冷热程度 | 判断描述 |
---|---|---|---|---|---|
小王 | 8 | 4 | 2 | A | 小王吃了8个冰淇淋,喝了4瓶水,户外2小时,该地区天气非常热 |
小张 | 7 | 1 | 1 | A | 小张吃了7个冰淇淋,喝了1瓶水,户外1小时,该地区天气非常热 |
小李 | 1 | 4 | 4 | B | 小李吃了1个冰淇淋,喝了4瓶水,户外4小时,该地区天气一般热 |
小赵 | 3 | 0 | 5 | B | 小赵吃了3个冰淇淋,喝了0瓶水,户外5小时,该地区天气一般热 |
代码构造数据集
#!/usr/bin/python # -*- coding:utf-8 -*- ''' author:gzy date:20190301 version:0.1.0 ''' import numpy as np import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties class Temperature(): #设置字字体,避免汉字乱码 = FontProperties(fname="../SourceHanSans-Normal.otf") siyuanyahei #创建数据集,返回数据集和类标签 def create_dataset(self): # 数据集 = np.array([[8,4,2],[7,1,1],[1,4,4],[3,0,5]]) datasets #类标签 = ['非常热','非常热','一般热','一般热'] labels return datasets,labels
3、数据分析与可视化
可视化展示散点图
#可视化分析数据 def analyze_data_plot(self,x,y): = plt.figure() fig # 将画布分隔为1行1列一块 = fig.add_subplot(111) ax ax.scatter(x,y) #设置散点图的标题和横纵坐标 '游客领热感知散点图',fontproperties=self.siyuanyahei) plt.title('天热吃冰激凌数目',fontproperties=self.siyuanyahei) plt.xlabel('天热喝水的数目',fontproperties=self.siyuanyahei) plt.ylabel( plt.show()
4、算法模型及原理讲解
- KNN模型原理及欧式距离计算
- 什么是KNN算法模型
- KNN工作原理
- KNN算法思想
- KNN算法流程
4.1、KNN算法模型
k-近邻(KNN,k-NearestNeighbor)算法是一种基本分类与回归方法。k-近邻假设设定一个训练数据集(先验知识),其中的实例类别已定。分类时候,对新的实例数据,根据其K个最近邻的训练实例的类别,通过多数表决等方式进行预测。
==K近邻算法属于有监督学习,实际上利用训练数据集对特征向量空间进行划分,并作为其分类的"模型"。K值的选择、距离度量、以及分类决策规则是K近邻算法的三个基本要素。==
在本案例中,仅讨论分类问题中的k-近邻算法;输入值:案例的特征向量(吃冰淇淋、喝水、活动时间),对应特征空间的点;输出值:案例的类别(非常热、一般热、舒适、一般冷、非常冷)
4.2、KNN工作原理
- 假设一个带有标签的数据集(训练样本集),包含每条数据与所属分类的对应关系
- 输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较
- 计算新数据与样本数据集 中每条数据的距离
- 对求得的所有距离进行排序(从小到大,越小表示越相似)
- 取前K(K<=20的奇数)个样本数据对应的分类标签
- 求K个数据中出现次数最多的分类标签作为新数据的分类
4.3、KNN算法思想
- 计算所有样本点 与 待分类样本之间的距离
- 计算完 样本距离进行排序
- 选取距离样本最近的k个点
- 针对这个k个点,统计各个类别分别有多少个
- k个点钟某个类别最多,就将该样本划归该点
4.4、KNN算法模型流程与实现
- 搜集数据
- 数据采集过程,分为:非机构化数据、半结构化数据、数据化数据
- 准备数据
- 格式化处理,对不同类别的数据进行统一的格式化处理
- 如:将pdf,word,excel,sql等统一转化为txt
- 分析数据
- 看数据特点,有无缺失值,数据是离散还是连续
- 训练数据
- 不适用与KNN,但在其他一些监督学习中经常会用到
- 应用算法
- 针对完善的模型进行封装重构,进行实际应用
构造KNN分类器
#构造KNN分类器
def knn_Classifier(self,newV,datasets,labels,k):
# 获取新样本的数据
# 获取样本库的数据
# 选择K值
# 计算样本数据与样本库数据之间的距离
# 根据距离进行排序
# 针对k个点,统计各个类别的数量
# 投票机制,少数服从多数原则
pass
欧式距离计算
# 欧氏距离计算
#方式一 d^2 = (x1-x2)^2 +(y1-y2)^2"
def ComputeEuclideanDistance(self,x1,x2,y1,y2):
= math.sqrt(math.pow((x1-x2),2)+math.pow((y1-y2),2))
d return d
# 方式二
def EuclideanDistance(self,instance1,instance2,length):
=0
d for x in range(length):
+= pow((instance1[x]-instance2[x]),2)
d return math.sqrt(d)
About ME
👋 读书城南,🤔 在未来面前,我们都是孩子~
- 📙 一个热衷于探索学习新方向、新事物的智能产品经理,闲暇时间喜欢coding💻、画图🎨、音乐🎵、学习ing~
👋 Social Media
🛠️ Blog: http://oceaneyes.top
⚡ PM导航: https://pmhub.oceangzy.top
☘️ CNBLOG: https://www.cnblogs.com/oceaneyes-gzy/
🌱 AI PRJ自己部署的一些算法demo: http://ai.oceangzy.top/
📫 Email: 1450136519@qq.com
💬 WeChat: OCEANGZY
💬 公众号: UncleJoker-GZY
👋 加入小组~
👋 感谢打赏~
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 OCAEN.GZY读书城南!