大数据模型预测实践(knn算法+词嵌入)

article/2025/8/25 18:16:58

大数据模型预测实践(knn算法+词嵌入)

  • 前言
  • 词嵌入(Word Embedding)
  • KNN算法
    • 什么是KNN算法
    • 实现代码

前言

此次项目为根据北京大数据网站给出的用户信息和相应用户所游玩的景点,预测后续游客将要游玩的景点
由于数据集中许多标签为文字标签,故整体的技术方案为词嵌入+knn算法进行预测
预测效果为62%

词嵌入(Word Embedding)

词嵌入(Word Embedding)是一种将文本中的词转换成数字向量的方法,为了使用标准机器学习算法来对它们进行分析,就需要把这些被转换成数字的向量以数字形式作为输入。词嵌入过程就是把一个维数为所有词数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量,词嵌入的结果就生成了词向量。

目前主要的词嵌入技术有one-hot编码、Word2Vec(Word to Vector)、GloVe等等

此次选择one hot编码进行词嵌入,One-hot编码(被称为独热码或独热编码)的词向量。One-hot编码是最基本的向量方法。One-hot编码通过词汇大小的向量表示文本中的词,其中只有对应于该词的项是1而所有其他的项都是零。

具体实现代码若能理解one hot具体原理,便可轻易实现,且由于比较零碎,以上传至github->https://github.com/Junzhou-Chen/Big-data-model-prediction
便不一一讲述了

变化效果如下:
嵌入前
嵌入前
嵌入后
嵌入后

KNN算法

什么是KNN算法

