构建可靠的时间序列预测模型:数据泄露检测、前瞻性偏差消除与因果关系验证
在时间序列分析领域中,存在多种可能影响分析结果有效性的技术挑战。其中,数据泄露、前瞻性偏差和因果关系违反是最为常见且具有显著影响的问题。
数据泄露:隐蔽的系统性错误
数据泄露是指在预测时理论上无法获取的信息,通过某种方式影响了模型的训练过程。在时间序列分析中,由于数据的时序特性,这种问题尤为隐蔽。数据泄露会导致模型在训练阶段表现出远超其在实际生产环境中的准确性。
时间序列分析中的数据泄露典型场景:
- 未来数据混入: 在预测模型中错误地引入了未来时间点的数据作为特征。
- 特征工程缺陷: 在特征构建过程中无意中引入了未来信息(例如:使用包含未来时间点的滑动窗口计算均值)。
- 非时序数据分割: 忽视数据的时间序列性质进行随机分割,导致训练集和测试集之间的时序信息交叉。
影响分析
包含数据泄露的模型在实际生产环境中往往会出现显著的性能退化,这是由于在实时预测时无法获取训练阶段使用的未来信息。
检测与防范措施
- 时序感知的数据分割: 采用前向验证(walk-forward validation)或基于时间的分割方法,确保训练集、验证集和测试集在时间维度上的严格分离。
- 特征工程规范化: 确保特征构建过程仅使用相对于预测目标时间点的历史数据。
- 数据流程审计: 系统性地检查整个数据处理流程,识别潜在的泄露点。
以下通过日本天然气价格数据(来源:FRED,截至2024-01-24)进行实例分析,分别展示错误示范和正确实现方法。
importpandasaspd importnumpyasnp importrequests importmatplotlib.pyplotasplt fromsklearn.linear_modelimportLinearRegression fromstatsmodels.tsa.stattoolsimportgrangercausalitytests importseabornassns importwarnings warnings.filterwarnings('ignore') deffetch_fred_data(series_id, api_key, start_date='2000-01-01'): """从FRED API获取时间序列数据""" url="https://api.stlouisfed.org/fred/series/observations" params= { 'series_id': series_id, 'api_key': api_key, 'file_type': 'json', 'observation_start': start_date, } response=requests.get(url, params=params) ifresponse.status_code==200: data=response.json() df=pd.DataFrame(data['observations']) df['date'] =pd.to_datetime(df['date']) df['value'] =pd.to_numeric(df['value'], errors='coerce') returndf defmape(y_true, y_pred): """计算平均绝对百分比误差(MAPE)""" returnnp.mean(np.abs((y_true-y_pred) /y_true)) *100 defcreate_features(df, leakage=False): """构建特征向量,可选是否包含数据泄露""" df=df.copy() ifleakage: # 数据泄露场景 df['rolling_mean'] =df['value'].rolling(window=7, center=True).mean() df['volatility'] =df['value'].rolling(window=10, center=True).std() else: df['rolling_mean'] =df['value'].rolling(window=7).mean().shift(1) df['volatility'] =df['value'].rolling(window=10).std().shift(1) df['price_lag'] =df['value'].shift(1) df['monthly_return'] =df['value'].pct_change(periods=30) returndfdeftrain_model(data, features, target='value'): """训练和评估预测模型""" data=data.dropna() train_size=int(len(data) *0.8) train_data=data[:train_size] test_data=data[train_size:] X_train=train_data[features] y_train=train_data[target] X_test=test_data[features] y_test=test_data[target] model=LinearRegression() model.fit(X_train, y_train) y_pred=model.predict(X_test) returntest_data.index, y_test, y_pred defplot_features(data, leakage_data, proper_data, title, filename): """可视化对比数据泄露与正确处理的特征差异""" fig, (ax1, ax2) =plt.subplots(2, 1, figsize=(12, 10)) # 绘制滑动平均值对比 ax1.plot(data.index, data['value'], label='Original Price', alpha=0.5) ax1.plot(leakage_data.index, leakage_data['rolling_mean'], label='Rolling Mean (with leakage)', linewidth=2) ax1.plot(proper_data.index, proper_data['rolling_mean'], label='Rolling Mean (proper)', linewidth=2) ax1.set_title(f'{title} - Rolling Means') ax1.legend(loc='upper left') ax1.set_xlabel('Date') ax1.set_ylabel('Price') # 绘制波动率对比 ax2.plot(leakage_data.index, leakage_data['volatility'], label='Volatility (with leakage)', linewidth=2) ax2.plot(proper_data.index, proper_data['volatility'], label='Volatility (proper)', linewidth=2) ax2.set_title(f'{title} - Volatility') ax2.legend(loc='upper left') ax2.set_xlabel('Date') ax2.set_ylabel('Volatility') plt.tight_layout() plt.savefig(filename, dpi=300, bbox_inches='tight') plt.show() defplot_predictions(leakage_results, proper_results, title, filename): """可视化预测结果对比分析""" fig, (ax1, ax2) =plt.subplots(2, 1, figsize=(12, 10)) # 解析结果数据 dates_leak, y_test_leak, y_pred_leak=leakage_results dates_proper, y_test_proper, y_pred_proper=proper_results # 计算评估指标 mape_leak=mape(y_test_leak, y_pred_leak) mape_proper=mape(y_test_proper, y_pred_proper) # 时间序列预测可视化 ax1.plot(dates_leak, y_test_leak, label='Actual', alpha=0.7) ax1.plot(dates_leak, y_pred_leak, '--', label=f'With Leakage (MAPE: {mape_leak:.2f}%)') ax1.plot(dates_proper, y_pred_proper, '--', label=f'Proper (MAPE: {mape_proper:.2f}%)') ax1.set_title(f'{title} - Predictions Over Time') ax1.legend(loc='upper left') ax1.set_xlabel('Date') ax1.set_ylabel('Price') # 预测值与实际值散点图分析 ax2.scatter(y_test_leak, y_pred_leak, alpha=0.5, label='With Leakage') ax2.scatter(y_test_proper, y_pred_proper, alpha=0.5, label='Proper') ax2.plot([min(y_test_leak.min(), y_test_proper.min()), max(y_test_leak.max(), y_test_proper.max())], [min(y_test_leak.min(), y_test_proper.min()), max(y_test_leak.max(), y_test_proper.max())], 'r--', label='Perfect Prediction') ax2.set_title('Actual vs Predicted Prices') ax2.legend(loc='upper left') ax2.set_xlabel('Actual Price') ax2.set_ylabel('Predicted Price') plt.tight_layout() plt.savefig(filename, dpi=300, bbox_inches='tight') plt.show() defmain(): api_key='YOUR_KEY' # 获取原始数据 japan_gas=fetch_fred_data('PNGASJPUSDM', api_key) # 构建对比实验数据集 data_with_leakage=create_features(japan_gas, leakage=True) data_proper=create_features(japan_gas, leakage=False) # 特征构建对比分析 plot_features(japan_gas, data_with_leakage, data_proper, 'Japan Natural Gas Prices', 'japan_gas_features.png') # 模型训练与评估 features_leak= ['rolling_mean', 'volatility', 'price_lag', 'monthly_return'] features_proper= ['rolling_mean', 'volatility', 'price_lag', 'monthly_return'] leakage_results=train_model(data_with_leakage, features_leak) proper_results=train_model(data_proper, features_proper) # 预测结果可视化分析 plot_predictions(leakage_results, proper_results, 'Japan Natural Gas Prices', 'japan_gas_predictions.png') # 模型性能评估 _, y_test_leak, y_pred_leak=leakage_results _, y_test_proper, y_pred_proper=proper_results mape_leak=mape(y_test_leak, y_pred_leak) mape_proper=mape(y_test_proper, y_pred_proper) print(f"MAPE with leakage: {mape_leak:.2f}%") print(f"MAPE without leakage: {mape_proper:.2f}%") print(f"Difference in MAPE: {mape_proper-mape_leak:.2f}%")
MAPE with data leakage: 16.67% MAPE without data leakage: 22.74% Difference in MAPE: 6.07%
前瞻性偏差:时序预测中的系统性误差
前瞻性偏差是数据泄露的一种特殊形式,指模型在训练或评估阶段获取了未来时间点的信息。这种偏差在预测应用中尤其严重,因为预测的本质是基于已知信息推断未知的未来值。
前瞻性偏差的主要表现形式:
- 标签信息泄露: 在模型训练过程中误用了未来时间点的目标变量值。
- 因果时序混淆: 使用了仅在目标事件发生后才能获得的预测变量,如事后统计的市场指标或反馈数据。
影响评估
前瞻性偏差会严重影响模型的可靠性。在测试阶段获取未来信息的模型会表现出虚高的性能指标,这种假象会导致对模型预测能力的错误评估。
前瞻性偏差防控策略
- 滞后特征设计: 确保所有特征变量仅包含预测时点之前可获得的信息。
- 严格的回测机制: 采用仅使用历史数据的真实场景进行模型验证。
- 特征时序审计: 定期检查特征工程过程,防止特征计算中引入未来信息。
# 特征构建函数:前瞻性偏差版本 defcreate_features_with_lookahead(df): df['next_day_price'] =df['value'].shift(-1) # 目标变量:次日价格 df['future_5day_ma'] =df['value'].rolling(window=5, center=True).mean() df['future_volatility'] =df['value'].rolling(window=10, center=True).std() returndf # 特征构建函数:正确实现版本 defcreate_features_proper(df): df['next_day_price'] =df['value'].shift(-1) # 目标变量:次日价格 df['past_5day_ma'] =df['value'].rolling(window=5).mean() df['past_volatility'] =df['value'].rolling(window=10).std() returndf # 基于时序分割的模型训练与评估函数 defevaluate_model(data, features, title, ax): # 数据预处理 data=data.dropna() # 基于时序的训练测试集分割 train_size=int(len(data) *0.8) train_data=data[:train_size] test_data=data[train_size:] # 特征与目标变量准备 X_train=train_data[features] y_train=train_data['next_day_price'] X_test=test_data[features] y_test=test_data['next_day_price'] # 模型训练 model=LinearRegression() model.fit(X_train, y_train) # 预测与评估 y_pred=model.predict(X_test) mape_score=mape(y_test, y_pred) # 结果可视化 ax.scatter(y_test, y_pred, alpha=0.5) ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', label='Perfect Prediction') ax.set_title(f'{title}\nMAPE: {mape_score:.2f}%') ax.set_xlabel('Actual Price') ax.set_ylabel('Predicted Price') ax.legend() returnmape_score, test_data.index, y_test, y_pred defmain(): # 初始化API配置 api_key='YOUR_KEY' # 获取美国天然气价格数据 gas_data=fetch_fred_data('PNGASUSUSDM', api_key) gas_data=gas_data.set_index('date') # 构建对照组数据集 data_with_lookahead=create_features_with_lookahead(gas_data.copy()) data_proper=create_features_proper(gas_data.copy()) # 可视化分析初始化 fig, (ax1, ax2) =plt.subplots(1, 2, figsize=(15, 6)) # 模型评估 mape_lookahead, test_dates_look, y_test_look, y_pred_look=evaluate_model( data_with_lookahead, ['future_5day_ma', 'future_volatility'], 'Model with Lookahead Bias', ax1 ) mape_proper, test_dates_prop, y_test_prop, y_pred_prop=evaluate_model( data_proper, ['past_5day_ma', 'past_volatility'], 'Model without Lookahead Bias', ax2 ) plt.tight_layout() plt.show() # 性能指标对比分析 print(f"MAPE with lookahead bias: {mape_lookahead:.2f}%") print(f"MAPE without lookahead bias: {mape_proper:.2f}%") print(f"Difference in MAPE: {mape_proper-mape_lookahead:.2f}%")
通过实验验证,前瞻性偏差显著影响了模型的评估结果。这种影响实际上相当于在预测过程中引入了未来信息,导致模型性能被高估。
Performance Metrics: -------------------------------------------------- MAPE with lookahead bias: 17.81% MAPE without lookahead bias: 36.03% Difference in MAPE: 18.22%
实验结果明确显示,包含前瞻性偏差的模型在评估指标上优于正确实现的模型约18.22个百分点。这种性能差异凸显了前瞻性偏差对模型评估的显著影响。
因果关系分析:时间序列建模的基础
在时间序列分析领域,准确理解和建模因果关系对构建可靠且实用的预测模型至关重要。当底层系统发生变化时,缺乏因果基础的预测关系往往会失效,这是由于简单的相关性可能无法持续保持。
时间序列因果分析的关键挑战:
- 虚假相关性: 在小规模样本中可能出现统计上显著但实际无意义的随机相关。
- 混淆变量: 存在同时影响预测变量和目标变量的潜在因素,形成误导性的统计关联。
- 反向因果: 预测变量可能实际上是目标变量的结果而非原因。
因果分析方法论
- 格兰杰因果检验: 用于评估时间序列之间预测能力的统计检验方法。
- 有向无环图(DAGs): 用于建模和可视化潜在因果关系的图形化工具。
- 反事实分析: 评估预测变量干预效应的系统性方法。
时间序列因果分析最佳实践
- 领域知识整合: 与领域专家合作验证因果假设的合理性。
- 实验设计方法: 通过A/B测试或自然实验构建可靠的因果推断框架。
- 模型鲁棒性: 采用结构方程模型或贝叶斯网络等方法处理混淆因素。
实证分析
本节通过分析亚洲和欧洲天然气价格与美国商业银行个人贷款利率之间的关系进行实证研究。基于经济学理论,我们预期两个天然气价格指数之间存在较强的相关性。而日本液化天然气价格与美国贷款利率之间理论上缺乏直接的因果联系(虽然可能通过宏观经济指标间接关联,但这种关联在实务中并不构成显著的因果关系)。
defgranger_causality(data, max_lag=12): """执行格兰杰因果检验分析"""results= {} forcol1indata.columns: forcol2indata.columns: ifcol1!=col2: test_result=grangercausalitytests(data[[col1, col2]], maxlag=max_lag, verbose=False) min_p_value=min([test_result[i+1][0]['ssr_ftest'][1] foriinrange(max_lag)]) results[f"{col1} -> {col2}"] =min_p_value returnresults defplot_correlations_and_scatter(data): # 构建相关性矩阵 corr=data.corr() # 创建多子图布局 fig=plt.figure(figsize=(15, 10)) # 相关性热图可视化 ax1=plt.subplot2grid((2, 3), (0, 0), colspan=2) sns.heatmap(corr, annot=True, cmap='coolwarm', center=0, ax=ax1) ax1.set_title("Correlation Heatmap") # 变量对散点图分析 ax2=plt.subplot2grid((2, 3), (1, 0)) ax2.scatter(data['Japan Gas'], data['EM Gas']) ax2.set_xlabel('Japan Gas') ax2.set_ylabel('EM Gas') ax2.set_title('Japan Gas vs EM Gas') ax3=plt.subplot2grid((2, 3), (1, 1)) ax3.scatter(data['Japan Gas'], data['US Loan Rate']) ax3.set_xlabel('Japan Gas') ax3.set_ylabel('US Loan Rate') ax3.set_title('Japan Gas vs US Loan Rate') ax4=plt.subplot2grid((2, 3), (1, 2)) ax4.scatter(data['EM Gas'], data['US Loan Rate']) ax4.set_xlabel('EM Gas') ax4.set_ylabel('US Loan Rate') ax4.set_title('EM Gas vs US Loan Rate') plt.tight_layout() plt.show() defplot_time_series(data): fig, (ax1, ax2) =plt.subplots(2, 1, figsize=(15, 10)) # 天然气价格时序图 ax1.plot(data.index, data['Japan Gas'], label='Japan Gas') ax1.plot(data.index, data['EM Gas'], label='EM Gas') ax1.set_title('Natural Gas Prices Over Time') ax1.legend() ax1.grid(True) # 美国贷款利率时序图 ax2.plot(data.index, data['US Loan Rate'], label='US Loan Rate', color='green') ax2.set_title('US Loan Rate Over Time') ax2.legend() ax2.grid(True) plt.tight_layout() plt.show()
相关性分析结果显示,日本和欧盟天然气价格之间存在显著的正相关关系,这符合有效市场理论的预期。而天然气价格与美国贷款利率之间则表现出较弱的相关性。
然而,格兰杰因果检验的结果却表明了一个有趣的现象。尽管理论预期显示某些变量对之间缺乏因果关系,但统计检验结果呈现出显著性,这表明观察到的时序关系不太可能是随机产生的。这种现象突出了统计显著性与实际因果关系之间的潜在差异。
Granger Causality Results (p-values): ---------------------------------------- Japan Gas -> EM Gas: 0.0003 *** Japan Gas -> US Loan Rate: 0.0014 *** EM Gas -> Japan Gas: 0.0000 *** EM Gas -> US Loan Rate: 0.0008 *** US Loan Rate -> Japan Gas: 0.0081 *** US Loan Rate -> EM Gas: 0.0005 *** Significance levels: *** p<0.01, ** p<0.05, * p<0.1
总结
数据泄露、前瞻性偏差和因果关系违反等问题会导致模型评估结果出现系统性偏差。虽然Python提供了强大的数据处理能力,但确保分析过程的方法学正确性仍然是数据科学家的核心职责。实施规范的最佳实践、深入理解领域知识并严格验证模型假设,是构建可靠时间序列分析模型的关键要素。
https://avoid.overfit.cn/post/122b36fdb8cb402f95cc5b6f2a22f105
作者:Kyle Jones
相关文章:
构建可靠的时间序列预测模型:数据泄露检测、前瞻性偏差消除与因果关系验证
在时间序列分析领域中,存在多种可能影响分析结果有效性的技术挑战。其中,数据泄露、前瞻性偏差和因果关系违反是最为常见且具有显著影响的问题。 数据泄露:隐蔽的系统性错误 数据泄露是指在预测时理论上无法获取的信息,通过某种…...
Spring Boot - 数据库集成05 - 集成MongoDB
Spring Boot集成MongoDB 文章目录 Spring Boot集成MongoDB一:使用前的准备1:依赖导入 & 配置2:实体类创建 二:核心 - MongoRepository三:核心 - MongoTemplate1:集合操作2:文档操作(重点)3&…...
计算机网络之运输层
本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 04 传输层 在网上看到其他人做了相关笔记,就不再多余写了,直接参考着学习吧。 王道考研 计算机网络笔记 第五章:传输层_王道计算机网络传输层_Baret-H的博客-CSDN博…...
DeepSeekMoE:迈向混合专家语言模型的终极专业化
一、结论写在前面 论文提出了MoE语言模型的DeepSeekMoE架构,目的是实现终极的专家专业化(expert specialization)。通过细粒度的专家分割和共享专家隔离,DeepSeekMoE相比主流的MoE架构实现了显著更高的专家专业化和性能。从较小的2B参数规模开始&#x…...
知识库管理驱动企业知识流动与工作协同创新模式
内容概要 知识库管理在现代企业中扮演着至关重要的角色,其价值不仅体现在知识的积累,还在于通过优质的信息流动促进协作与创新。有效的知识库能够将分散的信息整合为有序、易于访问的资源,为员工提供实时支持,进而提升整体工作效…...
二叉树-堆(补充)
二叉树-堆 1.二叉树的基本特性2.堆2.1.堆的基本概念2.2.堆的实现2.2.1.基本结构2.2.2.堆的初始化2.2.3.堆的销毁2.2.4.堆的插入2.2.5.取出堆顶的数据2.2.6.堆的删除2.2.7.堆的判空2.2.8.堆的数据个数2.2.9.交换2.2.10.打印堆数据2.2.11.堆的创建2.2.12.堆排序2.2.13.完整代码 3…...
Java面试题2025-并发编程基础(多线程、锁、阻塞队列)
并发编程 一、线程的基础概念 一、基础概念 1.1 进程与线程A 什么是进程? 进程是指运行中的程序。 比如我们使用钉钉,浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。 …...
【方法论】ChatGPT与DeepSeek的联合应用,提升工作效率的新解决方案
标题:ChatGPT与DeepSeek的联合应用,提升工作效率的新解决方案 【表格】ChatGPT与DeepSeek联合应用流程 阶段工具主要任务优势备注初稿生成ChatGPT基于用户输入生成初步内容高效、快速生成内容,适应多种主题适合生成长篇文章、报告、分析等验…...
RoboMaster- RDK X5能量机关实现案例(一)识别
作者:SkyXZ CSDN:https://blog.csdn.net/xiongqi123123 博客园:https://www.cnblogs.com/SkyXZ 在RoboMaster的25赛季,我主要负责了能量机关的视觉方案开发,目前整体算法已经搭建完成,实际方案上我使用的上…...
5分钟带你获取deepseek api并搭建简易问答应用
目录 1、获取api 2、获取base_url和chat_model 3、配置模型参数 方法一:终端中临时将加入 方法二:创建.env文件 4、 配置client 5、利用deepseek大模型实现简易问答 deepseek-v3是截止博文撰写之日,无论是国内还是国际上发布的大模型中…...
Ikigai是什么
Ikigai(生き甲斐) 是一个日语词语,意思是“生活的意义”或“生命的价值所在”。它是一种关于人生意义的哲学概念,源自日本文化,强调通过找到自己热爱、擅长、社会需要以及能带来经济回报的交集来实现幸福和满足感。 I…...
基于PyQt设计的智能停车管理系统
文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】设计意义【4】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】VSCODE【2】python【3】ptqt【4】HyperLPR31.5 参考文献二、安装Python环境1.1 环境介绍**1.2 Python版本介…...
Flink (十二) :Table API SQL (一) 概览
Apache Flink 有两种关系型 API 来做流批统一处理:Table API 和 SQL。Table API 是用于 Scala 和 Java 语言的查询API,它可以用一种非常直观的方式来组合使用选取、过滤、join 等关系型算子。Flink SQL 是基于 Apache Calcite 来实现的标准 SQL。无论输入…...
MySQL知识点总结(十三)
执行逻辑备份要具备哪些条件,其优缺点在哪。 逻辑备份是温备,创建逻辑备份文件时,MySQL服务器必须处于运行状态,其他应用程序在逻辑备份期间不能修改但可以执行读取操作。逻辑备份会把表结构和数据转换为SQL语句保存。 逻辑备份…...
ACL-2024 | 具身智能空间理解能力几何?EmbSpatial-Bench:视觉语言大模型在具身任务中空间理解水平测试基准
作者:Mengfei Du, Binhao Wu, Zejun Li, Xuanjing Huang, Zhongyu Wei 单位:复旦大学数据科学学院,复旦大学计算机科学学院 论文标题:EmbSpatial-Bench: Benchmarking Spatial Understanding for Embodied Tasks with Large Vis…...
动手学图神经网络(6):利用图神经网络进行点云分类
利用图神经网络进行点云分类 引言 在本教程中,大家将学习使用图神经网络(Graph Neural Networks, GNN)进行点云分类的基本工具。给定一组对象或点集的数据集,将这些对象嵌入到一个特征空间中,使得它们在特定任务下能够分类。将原始点云作为神经网络的输入,让网络学习捕…...
Ollama+DeepSeek本地大模型部署
1、Ollama 官网:https://ollama.com/ Ollama可以干什么? 可以快速在本地部署和管理各种大语言模型,操作命令和dokcer类似。 mac安装ollama: # 安装ollama brew install ollama# 启动ollama服务(默认11434端口…...
docker安装Redis:docker离线安装Redis、docker在线安装Redis、Redis镜像下载、Redis配置、Redis命令
一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull redis:7.4.0 2、离线包下载 两种方式: 方式一: -)在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -)导出 # 导出镜像…...
HTML 标题
HTML 标题 引言 HTML(超文本标记语言)是构建网页的基础,而标题则是网页中不可或缺的元素。标题不仅能够帮助用户快速了解网页内容,还能够对搜索引擎优化(SEO)产生重要影响。本文将详细介绍HTML标题的用法…...
记录 | MaxKB创建本地AI智能问答系统
目录 前言一、重建MaxKBStep1 复制路径Step2 删除MaxKBStep3 创建数据存储文件夹Step4 重建 二、创建知识库Step1 新建知识库Step2 下载测试所用的txtStep3 上传本地文档Step4 选择模型补充智谱的API Key如何获取 Step5 查看是否成功 三、创建应用Step1 新建应用Step2 配置AI助…...
Linux 非阻塞IO
Linux 非阻塞IO 1. fcntl() 在Linux操作系统中,fcntl() 是一个用于操作文件描述符的系统调用。它提供了多种功能,包括控制文件描述符的属性、管理文件锁定、设置文件的非阻塞模式等。 本文只截取了用于IO模型的 fcntl() 部分内容, fcntl() …...
美国本科申请文书PS写作中的注意事项
在完成了introduction之后,便可进入到main body的写作之中。美国本科申请文书PS的写作不同于学术论文写作,要求你提出论点进行论证之类。PS更多的注重对你自己的经历或者motivation的介绍和描述。而这一描述过程只能通过对你自己的过往的经历的展现才能体…...
Qt文件操作
目录 一、文件操作相关类 1.QFile 2.QFileInfo 3.QTextStream 4.QDataStream 5.QDir 6.QFileSystemWatcher 7.QTemporaryFile 二、文件操作示例 1.文本文件操作 2.目录操作 3.二进制文件操作 一、文件操作相关类 1.QFile QFile类用于文件的创建、读写、复制、删除…...
赚钱的究极认识
1、赚钱的本质是提供了价值或者价值想象 价值: 比如小米手机靠什么?“性价比”,什么饥饿营销,创新,用户参与,生态供应链,品牌这些不能说不重要,但是加在一起都没有“性价比”这3字重…...
【项目】基于Qt开发的音乐播放软件
目录 项目介绍 项目概述 界面开发 界面分析 创建工程 主界面布局设计 窗口主框架设计 界面美化 主窗口设定 添加图片资源 head处理 播放控制区处理 自定义控件 BtForm 推荐页面 自定义CommonPage 自定义ListItemBox 自定义MusicSlider 自定义VolumeTool 音…...
week08_文本匹配任务
1、文本匹配任务概述 狭义: 给定一组文本,判断其是否语义相似 今天天气不错 match 今儿个天不错呀 √ 今天天气不错 match 你的代码有bug 以分值形式给出相似度 今天天气不错 match 今儿个天不错呀 0.9 今天天气不错 match…...
01-01 五元组
[外链图片转存中…(img-8JR8fhPZ-1737855365022)] 01-01 五元组 网络中的五元组(5-Tuple) 是用于唯一标识一个网络连接或数据流的五个关键参数组合。这五个参数共同定义了数据包的来源、目的地以及传输方式,是网络设备(如防火墙…...
5.2 软件需求分析
文章目录 需求分析的意义软件需求的组成需求分析的5个方面需求分析方法 需求分析的意义 需求分析解决软件“做什么”的问题。由于开发人员比较熟悉计算机而不熟悉领域业务,用户比较熟悉领域业务而不熟悉计算机,双方需要通过交流,制定出完整、…...
OpenCV:在图像中添加噪声(瑞利、伽马、脉冲、泊松)
目录 简述 1. 瑞利噪声 2. 伽马噪声 3. 脉冲噪声 4. 泊松噪声 总结 相关阅读 OpenCV:在图像中添加高斯噪声、胡椒噪声-CSDN博客 OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯-CSDN博客 OpenCV:图像处理中的低通滤波-CSDN博客 OpenCV&…...
进程池的制作(linux进程间通信,匿名管道... ...)
目录 一、进程间通信的理解 1.为什么进程间要通信 2.如何进行通信 二、匿名管道 1.管道的理解 2.匿名管道的使用 3.管道的五种特性 4.管道的四种通信情况 5.管道缓冲区容量 三、进程池 1.进程池的理解 2.进程池的制作 四、源码 1.ProcessPool.hpp 2.Task.hpp 3…...
C++:多继承习题3
题目内容: 声明一个时间类Time,时间类中有3个私有数据成员(Hour,Minute,Second)和两个公有成员函数(SetTime和PrintTime)。要求: (1) SetTime根据传递的3个参数为对象设置时间; &a…...
数论问题75
命题,证明:存在K∈N,使得对于每个n∈N,Kx2^n1都是合数。 证明:设n2^m,当m0,1,2,3,4时,a(m)2^(2^m)1都是素数。 a(0)213,a(1)2^215,a(2)2^4117&…...
Baklib引领数字化内容管理转型提升企业运营效率
内容概要 在数字化迅速发展的背景下,企业正面临着前所未有的内容管理挑战。传统的内容管理方式已难以适应如今的信息爆炸,企业需要更加高效、智能的解决方案以应对复杂的数据处理需求。Baklib作为行业的先锋,以其创新技术对数字化内容管理进…...
2025年AI手机集中上市,三星Galaxy S25系列上市
2025年被认为是AI手机集中爆发的一年,各大厂商都会推出搭载人工智能的智能手机。三星Galaxy S25系列全球上市了。 三星Galaxy S25系列包含S25、S25和S25 Ultra三款机型,起售价为800美元(约合人民币5800元)。全系搭载骁龙8 Elite芯…...
Vue2官网教程查漏补缺学习笔记 - 3Vue实例4模板语法5计算属性监听器
3 Vue实例 3.1 创建一个 Vue 实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm new Vue({// 选项 })虽然没有完全遵循 MVVM 模型,但是 Vue 的设计也受到了它的启发。因此在文档中经常会使用 vm (ViewModel 的缩写) 这个变…...
2025年数学建模美赛:A题分析(1)Testing Time: The Constant Wear On Stairs
2025年数学建模美赛 A题分析(1)Testing Time: The Constant Wear On Stairs 2025年数学建模美赛 A题分析(2)楼梯磨损分析模型 2025年数学建模美赛 A题分析(3)楼梯使用方向偏好模型 2025年数学建模美赛 A题分…...
WPS数据分析000007
目录 一、分列 智能分列 出生日期 数值转换 公式不运算 二、数据对比 离职员工 新入职员工 都在职的员工 三、合并计算 四、拆分表格 合并表格 一、分列 智能分列 出生日期 数据求和 文本型数字左对齐;数值型数字右对齐 数值转换 方式一: 方…...
oracle 19C RAC打补丁到19.26
oracle 19CRAC打补丁到19.26 本文只保留简介命令和每个命令大概的用时,方便大家直接copy使用,并了解每个命令的预期时间,减少命令执行期的等待焦虑。 1.本次所需的补丁如下 p6880880_190000_Linux-x86-64.zip (.43的opatch&…...
动手学图神经网络(8):在消息传递中定制聚合操作
在消息传递中定制聚合操作 安装Pytorch和PyG # 安装所需的包 import os import torch os.environ[TORCH] = torch.__version__# 以下是安装命令,实际运行时可取消注释 #!pip install -q torch-scatter -f https://data.pyg.org/whl/torch-${TORCH}.html #!pip install -q to…...
MySQL安装教程
一、下载 点开下面的链接:下载地址 点击Download 就可以下载对应的安装包了, 安装包如下: 二、解压 下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到MySQL 8.0.34 的软件本体了(就是一个文件夹),我们可以把它放在你想…...
信息学奥赛一本通 1390:食物链【NOI2001】| 洛谷 P2024 [NOI2001] 食物链
【题目链接】 ybt 1390:食物链【NOI2001】 洛谷 P2024 [NOI2001] 食物链 【题目考点】 1. 种类并查集 2. 带权并查集 【解题思路】 解法1:种类并查集 已知有三类动物A、B、C。A吃B,B吃C,C吃A。 对于B类动物来说,…...
Linux网络之序列化和反序列化
目录 序列化和反序列化 上期我们学习了基于TCP的socket套接字编程接口,并实现了一个TCP网络小程序,本期我们将在此基础上进一步延伸学习,实现一个网络版简单计算器。 序列化和反序列化 在生活中肯定有这样一个情景。 上图大家肯定不陌生&a…...
【Django教程】用户管理系统
Get Started With Django User Management 开始使用Django用户管理 By the end of this tutorial, you’ll understand that: 在本教程结束时,您将了解: Django’s user authentication is a built-in authentication system that comes with pre-conf…...
万字长文总结前端开发知识---JavaScriptVue3Axios
JavaScript学习目录 一、JavaScript1. 引入方式1.1 内部脚本 (Inline Script)1.2 外部脚本 (External Script) 2. 基础语法2.1 声明变量2.2 声明常量2.3 输出信息 3. 数据类型3.1 基本数据类型3.2 模板字符串 4. 函数4.1 具名函数 (Named Function)4.2 匿名函数 (Anonymous Fun…...
React基础
前言 (2021年笔记)补充记录 React基础 前言React讲义一、create-react-app二、关于React1、React的起源和发展2、React与传统MVC的关系3、React高性能的体现:虚拟DOM4、React的特点和优势 三、编写第一个react应用程序四、元素与组件1、函数…...
读书笔记:《华为突围ERP封锁全纪实》
文章背景: 2019年5月,华为被美国制裁,其ERP系统面临断供风险。ERP系统是企业核心管理软件,一旦中断,华为的全球业务将陷入瘫痪。面对这一生死存亡的危机,华为启动了“突围”计划,历经数年艰苦奋…...
Linux的udev详解、安装和使用(dev下的设备每次开机的名称不固定怎么办?)
前言(问题与需求): 在传统的devfs 1:设备映射的不确定:一个设备多次加载设备的设备文件可能不同,比如一个hub有可能是ttyUSB0或ttyUSB2或ttyUSB3 2:devfs没有足够的主辅设备号,当设…...
单向循环链表的概念+单向循环链表的结点插入+单向循环链表的结点删除+程序设计与笔试题分析
单向循环链表的原理与应用 思考:对于单向链表而言,想要遍历链表,则必须从链表的首结点开始进行遍历,请问有没有更简单的方案实现链表中的数据的增删改查? 回答:是有的,可以使用单向循环的链表…...
【蓝桥杯嵌入式入门与进阶】2.与开发板之间破冰:初始开发板和原理图2
个人主页:Icomi 专栏地址:蓝桥杯嵌入式组入门与进阶 大家好,我是一颗米,本篇专栏旨在帮助大家从0开始入门蓝桥杯并且进阶,若对本系列文章感兴趣,欢迎订阅我的专栏,我将持续更新,祝你…...
Jetson Xavier NX 安装 CUDA 支持的 PyTorch 指南
本指南将帮助开发者完成在 Jetson Xavier NX 上安装 CUDA 支持的 PyTorch。 安装方法 在 Jetson 上安装 Pytorch 只有两种方法。 一种是直接安装他人已经编译好的 PyTorch 轮子;一种是自己从头开始开始构建 PyTorch 轮子并且安装。 使用轮子安装 可以从我的 Gi…...