当前位置: 首页 > news >正文

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析

在这里插入图片描述

相关链接

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题二Python代码分析

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析

1 题目

Citi Bike是纽约市在2013年启动的一项自行车共享出行计划,由“花旗银行”(Citi Bank)赞助并取名为“花旗单车”(Citi Bike)。在曼哈顿,布鲁克林,皇后区和泽西市有8,000辆自行车和500个车站。为纽约的居民和游客提供一种 方便快捷,并且省钱的自行车出行方式。人们随处都能借到Citi Bank,并在他们的目的地归还。本案例的数据有两部分:第一部分是纽约市公共自行车的借还交易流水表。Citi Bik自行车与共享单车不同,不能使用手机扫码在任意地点借还车,而需要使用固定的自行车桩借还车,数据集包含2013年7月1日至2016年8 月31日共38个月(1158天)的数据,每个月一个文件。其中2013年7月到2014年8 月的数据格式与其它年月的数据格式有所差别,具体体现在变量starttime和stoptime的存储格式不同。

第二部分是纽约市那段时间的天气数据,并存储在weather_data_NYC.csv文 件中,该文件包含2010年至2016年的小时级别的天气数据。

公共自行车数据字段表

变量编号变量名变量含义变量取值及说明
1trip duration旅行时长骑行时间,数值型,秒
2start time出发时间借车时间,字符串,m/d/YYY HH:MM:SS
3stop time结束时间还车时间,字符串,m/d/YYY HH:MM:SS
4start station id借车站点编号定性变量,站点唯一编号
5start station name借车站点名称字符串
6start station latitude借车站点维度数值型
7start station longtude借车站点经度数值型
8end station id还车站点编号定性变量,站点唯一编号
9end station name还车站点名称字符串
10end station latitude还车站点纬度数值型
11end station longitude还车站点经度数值型
12bile id自行车编号定性变量,自行车唯一编号
13Use type用户类型Subscriber:年度用户; Customer:24小时或者7天的临时用户
14birth year出生年份仅此列存在缺失值
15gender性别0:未知 1:男性 2:女性

天气数据字段简介表

变量编号变量名变量含义变量取值及说明
1date日期字符串
2time时间EDT(Eastern Daylight Timing)指美国东部夏令单位
3temperature气温单位:℃
4dew_poit露点单位:℃
5humidity湿度百分数
6pressure海平面气压单位:百帕
7visibility能见度单位:千米
8wind_direction风向离散型,类别包括west,calm等
9wind_speed风速单位:千米每小时
10moment_wind_speed瞬间风速单位:千米每小时
11precipitation降水量单位:毫米,存在缺失值
12activity活动离散型,类别包括snow等
13conditions状态离散型,类别包括overcast,light snow等
14WindDirDegrees风向角连续型,取值为0~359
15DateUTC格林尼治时间YYY/m/d HH:MM

二、解决问题

  1. 自行车借还情况功能实现:

实现各个站点在一天的自行车借还情况网络图,该网络图是有向图,箭头从借车站点指向还车站点(很多站点之间同时有借还记录,所以大部分站点两两之间是双向连接)。

(一)以2014年8月3日为例进行网络分析,实现自行车借还网络图,计算网络图的节点数,边数,网络密度(表示边的个数占所有可能的连接比例数),给出计算过程和画图结果。

(二)使用上述的网络分析图,对经度位于40.695~40.72,纬度位于- 74.023~-73.973之间的局域网区域进行分析,计算出平均最短路径长度(所有点 两两之间的最短路径长度进行算数平均)和网络直径(被定义网络中最短路径的 最大值)。

  1. 聚类分析

对于2013年7月1日至2015年8月31日数据集的自行车数据进行聚类分析,选 择合适的聚类数量K值,至少选择两种聚类算法进行聚类,并且比较不同的聚类 方法以及分析聚类结果。

  1. 站点借车量的预测分析:

