数学建模-基于集成学习的共享单车异常检测的研究

基于集成学习的共享单车异常检测的研究

整体求解过程概述(摘要)

  近年来,共享单车的快速发展在方便了人们出行的同时,也对城市交通产生了一定的负面影响,其主要原因为单车资源配置的不合理。本文通过建立单车租赁数量的预测模型和异常检测模型,以期能够帮助城市合理配置资源。
  首先,进行探索性数据分析。主要步骤为数据预处理、描述性统计和回归分析。其中,分位数回归能够表现出输入变量与输出变量各分位点间的线性关系。
  其次,建立单车预测模型。分别运用集成学习中的 Bagging、Boosting 和模型融合算法 Stacking 进行建模。实验结果显示,Boosting 算法中的 CatBoost 模型对单车租赁数量的预测效果最好。
  最后,建立异常检测模型。运用孤立森林算法检测单车租赁数量的异常值,并利用支持向量机分析各输入变量对租赁异常的影响程度。研究表明,租赁异常可能与城市意外事件的发生、节假日的到来、温度与风速以及湿度的突变和极端恶劣天气的产生有关。预测模型能够帮助城市合理规划共享单车的投放数量,而异常检测模型则有助于城市及时处理突发事件,希望本文的研究能够为城市资源合理配置提供参考。

问题分析

  首先,本文对该共享单车数据集进行了探索性数据分析。探索性数据分析用于解释原始数据,并挖掘数据的潜在规律。第一步,进行数据预处理,即对数值特征的归一化处理和对类别特征的哑变量处理。该预处理方法有利于数据建模分析。第二步,进行描述性统计,本文绘制了小提琴图和饼状图,借以表现各特征变量的概率分布情况。第三步,进行回归分析,其中,相比于线性回归,分位数回归能够表现出解释变量与被解释变量各分位点之间的线性关系,其解释数据效果更好。
  其次,本文对该数据集进行了集成学习研究。集成学习是指将若干个弱学习器通过一定的策略组合得到一个强学习器,其基本分类为 Bagging、Boosting 和Stacking。第一步,运用随机森林、XGBoost、LightBoost 和 CatBoost 四种模型分别对该数据集进行训练,并探究其特征变量重要性。随机森林是集成决策树的Bagging 算法,其学习结果由其决策树的投票产生。XGBoost、LightGBM 和CatBoost 均属于 Boosting 算法,其中,XGBoost 对损失函数进行改进,并利用正则化减少过拟合,提高了模型的泛化能力。LightGBM 支持并行化学习,在处理多维问题时其计算效率更高;CatBoost 在处理类别特征问题上进行了优化,其模型精度往往比 XGBoost 和 LightGBM 更高。第二步,运用 Stacking 方法将上述四种算法进行模型融合,以期得到一个泛化能力更好的模型。Stacking 是模型融合的学习框架,其核心思想是将不同模型的优点进行有机结合,从而提高模型的泛化能力。
  最后,本文以上述模型的训练误差为样本对单车租赁数量进行异常检测研究。第一步,运用孤立森林模型检测样本中的异常点,以期通过误差异常来反映共享单车租赁数量异常。孤立森林是一种异常检测方法,可以精准识别分布稀疏的独立离群点。第二步,运用支持向量机对上述异常情况进行训练,支持向量机非常擅长分类及回归问题,以期通过其向量空间特征系数来反映各变量对单车租赁数量异常的影响程度。集成学习所建立的预测模型能够帮助城市合理规划共享单车的投放数量,而孤立森林和支持向量机所建立的异常检测模型则有助于城市及时处理突发事件。本文研究方法的流程图如下图 1 所示:
在这里插入图片描述
  其中,探索性数据分用于解释数据,集成学习用于构造预测模型,孤立森林和支持向量机用于构造检测模型。

模型的建立与求解(部分)

  对于该数据集中的数值型变量,即数值特征,本文对其进行数据归一化,即统一映射到[0, 1]区间上;数据无量纲化有利于提升机器学习模型的训练精度和收敛速度,其公式如下:
在这里插入图片描述
  其中,𝑥代表原始数据,𝑥′代表归一化后的数据,𝑚𝑎𝑥代表原始数据中最大值,𝑚𝑖𝑛代表原始数据中最小值。数值型变量的代表符号如下表 1 所示:
在这里插入图片描述
  对于该数据集中的分类型变量,即类别特征,本文采用哑变量的处理方式,将其统一变换为 0 或 1 变量。分类型变量的代表符号如下表 2 所示:

在这里插入图片描述
  本文探索性数据分析和集成学习所用数据均为上述预处理数据。

描述性统计

  探索性数据分析(Exploratory Data Analysis,EDA)用于解释原始数据,探索数据之间的潜在规律。EDA 在数据科学工作过程中,能够对多个环节产生影响,是不可或缺的重要步骤。本文采用描述性统计和分位数回归两种方法进行EDA。
  小提琴图是箱线图与密度图的结合,可以同时反映出变量的概率密度及分布情况,其中,箱线图的信息在中间部分,密度图的信息在两侧部分。本文主要运用小提琴图对数值型变量进行了 EDA,其结果如下图 2 所示:

