首页 > 其他分享 >数据集的生成

数据集的生成

时间:2024-12-16 20:53:56浏览次数:2  
标签:数据 self detour traj switch 生成 data

以下是上述内容的翻译:


从代码来看,异常数据集(绕路和转换)是由训练数据生成的,而不是测试数据。以下是 process_datasets 方法中的相关部分:

# 将训练数据中的正常轨迹进行转换
train_converted = {}
for idx, traj in enumerate(train_data):
    train_converted[idx] = self.convert_trajectory(traj)

# 从训练数据中生成异常点
detour_data = {}
switch_data = {}
num_outliers = int(len(train_data) * 0.1)  # 10%的异常点

for i in range(num_outliers):
    orig_traj = train_data[i]  # 从训练数据中获取轨迹
    detour_traj = self.generate_detour(orig_traj)
    switch_traj = self.generate_switch(orig_traj)
    
    detour_data[i] = self.convert_trajectory(detour_traj)
    switch_data[i] = self.convert_trajectory(switch_traj)

具体来看:

  1. 异常点的数量是训练数据总量的10%(num_outliers = int(len(train_data) * 0.1))。
  2. 每个异常点是从训练数据中选取的一条轨迹(orig_traj = train_data[i])。
  3. 然后,分别为该训练轨迹生成绕路版本和转换版本。
  4. 测试数据是独立的,未被用于生成异常点。

如果您希望了解代码为何设计成这样,或者需要进一步解析异常生成过程的其他方面,请告诉我!

以下是上述内容的翻译:


绕路生成(generate_detour 方法):

def generate_detour(self, traj, detour_factor=2):
    if len(traj) < 3:
        return traj
        
    start = traj[0]  # 保留原始起点
    end = traj[-1]   # 保留原始终点
    num_extra_points = int(len(traj) * detour_factor)  # 生成比原路径更多的点
    
    min_val = min(start, end)
    max_val = max(start, end)
    
    # 在起点和终点之间生成随机点
    detour_points = []
    for _ in range(num_extra_points):
        new_point = np.random.randint(min_val, max_val + 1)
        detour_points.append(new_point)
        
    return [start] + sorted(detour_points) + [end]

绕路生成方法通过以下方式生成一条更长的路径:

  1. 保留原始的起点和终点
  2. 在起点和终点之间添加随机点(默认生成的点数量是原路径点数量的两倍,由 detour_factor 控制);
  3. 将这些点排序,从而形成一条看起来合理的路径。

转换生成(generate_switch 方法):

def generate_switch(self, traj, switch_ratio=0.3):
    if len(traj) < 4:
        return traj
        
    # 随机选择一段路径进行修改(默认占原路径的30%)
    switch_length = int(len(traj) * switch_ratio)
    switch_start = np.random.randint(1, len(traj) - switch_length - 1)
    switch_end = switch_start + switch_length
    
    # 通过对原始点添加随机偏移量生成新点
    new_segment = []
    for _ in range(switch_length):
        orig_point = traj[switch_start + len(new_segment)]
        offset = np.random.randint(-100, 101)  # 随机偏移量在-100到100之间
        new_point = max(0, orig_point + offset)
        new_segment.append(new_point)
        
    return traj[:switch_start] + new_segment + traj[switch_end:]

转换生成方法通过以下步骤修改路径的一部分:

  1. 随机选择一段路径(默认长度为原路径的30%);
  2. 用随机偏移量替换该路径段中的点
  3. 保留路径的起始和结束部分不变

测试数据处理:

代码并不生成人工测试数据,而是:

  1. 从CSV文件加载真实的测试数据

    test_data = self.load_porto_data(test_path)
    
  2. 将测试路径转换为所需格式

    test_converted = {}
    for idx, traj in enumerate(test_data):
        test_converted[idx] = self.convert_trajectory(traj)
    
  3. 将其保存到 test.pickle 文件

    with open(os.path.join(self.output_dir, 'test.pickle'), 'wb') as f:
        pickle.dump(test_converted, f)
    

需要注意的是,人工异常生成(绕路和转换生成)仅应用于训练数据,以创建带标签的异常示例;测试数据保持其原始来源数据的完整性,没有被修改。


如果您需要更详细的解释,可以告诉我!