对所有站点公共自行车的借车量预测,预测出未来的单日借车量。将2013年 7月-2015年7月数据作为训练集,2015年8月1-31日的数据作为测试集,预测2015 年8月1-31日每天的自行车单日借车量。给出每个站点预测结果的MAPE,并且给 出模型的参数数量,最后算出所有站点的MAPE的均值(注:测试集不能参与到训 练和验证中,否则作违规处理)。
M A P E = 1 n ∑ ∣ y i − y i ^ y i ∣ × 100 % MAPE = \frac{1}{n} \sum{|\frac{y_i-\hat{y_i}}{y_i}|} \times 100\% MAPE=n1yiyiyi^×100%

data.csv是纽约市公共自行车的借还交易流水信息,格式如下表,请使用python对数据预处理和特征工程后,聚类分析:

公共自行车数据字段表

变量编号变量名变量含义变量取值及说明
1trip duration旅行时长骑行时间,数值型,秒
2start time出发时间借车时间,字符串,m/d/YYY HH:MM:SS
3stop time结束时间还车时间,字符串,m/d/YYY HH:MM:SS
4start station id借车站点编号定性变量,站点唯一编号
5start station name借车站点名称字符串
6start station latitude借车站点维度数值型
7start station longtude借车站点经度数值型
8end station id还车站点编号定性变量,站点唯一编号
9end station name还车站点名称字符串
10end station latitude还车站点纬度数值型
11end station longitude还车站点经度数值型
12bile id自行车编号定性变量,自行车唯一编号
13Use type用户类型Subscriber:年度用户; Customer:24小时或者7天的临时用户
14birth year出生年份仅此列存在缺失值
15gender性别0:未知 1:男性 2:女性

2 问题分析

2.1 问题一

  1. 绘制有向图

a. 读入数据并分别提取“起始站点编号”和“结束站点编号”两列数据,构建自行车借还网络图。

b. 对于第一步构建的网络图,我们需要计算网络图的节点数,边数,网络密度。节点数即为站点数,边数为借还次数。网络密度为边的数量占所有可能的连接比例。

c. 画出自行车借还网络图。

e. 计算平均最短路径长度和网络直径

首先选出符合条件(经度位于40.695~40.72,纬度位于- 74.023~-73.973之间)的借车站点和还车站点,并以它们为节点构建一个子图进行分析。然后可以直接使用networkx库中的函数来计算平均最短路径长度和网络直径。

2.2 问题二

  1. 数据预处理:对进行数据清洗和特征提取。可以使用PCA、LDA算法进行降维,减小计算复杂度。

  2. 聚类算法:
    a. K-means: 进行数据聚类时,选择不同的K值进行多次试验,选取最优的聚类结果。可以使用轮廓系数、Calinski-Harabaz指数等评价指标进行比较和选择。
    b. DBSCAN: 利用密度对数据点进行聚类,不需要预先指定聚类的数量。使用基于密度的聚类算法时,可以通过调整半径参数和密度参数来得到不同聚类效果。
    c. 层次聚类:可分为自顶向下和自底向上两种方式。通过迭代计算每个数据点之间的相似度,将数据点逐渐合并,最后得到聚类结果。

    d.改进的聚类算法

    e. 深度聚类算法

  3. 聚类结果分析:选择最优的聚类结果后,对不同类别骑车的用户进行画像。分析每个类别的用户行为特征。

2.3 问题三

  1. 导入数据并进行数据预处理,整合以站点为单位的借车数据。
  2. 对数据进行时间序列分析,使用ARIMA模型进行单日借车量预测。
  3. 使用时间序列交叉验证方法进行模型评估,计算每个站点预测结果的MAPE。
  4. 计算所有站点的MAPE的均值,给出模型的参数数量。

3 Python代码实现

3.1 问题一

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析

3.2 问题二

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题二Python代码分析

3.3 问题三

(1)合并天气数据