邻近算法,或者说K最邻近(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。近邻算法就是将数据集合中每一个记录进行分类的方法。

KNN算法的核心思想是,如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。KNN方法在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

这里尤其推荐一下B站智源学院的课程:https://www.bilibili.com/video/BV1Nt411i7oD/?vd_source=7d1fabaa92959349756cbdc9e0be3e0e

听完之后绝对对KNN算法完全理解了

实现代码

此次代码基于python实现

import csv
import randomwith open('C:/Users/13747/Desktop/大数据比赛/predict.csv', 'r') as file:reader = csv.DictReader(file)predict = [row for row in reader]
# 读取训练数据
with open('C:/Users/13747/Desktop/大数据比赛/version.csv', 'r') as file:reader = csv.DictReader(file)datas = [row for row in reader]random.shuffle(datas)
n = 100test_set = datas[0:n]
train_set = datas[n:]k = 10def distance(d1, d2):res = 0for key in ('gender', '80', '70', '60', '90', '50', '40', '0', '20', '21~40', '41~60', '61~80', '1~20','80~100', '5G','4G', 'known', '3G', '2G', 'behavior1', 'behavior2', 'behavior31', 'behavior32', 'behavior33', 'empty','A1', 'A2','A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18','A19','A20', 'A21', 'A22', 'A23', 'A24', 'A25', 'A26', 'A27', 'A28', 'A29', 'A30', 'A31', 'A32', 'A33', 'A34','A35','A36', 'I1', 'I2', 'I3', 'I4', 'I5', 'I6', 'I7', 'I8', 'I9', 'I10', 'I11', 'I12', 'I13', 'I14', 'I15','I16', 'I17','I18', 'I19', 'I20', 'I21', 'I22', 'I23', 'I24', 'I25', 'I26', 'I27', 'I28', 'I29', 'I30', 'I31', 'I32'):res += (float(d1[key]) - float(d2[key])) ** 2return res ** 0.5def knn(data):res = [{"result": train['label'], 'distance': distance(data, train)}for train in train_set]res = sorted(res, key=lambda item: item['distance'])res2 = res[0:k]print(res2)result = {'1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0}sum = 0for r in res2:sum += r['distance']for r in res2:if (sum):result[r['result']] += 1 - r['distance'] / sumelse:result[r['result']] += 1 - r['distance']return max(result, key=result.get)dicted = {'1': '景区类别1', '2': '景区类别2', '3': '景区类别3', '4': '景区类别4', '5': '景区类别5', '6': '景区类别6', '7': '景区类别7'}
a = len(predict)
print(a)
for i in range(a):name_of = dicted[knn(predict[i])]predict[i]['label'] = name_ofheader = ['label','gender', '80', '70', '60', '90', '50', '40', '0', '20', '21~40', '41~60', '61~80', '1~20','80~100', '5G','4G', 'known', '3G', '2G', 'behavior1', 'behavior2', 'behavior31', 'behavior32', 'behavior33', 'empty','A1', 'A2','A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'A11', 'A12', 'A13', 'A14', 'A15', 'A16', 'A17', 'A18','A19','A20', 'A21', 'A22', 'A23', 'A24', 'A25', 'A26', 'A27', 'A28', 'A29', 'A30', 'A31', 'A32', 'A33', 'A34','A35','A36', 'I1', 'I2', 'I3', 'I4', 'I5', 'I6', 'I7', 'I8', 'I9', 'I10', 'I11', 'I12', 'I13', 'I14', 'I15','I16', 'I17','I18', 'I19', 'I20', 'I21', 'I22', 'I23', 'I24', 'I25', 'I26', 'I27', 'I28', 'I29', 'I30', 'I31', 'I32']  # 数据列名
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 10 22:06:43 2018
@author: User
"""# print(predict[:,'A5'])# test.csv表示如果在当前目录下没有此文件的话,则创建一个csv文件
# a表示以“追加”的形式写入,如果是“w”的话,表示在写入之前会清空原文件中的数据
# newline是数据之间不加空行
# encoding='utf-8'表示编码格式为utf-8,如果不希望在excel中打开csv文件出现中文乱码的话,将其去掉不写也行。with open('C:/Users/13747/Desktop/大数据比赛/test.csv', 'a', newline='', encoding='utf-8') as f:writer = csv.DictWriter(f, fieldnames=header)  # 提前预览列名,当下面代码写入数据时,会将其一一对应。writer.writeheader()  # 写入列名writer.writerows(predict)  # 写入数据

http://chatgpt.dhexx.cn/article/COgX4lgx.shtml

相关文章

大数据预测:未来最吸金的领域

到了2020年,世界上每个人每秒将创造7 MB的数据。在过去的几年里,我们已经创造了比人类历史上更多的数据。大数据席卷全球,并且没有放缓的迹象。人们可能会想,“大数据产业从哪里开始?”以下有10个大数据预测可以回答这个有趣的问…

大数据预测未来趋势

数据是近年来备受关注的一门技术,大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。 换而言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工…

【“工业大数据预测”系列】——第1篇:谈谈工业大数据

前言 笔者在本科毕业设计之时初次接触到了工业大数据,深感其应用前景广阔,同时将来研究生的方向也是大数据预测建模,因此针对毕设以及自己的前期学习先做个阶段性总结,通过这个系列介绍自己的一些认识与心得体会。 由于本人在本科…

大数据的关键思考系列29:数据预测

作者 | 橙子 审核 | gongyouliu 编辑 | gongyouliu 在上次内容中,我们讲到了“大数据与时尚业”,今天我们讨论一下“数据预测”。 从大量数据的收集到找出有用的规律,要预测结果需经得起时间考验,非常不容易。如果不能将预测付诸行…

mysql 的时间函数

例子 5天以后 —————————————————————————————————————————— 一年以后 —————————————————————————————————————————————— 3秒以后 ——————————————————————…

MySQL日期计算函数

计算两个日期的相隔月份 第一种方法 格式: PERIOD_DIFF(p1,p2),返回周期P1和P2之间的月数。 P1和P2的格式应为YYMM或YYYYMM。 请注意,期间参数P1和P2不是日期值。 SELECT PERIOD_DIFF(201710, 201703);如果把小月份放到前面,那么结果会为负数 第二种…

mysql数据库季度函数_数据库之MySQL函数(二)

一、日期和时间函数 1、获取当前日期的函数 都一样,用法不同 CURDATE() :用于获取系统当前日期 CURRENT_DATE() 用于系统获取当前日期 mysql> select CURDATE(),CURRENT_DATE(); 2、获取当前时间的函数 CURTIME() :用于获取系统当前时间 mysql> select CURTIME(); 3、…

mysql 减函数_mysql时间加减函数

先来看一个例子: select now(),now()0; 可以看到now()函数可以返回一个时间也可以返回一个数字,就看大家如何使用。如果相对当前时间进行增加或减少,并不能直接加上或减去一个数字而是需要特定的函数。如 date_add()或date_sub(),前者表示增加…

MySQL日期时间函数

MySQL主要的日期函数有以下几种 那我们直接用代码操作一下 首先是 curdate 返回当前的年月日 我们编写代码如下 SELECT curdate();运行结果如下 然后是 curtime 获取当前的时分秒 我们编写代码如下 SELECT curtime();运行结果如下 然后就是他们的集合体 now 放回当前时间…

MySQL日期时间转换函数

比较常用日期函数有: date_format();time_format();str_to_date();to_days();from_days();time_to_sec();sec_to_time(); 日期/时间转换为字符串函数 date_format(date,format) …

MySQL中的时间函数

目录 1. 获取系统当前时间1.1. 获取 YYYY-MM-DD HH:mm:ss1.2. 获取 YYYY-MM-DD1.3. 获取 HH:mm:ss 2. 时间加减间隔函数2.1. DATETIME 类型的加减2.2. DATE 类型的加减 3. 两个时间的相减3.1. DATE 类型相减3.2. TIMESTAMP 类型 1. 获取系统当前时间 MySQL 版本为 5.7&#xf…

MySQL 时间函数加减计算

一、获取当前时间 1.获取当前日期 2.获取当前时间 3.获取日期时间 4.获取UTC时间 utc_date() 获取UTC日期utc_time() 获取UTC时间utc_timestamp() 获取UTC日期加时间 二、日期时间计算 1.为当前时间加上一段时间 函数:date_add() select date_add(now(),inter…

MySQL 时间函数

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80393761 本文出自【赵彦军的博客】 获取当前时间 返回当前日期 :select curdate() ; 2018-05-21 返回当前时间 :select curtime() ; 16:24:03 返回当前日期和时间…

mysql时间相关函数

mysql数据库 1、获取当前时间 select now() -- 获取当前具体的日期和时间 2022-05-07 16:07:39 select curdate() -- 获取当前日期 2022-05-07 select curtime() -- 获取当前时间 16:08:44 select current_timestamp() -- 获取当前具体的日期和时间2022-05…

MySQL常用的日期时间函数

目录 1.日期(date)函数 2.时间(time)函数 3.日期和时间函数 4.日期和时间比较 5.日期和时间运算 6.日期和时间的格式化 1.日期(date)函数 返回当前日期:CURDATE(), CURRENT_DATE(), CURRENT_DATE 2.时间(time)函数 返回当前时间:CURTIME(), CURR…

Mysql 中的日期时间函数汇总

日期和时间函数 MySQL中内置了大量的日期和时间函数,能够灵活、方便地处理日期和时间数据,本节就简单介绍一下MySQL中内置的日期和时间函数。 1 CURDATE()函数 CURDATE()函数用于返回当前日期,只包含年、月、日部分,格式为YYYY-M…

通过apizza生成python接口测试代码

1、先选择需要生成代码的接口 2、点击 “代码” --选择生成对应的python接口测试代码

谷歌浏览器安装apizza

接口测试是卡发中不可缺少的一环,那么常用的postman是英文就很不方便一些小伙伴的使用,所以此工具和postman功能相同且升级并且是中文模式 安装: 链接:https://pan.baidu.com/s/1mWkD-TJNOtPds2MpCc6G9Q 提取码:lfrm …

Apizza 使用方法

首先下载插件,然后安装到谷歌浏览器上 1下载插件 官方下载地址:http://apizza.cc/page/downloadext 下载本地安装包,解压后,打开Chrome浏览者扩展程序 安装插件成功。 2.使用apizza 如果你要新建项目,则点击新建项目&a…