在这里插入图片描述
  从图 2 中可以看出,单车租赁数量与时间和温度这两个变量主要集中分布在中间区域,各数据间的取值无明显差异;而湿度与风速这两个变量存在极值点,可初步判断这两个变量与单车租赁数量有较大相关性。
  对于该数据集中的分类型变量,本文主要运用饼状图进行 EDA,其结果如下图 3 所示:
在这里插入图片描述
  从季节变量饼状图中可以看出,春夏秋冬四季约各为总体的四分之一,说明该数据集的季节变量分布较为均匀;从天气变量饼状图中可以看出,晴天出现的次数最多,约为总体的 63%,而雨雪等极端天气出现的次数最少,仅为 3%;除此之外,工作日所占比重最大,约为总体的 69%,而节假日所占比重最少,仅 3%。

在这里插入图片描述
  为了方便进行回归分析,本文对季节和天气两个类别特征进行编码化处理,其他数据仍为预处理数据,并进行了线性回归分析,其结果如下图 4 所示:

在这里插入图片描述

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

(代码和文档not free)

X - input data, t - number of trees, ψ - subsampling size
输出:a set of t iTrees
1:Initialize Forest
2:set height limit l = ceiling(log2ψ)
3:for i = 1 to t do
4: X’← sample(X, ψ)
5: Forest← Forest∪iTree(X’, 0, l)
6:end for
7:return Forest
输入:X’ – input data
输出:an iTree
1: if X’ cannot be divided then
2: return exNode{Size← | X’ |}
3: else
4: let Q be a list of attribute in X’
5: randomly select an attribute q∈Q
6: randomly select a split point p between the max and min values of attribute q in X’
7: Xl← filter(X’, q < p)
8: Xr← filter(X’, q ≥ p)
9: return inNode{Left← iTree(Xl),
10: Right← iTree(Xr),
11: SplitAtt← q,
12: SplitValue← p}
13: end if
输入:x – an instance, T – an iTree, hlim – height limit, e – current path length;
To be initialized to zero when first called
输出:path length of x
1: if T is an external node or e ≥ hlim then
2: return e + c(T, size) {c(.) is defined in Equation 1}
3: end if
4: α← T.splitAtt
5: if< T.splitValue then
6: return PathLength(x, T.Left, hlim, e +1)
7: else {xα ≥ T.splitValue}
8: return PathLength(x, T.Right, hlim, e +1)
9: end if
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/203393.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyQt基础_011_对话框类控件QMessage

基本功能 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class WinForm( QWidget): def __init__(self): super(WinForm,self).__init__() self.setWindowTitle("QMessageBox") self.resize(300, 100) self.myButt…

初识Java 18-5 泛型

目录 动态类型安全 异常 混型 C中的混型 替代方案 与接口混合 使用装饰器模式 与动态代理混合 本笔记参考自&#xff1a; 《On Java 中文版》 动态类型安全 在Java 5引入泛型前&#xff0c;老版本的Java程序中就已经存在了List等原生集合类型。这意味着&#xff0c;我们…

vue3中的provide与inject跨层级组件(祖孙)间通信

provide和inject提供依赖注入&#xff0c;功能类似 vue2.x 的provide/inject 实现跨层级组件(祖孙)间通信 子或孙子组件接收到的数据可以用于读取显示&#xff0c;也可以进行修改&#xff0c;同步修改父&#xff08;祖&#xff09;组件的数据。 注意&#xff1a;无论子组件…

第二十章总结。。。

20.1线程简介. 20.2创建线程 2.1继承Thread类 Thread 类是java.lang包中的一个类&#xff0c;从这个类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立Thread 实例。Thread类中常用的两个构造方法如下: public Thread():创建一个新的线程对象。 public Thread…

大数据HCIE成神之路之数学(4)——最优化实验

最优化实验 1.1 最小二乘法实现1.1.1 算法介绍1.1.2 代码实现1.2 梯度下降法实现1.2.1 算法介绍1.2.2 代码实现1.3 拉格朗日乘子法1.3.1 实验1.3.2 实验操作步骤1.1 最小二乘法实现 1.1.1 算法介绍 最小二乘法(Least Square Method),做为分类回归算法的基础,有着悠久的历…

【数据结构】单链表---C语言版

【数据结构】单链表---C语言版 一、顺序表的缺陷二、链表的概念和结构1.概念&#xff1a; 三、链表的分类四、链表的实现1.头文件&#xff1a;SList.h2.链表函数&#xff1a;SList.c3.测试函数&#xff1a;test.c 五、链表应用OJ题1.移除链表元素&#xff08;1&#xff09;题目…

zookeeper 客户端常用命令简单记录(实操课程系列--watcher功能测试)(发布订阅功能测试)

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读测试来学习zookeeper。阅读本文之前&#xff0c;请先阅读----zookeeper 单机伪集群搭建简单记录&#xff08;实操课程系列&#xff09; 1、命令行工具切换到zookeeper的bin目录下面&am…