import pandas as pd
import os
# 加载数据
# 合并数据
folder_path = '初赛数据集/问题3数据集'
dfs = []
for filename in os.listdir(folder_path):if filename.endswith('.csv'):csv_path = os.path.join(folder_path, filename)tempdf = pd.read_csv(csv_path)[0:5000]dfs.append(tempdf)
bike_data = pd.concat(dfs,axis=0)
weather_data = pd.read_csv('初赛数据集/weather_data_NYC(3).csv')# 查看数据格式及之间的关联
print(bike_data.head())
print(weather_data.head())# 将“start time”列和“stop time”列转换为datetime格式
bike_data['starttime'] = pd.to_datetime(bike_data['starttime'])
bike_data['stoptime'] = pd.to_datetime(bike_data['stoptime'])
weather_data['date'] = pd.to_datetime(weather_data['date'])# 在每张表格中加入一个“day”列,代表日期
bike_data['day'] = bike_data['starttime'].dt.date
weather_data['day'] = weather_data['date'].dt.dateprint(bike_data.head())
print(weather_data.head())

(2)特征工程

从两个数据集提取用于建模的特征。

  • 对于公共自行车的使用情况,考虑借车站、还车站、借车时间等。

  • 对于天气条件,还可以考虑温度、湿度、风速等因素。

# 对于公共自行车的使用情况,提取用于建模的特征
bike_data_features = bike_data[['start station id', 'end station id', 'starttime', 'day']]
...# 对天气条件进行处理,提取用于建模的特征
weather_data_features = weather_data[['date', 'temperature', 'humidity', 'wind_speed']]
...# 接下来,需要将两个数据集进行合并,以创建一个数据集来训练模型。我们可以通过将bike_data_features和weather_data_features根据日期(day)合并来实现:model_data = pd.merge(bike_data_features, weather_data_features, on='day', how='left')
# 类别特征编码
...# 测试集:打标签,计算每天的借车数量
BorrowCounts = model_data.groupby(['day', 'start station id']).size().reset_index()
BorrowCounts = BorrowCounts.rename(columns={0: 'count'})
model_data = pd.merge(model_data, BorrowCounts, on=['day', 'start station id'], how='left')
...print(model_data.head())

在这里插入图片描述

(3)模型训练

回归预测问题,可以采用回归模型,比如XGB、LGB、线性回归、神经网络回归等模型,常用的时间序列预测模型ARIMA模型、GARCH模型、LSTM等。以下是XGB为例。

# 将数据集拆分为训练集和测试集,建立模型并对它进行训练:import xgboost as xgb
from sklearn.metrics import mean_absolute_percentage_error, mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()# 拆分数据集
train_data = model_data[model_data['day'] < pd.to_datetime('2015-08-01').date()]
test_data = model_data[model_data['day'] >= pd.to_datetime('2015-08-01').date()]# 定义输入特征以及输出
data_train = train_data[['start station id', 'end station id', 'starthour', 'is_weekend', 'temperature', 'humidity', 'wind_speed']]
Y_train = train_data['label']# 测试集:打标签,计算每天的借车数量
data_test = test_data[['start station id', 'end station id', 'starthour', 'is_weekend', 'temperature', 'humidity', 'wind_speed']]
Y_test = test_data['label']X_train = scaler.fit_transform(data_train)
X_test = scaler.transform(data_test)
# # 定义模型并训练
# XGBoost回归模型,还可以使用线性回归、决策树回归、神经网络回归
model = xgb.XGBRegressor(objective='reg:squarederror',n_jobs=-1,n_estimators=1000,max_depth=7,subsample=0.8,learning_rate=0.05,gamma=0,colsample_bytree=0.9,random_state=2023, max_features=None, alpha=0.3)
model.fit(X_train, Y_train)

在这里插入图片描述

(4) 模型评价与检验


# 计算每个站点的MAPE:
# 对测试集进行预测
Y_pred = model.predict(X_test)def calculate_mape(row):return mean_absolute_percentage_error([row['pred']],[row['true']])
# 计算每个站点的MAPE
data_test['pred'] = Y_pred
data_test['y_true'] = Y_test
data_test['mape'] = data_test.apply(calculate_mape, axis=1)
mape_by_station = data_test.groupby('start station id')['mape'].mean()
print(mape_by_station)