标签:数据,self,detour,traj,switch,生成,data
From: https://www.cnblogs.com/GraphL/p/18611102

相关文章

  • arm安装数据库
    https://blog.csdn.net/wochunyang/article/details/132883654 https://blog.csdn.net/qq_43690482/article/details/132168349 https://www.cnblogs.com/wshisboy/p/16374015.html https://www.cnblogs.com/windandchimes/p/18344463首先先看麒麟系统的版本CPU对应版本......
  • Redis:从安装到“数据不见了,快来救我!”史上最全讲解之安装配置启动
    本着上班找工作为目的,从0开始学redis,从安装部署开始。centos9作为实验机目录1、redis下载安装2、redis配置并启动3、Redis命令3.1、设置值(key)3.2、获取值3.3、EX选项3.4、PX选项3.5、TTL获取剩余生存时间(秒)3.6、NX选项3.7、XX选项3.8、del删除键4、redis工具......
  • ChatGPT生成测试用例的最佳实践(二)
           这种测试用例还不够直观,能不能让其以表格的形式显示呢?笔者输入“请以表格形式展示,谢谢。”提示词,ChatGPT输出的部分内容如图3-3所示。 图3-3 ChatGPT输出的部分内容      以下为ChatGPT生成的关于百度关键字搜索的测试用例集(以表格形式组织)。ChatG......
  • 多次碰壁,终于解决关于git修改本地仓库时再次push推送远端仓库生成的问题【git did not
            当出现“gitdidnotexitcleanly(exitcode1)”错误,这通常意味着在推送(push)更改时遇到了问题。这有两种情况1.未提交的修改你在本地修改了文件,但是没有先进行 gitadd 和 gitcommit 操作。你需要先将修改添加到暂存区( gitadd. 可以添加所有修改......
  • 海山数据库(He3DB)源码解读:T_GrantStmt原理浅析
    一、概述  Grant在He3DB中用于用于执行SQL授权语句的函数,具体来说,它处理GRANT语句,用于赋予用户或角色特定的权限。二、GrantRole命令的执行流程PostgresMainexec_simple_query→执行简单的SQL查询;StartTransactionCommand→开始事务;pg_parse_query→解析......
  • 海山数据库(He3DB)源码解读:T_DropRoleSetStmt原理浅析
    一、概述  DropRoleStmt表示删除角色的DDL语句。。二、DropRole命令的执行流程PostgresMainexec_simple_query→执行简单的SQL查询;StartTransactionCommand→开始事务;pg_parse_query→解析为内部的抽象语法树(AST);PortalRunstandard_ProcessUtility→权限......
  • Redis与关系型数据库:在不同场景下的数据库选择与优化策略
    在现代应用开发中,数据库作为核心组件之一,承载着数据存储、检索和管理的重要任务。根据不同的应用需求,开发人员通常需要在关系型数据库(如MySQL)和NoSQL数据库(如Redis)之间做出选择。每种数据库都有其独特的优势和适用场景,合理的数据库选择和优化策略能够显著提高系统的性能和可扩......
  • 【YashanDB知识库】MySQL迁移至崖山char类型数据自动补空格问题
    【问题分类】功能使用【关键字】char,char(1)【问题描述】MySQL迁移至崖山环境,字段类型源端和目标端都为char(2),但应用存储的数据为'0'、'1',此时崖山查询该表字段时会自动补充空格【问题原因分析】mysql有sql_mode控制,检查是否启用了PAD_CHAR_TO_FULL_LENGTHSQL模式。如果启用......
  • 五款实用报表工具推荐:助你轻松搞定数据可视化!
    概述本文将为大家介绍五款功能各异的报表工具,包括山海鲸报表、Canva、BIRT、Chart.js和Metabase。文章详细分析了每款工具的特点、优缺点以及适用场景,帮助企业用户根据自身需求选择合适的报表解决方案,以提高数据分析和可视化能力。1.山海鲸报表简介山海鲸报表是一款国产报表工......
  • NiceGUI打包后避免在当前目录生成文件夹
    直接在Import之后加上这句代码即可os.environ["WEBVIEW2_USER_DATA_FOLDER"]=os.path.join(os.path.expanduser("~"),"Example_APP")示例代码:importosfromniceguiimportui#user_data_folder=os.path.join(os.path.expanduser("~"),......