Linux系统编程--文件操作函数

一.常见IO函数 fopen fclose fread fwrite fseek fflush fopen 运行过程 &#xff1a;打开文件 写入数据 数据写到缓冲区 关闭文件后 将数据刷新入磁盘 1.fopen 返回文件类型的结构体的指针 包括三部分 1).文件描述符&#xff08;整形值 索引到磁盘文件&#xff09;…

GraphCast:基于机器学习的全球中期天气预测模型

文章信息 文章题为”GraphCast: Learning skillful medium-range global weather forecasting”&#xff0c;该文章于2023年发表至Science&#xff0c;文章内容主要关于利用机器学习模型&#xff0c;实现高效、准确的全球中期天气预测。由于文章内容较多&#xff0c;本文仅对研…

跨境电商CRM系统:挖掘客户价值,实现精准营销

跨境电商企业日常工作中需要用到很多应用例如建独立站、邮件营销、财务管理&#xff0c;其中CRM系统更是客户管理的核心。无论是获客、管理客户资料、维护客户关系、数据分析都要在应用上完成。今天我们就来说一说跨境电商CRM系统有哪些功能&#xff1f; 1.AI人工智能助手 业…

前端项目中获取浏览器版本的方法

在我们的前端项目中&#xff0c;navigator.userAgent属性含有当前浏览器相关信息&#xff08;比如版本号&#xff09;。 所以当我们想要获取用户当前访问的浏览器的版本时直接去解析navigator.userAgent字段就中。 废话不多说&#xff0c;下面看封装的获取浏览器版本的函数&am…

express+mySql实现用户注册、登录和身份认证

expressmySql实现用户注册、登录和身份认证 注册 注册时需要对用户密码进行加密入库&#xff0c;提高账户的安全性。用户登录时再将密码以相同的方式进行加密&#xff0c;再与数据库中存储的密码进行比对&#xff0c;相同则表示登录成功。 安装加密依赖包bcryptjs cnpm insta…

C++学习之路(十三)C++ 用Qt5实现一个工具箱(增加一个Base64加解密功能)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《XML文本格式化功能》功能。为了继续丰富我们的工具箱&#xff0c;今天我们就再增加一个平时经常用到的功能吧&#xff0c;就是「 Base64加解密 」功能。下面我们就来看看如何来规划开发一个这样的小功能并且添加到我…

高性能Mysql第三版(一)

学习目标&#xff1a; 高性能Mysql第3版 学习内容&#xff1a; MySQL架构与历史Mysql基座测试服务器性能Schema与数据类型优化创建高性能的索引查询性能优化Mysql高级特性Explain 文章目录 学习目标&#xff1a;高性能Mysql第3版 学习内容&#xff1a;1 Mysql逻辑架构1.1 My…

autogen的理解和实践

什么是autogen? AutoGen 是一个框架&#xff0c;支持使用多个代理来开发 LLM 应用程序&#xff0c;这些代理可以相互对话来解决任务。AutoGen 代理是可定制的、可对话的&#xff0c;并且无缝地允许人类参与。他们可以采用法学硕士、人力投入和工具组合的各种模式运作。简单来说…

C++ CryptoPP使用RSA加解密

Crypto (CryptoPP) 是一个用于密码学和加密的 C 库。它是一个开源项目&#xff0c;提供了大量的密码学算法和功能&#xff0c;包括对称加密、非对称加密、哈希函数、消息认证码 (MAC)、数字签名等。Crypto 的目标是提供高性能和可靠的密码学工具&#xff0c;以满足软件开发中对…

JSP+servlet实现高校社团管理系统

JSPservlet实现的高校社团管理系统 &#xff0c;前后台都有&#xff0c;前台演示地址:高校社团管理系统 后台演示地址:登录 用户名:sys,密码:123456 前台功能&#xff1a;首页&#xff0c;社团列表&#xff0c;社团风采&#xff0c;社团活动&#xff0c;新闻列表&#xff0c…

HarmonyOS将程序下载并运行到真机上 (华为手机为例)

前面的文章 我们讲到过一些关于这个预览器的操作 可以在上面看到我们代码的一个整体效果 但其实 这边可以真实的运行在我们自己的手机上 因为你这个预览器再好 还是和实际的手机环境有所偏差 首先 我们要设置一下手机 我们在设置中 找到 关于手机 然后 这下面 有一个 Harmo…

【功能测试】软件系统测试报告

1.引言 1.1.目的 本测试报告为 xxx 系统测试报告&#xff0c;本报告目的在于总结测试阶段的测试及测试结果分析&#xff0c;描述系统是否达到需求的目的。 本报告预期参考人员包括测试人员、测试部门经理、开发人员、项目管理人员等。 1.2.参考文档 《xxxx系统需求规格说明…

Linux实现类似cp的命令

1.利用主函数的三个函数进行传参 1).主函数的三个参数的含义: argc:主函数的参数个数 argv:主函数的参数内容 envp:环境变量; 2).演示代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc,char *argv[],char *envp[]…