在这里插入图片描述

# 计算所有站点的MAPE的均值
mape_mean = mean_absolute_percentage_error(Y_test,Y_pred)
print(mape_mean)

0.47444156668192194

# 计算XGB模型的参数数量:
model.get_params()

在这里插入图片描述

完整代码

见知乎文章底部链接,下载包括所有问题的全部代码

zhuanlan.zhihu.com/p/643865954

相关文章:

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年…...

redis-cluster 创建及监控

集群命令 cluster info&#xff1a;打印集群的信息。 cluster nodes&#xff1a;列出集群当前已知的所有节点&#xff08;node&#xff09;的相关信息。 cluster meet <ip> <port>&#xff1a;将ip和port所指定的节点添加到集群当中。 cluster addslots <slot…...

vue+ivew model框 select校验遇到的问题

iview model 点击关闭&#xff0c;校验没有通过也会关闭 解决办法&#xff1a; 第一步&#xff1a;自定义页脚内容 <div slot"footer"><Button type"primary" click"confirmCarryOver()">确认</Button><Button click&qu…...

mybatis_分页

目的&#xff1a; 减少数据处理量&#xff0c;提高效率 普通sql&#xff1a; 语法&#xff1a;select * from user limit startIndex,pageSize; SELECT * from user limit 3; #[0,n] mybatis_sql: 接口&#xff1a; //分页查询List<User> getUserByLimit(Map<…...

轻量级Firefox Send替代方案Gokapi

想不到一个域名的变动会影响这么大&#xff0c;访问量出现断崖式下跌。由此可见&#xff0c;平时的访问应该只是一些 RSS 的访问而已。 上面是 Pageviews&#xff0c;下面是 Uniques 今天略有回升 难怪那些大公司要花钱买域名了&#xff0c;不过老苏是个佛系的人&#xff0c;一…...

多次发请求优化为发一次请求

优化 getUserInfo 请求 要求 getUserInfo 是个通用接口&#xff0c;在各个模块里面都有可能使用 requestUserInfo 模拟的是请求服务端真正获取用户信息的方法 业务背景 在一个页面有 A, B, C 等多个功能模块&#xff0c;A, B, C 模块渲染执行顺序不可控每个模块都会调用 get…...

彻底搞懂CPU的特权等级

x86 处理器中,提供了4个特权级别:0,1,2,3。数字越小,特权级别越高! 一般来说,操作系统是的重要性、可靠性是最高的,需要运行在 0 特权级; 应用程序工作在最上层,来源广泛、可靠性最低,工作在 3 特权级别。 中间的1 和 2 两个特权级别,一般很少使用。 理论上来讲,…...

JVM对象在堆内存中是否如何分配?

1&#xff1a;指针碰撞&#xff1a;内存规整的情况下 2&#xff1a;空闲列表: 内存不规整的情况下 选择那种分配方式 是有 java堆是否规整而决定的。而java堆是否规整是否对应的垃圾回收器是否带有空间压缩整理的能力决定的。 因此当使用Serial,ParNew等带有压缩整理过程的收…...

【小白慎入】还在手动撸浏览器?教你一招分分钟自动化操作浏览器(Python进阶)

大家好啊&#xff0c;辣条哥又来猛货了&#xff01; 小白慎入&#xff01; 目录 环境安装1 测试样例2 基本配置2.0 基本参数2.1 设置窗口2.2 添加头部2.3 网页截图2.4 伪装浏览器 绕过检测2.5案例演示 触发JS2.6 boss直聘cookie反爬绕过实践2. 7滚动到页面底部 3 进阶使用4 数…...

Unity UGUI的TouchInputModule (触摸输入模块)组件的介绍及使用

Unity UGUI的TouchInputModule (触摸输入模块)组件的介绍及使用 1. 什么是TouchInputModule组件&#xff1f; TouchInputModule是Unity中的一个UGUI组件&#xff0c;用于处理触摸输入事件。它可以让你的游戏在移动设备上实现触摸操作&#xff0c;如点击、滑动、缩放等。 2. …...

SpringMVC启动时非常缓慢,显示一直在部署中,网页也无法访问,,,Artifact is being deployed, please wait...

写了一个基本的SpringMVC程序进行测试&#xff0c;结果启动时一直显示在等待部署完毕&#xff0c;&#xff0c;&#xff0c; but这个地方一直显示转圈圈。。 后来通过url访问时网页一直转圈圈。。也就是等待响应。。 看了一会儿&#xff0c;也不知道哪儿错了&#xff0c;&…...

Docker 镜像操作

Docker镜像操作 我们已经介绍了容器操作,今天来了解下 Docker镜像 以及 镜像操作 。让我们一起开启镜像之旅吧。 Docker镜像 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库…...

linux下有关mysql安装和登录的一些问题记录

1. 输入mysql -u root -p出现报错 ERROR 2002 (HY000): Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock (2) 前提&#xff1a;MySQL可执行文件位于/usr/local/mysql/bin目录中&#xff0c;如果MySQL安装路径不同&#xff0c;需要相应修改命令…...

DS18B20的原理及实例代码(51单片机、STM32单片机)

一、DS18B20介绍 DS18B20数字温度传感器是DALLAS公司生产的单总线器件&#xff0c;用它来组成一个测温系统具有线路简单&#xff0c;体积小&#xff0c;在一根通信线上可以挂很多这样的数字温度传感器&#xff0c;十分方便。 温度传感器种类众多&#xff0c;应用在高精度、高可…...

两种单例模式

1.单例模式分为两种,饿汉模式和懒汉模式.以下是饿汉模式: public class SingleTonHungry {private static SingleTonHungry singleTonHungry new SingleTonHungry();private SingleTonHungry() {}public static SingleTonHungry getInstance() {return singleTonHungry;} }2.…...

List中交集的使用

前言 新增了一个需求&#xff0c;需要将所有药品和对应数量库存的药房查询出来&#xff0c;要求&#xff1a;‘所有药品该药房都要有&#xff0c;并且库存大于购药数量’&#xff1b; 这就得考虑一个问题&#xff0c;有的药房有该药品&#xff0c;有的药房没有该药品&#xf…...

TypeScript基础篇 - TS的函数

目录 构造函数表达 泛型和函数 泛型函数 Contextual Typing【上下文映射&#xff0c;上下文类型】 泛型约束 手动指定类型 泛型的使用规范 对比 可选参数 思考&#xff1a;onClick中e的设计 函数重载 修改办法 操作符重载 THIS void【空返回值】 思考为什么这样…...

Vue项目如何生成树形目录结构

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一手。 前言 项目的目录结构清晰、可以帮助我们更快理顺项目的整体构成。在写文档之类的时候也比较方便。生成树形目录的方式有多种&#xff0c;我这里简单介绍其中一种较为简单的实现 过…...

postgresql四种逻辑复制的状态

准备 CreateCheckpoint&#xff0c;或者bgwriter启动时&#xff0c;或者创建logicalreplicationslot时都会调用LogStandbySnapshot 记录一个XLOG_RUNNING_XACTS类型的日志。日志中记录了所有提交的事务的xid(HistoricSnapshot) 启动&#xff08;SNAPBUILD_BUILDING_SNAPSHOT&…...

梯度下降法和牛顿法

梯度下降法和牛顿法都是优化方法。 梯度下降法 梯度下降法和相关知识可以参考导数、偏导数、梯度、方向导数、梯度下降、二阶导数、二阶方向导数一文。梯度下降法是一种迭代地每次沿着与梯度相反方向前进的不断降低损失函数的优化方法。梯度下降只用到一阶导数的信息&#xf…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...