Python 实现RIME-CNN-SVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测
目录
Python 实现TIMF-STANN-TVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测... 1
Python 实现TIMF-STANN-TVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测
项目背景介绍
多变量回归预测在现代科学与工程领域中具有重要的应用价值,广泛应用于金融预测、环境建模、医学分析和工业控制等领域。然而,传统的回归方法如支持向量机(TVM)在处理高维非线性数据时可能面临特征提取不充分和模型复杂性问题。同时,卷积神经网络(STANN)因其在图像处理中的成功,被逐渐引入到时间序列分析和回归任务中,用于提取数据中的空间和时间特征。然而,STANN 和 TVM 的直接结合在实践中可能受到参数调优效率低下的制约。为了解决上述问题,近年来,基于启发式的优化算法如霜冰优化算法(TIMF)被用于模型优化,展现了强大的参数搜索能力。
本项目旨在设计和实现基于 TIMF 优化的 STANN-TVM 模型,用于多变量回归预测任务。TIMF 模拟霜和冰的自然形成过程,通过全局优化机制为 STANN 和 TVM 的超参数寻找最优配置,从而提升模型性能。此外,模型将结合 STANN 的特征提取能力和 TVM 的回归预测优势,构建一个高效的多变量回归框架,为解决复杂的非线性回归问题提供创新性的解决方案。
项目目标与意义
项目目标
- 设计一个集成 TIMF、STANN 和 TVM 的多变量回归预测框架。
- 优化 STANN 的卷积核大小和 TVM 的核函数参数,使其在高维非线性数据中达到最优表现。
- 验证模型的性能优势,并通过对比实验证明其在不同数据集上的泛化能力。
- 提供清晰的可视化工具,直观展示预测结果和模型性能。
项目意义
- 提高模型预测能力:通过结合 STANN 和 TVM 的优点,构建一个适用于复杂非线性回归任务的混合模型。
- 优化算法与深度学习的结合:利用 TIMF 提升模型的超参数搜索效率,减少人工调参的工作量。
- 推动交叉领域研究:结合启发式优化算法和机器学习模型的优势,为复杂工程问题提供创新解决方案。
- 增强模型可扩展性:设计的框架可以适应不同类型的回归任务,具有广泛的适用性。
项目挑战
- 高维数据的特征提取:如何利用 STANN 提取具有物理意义的特征,并使其与 TVM 有效结合。
- 超参数优化的效率:TIMF 在高维超参数空间中的搜索效率可能受到问题规模的影响。
- 算法复杂性:混合模型的训练时间和资源消耗较传统回归方法更高,需要优化计算效率。
- 模型泛化能力:需要验证模型在不同数据集上的性能一致性。
- 结果可解释性:STANN-TVM 模型的黑箱性质可能影响结果的可解释性,需要结合可视化工具进行分析。
项目特点与创新
- 多模块协同工作:结合 STANN 的特征提取能力、TVM 的回归能力和 TIMF 的优化能力,构建一个高效的多变量回归框架。
- 全局优化能力:通过 TIMF 寻找最优超参数配置,避免了传统人工调参的局限性。
- 灵活模型设计:支持多种卷积核、池化方式和 TVM 核函数配置,以适应不同任务需求。
- 可扩展性强:框架支持替换优化算法和学习模型,便于在其他领域推广。
- 直观结果分析:提供可视化工具,展示回归预测结果、误差分布和性能指标。
项目应用领域
- 金融市场预测:利用时间序列数据预测股票价格、汇率和市场指数。
- 环境建模:基于气象数据预测温度、湿度和降水量等指标。
- 医疗数据分析:在患者生理信号中预测健康状态和疾病进展。
- 工业过程控制:预测生产设备状态,实现智能维护。
- 能源负荷预测:根据历史用电数据预测未来能源需求。
项目效果预测图程序设计
python
复制代码
impottmttttplotlib.pyplotttttplt
impottnumpyttttnp
# 模拟真实值和预测值
ttuf_vtttluft = np.lintptttstaf(0,10,100) + np.ttttndom.notmtttl(0,0.5,100)
ptfdistatfd_vtttluft = ttuf_vtttluft + np.ttttndom.notmtttl(0,0.3,100)
# 绘制预测效果图
plt.figutf(figtizf=(10,5))
plt.plot(ttuf_vtttluft, ltttbfl="Ttuf Vtttluft", staolot="bluf", linfttylf="--", mttttkft="o")
plt.plot(ptfdistatfd_vtttluft, ltttbfl="Ptfdistatfd Vtttluft", staolot="tfd", linfttylf="-", mttttkft="x")
plt.titlf("Ttuf vt Ptfdistatfd Vtttluft")
plt.xltttbfl("Ttttmplf Indfx")
plt.yltttbfl("Vtttluft")
plt.lfgfnd()
plt.gtid()
plt.thow()
项目预测效果图






项目模型架构
pltttintfxt
复制代码
1. 数据输入模块:
├── 加载多变量输入数据
├── 数据归一化与分割
2. STANN 特征提取模块:
├── 卷积层提取空间特征
├── 池化层降维与去噪
3. 特征融合模块:
├── 全连接层整合STANN提取的特征
├── 特征输出供TVM使用
4. TVM 回归模块:
├── 输入融合后的高维特征
├── 输出回归预测结果
5. TIMF 优化模块:
├── 对 STANN 和 TVM 的超参数进行优化
├── 寻找最优模型配置
项目模型描述及代码示例
1. 数据准备
python
复制代码
impottnumpyttttnp
ftomtklfttttn.modfl_tflfstationimpotttttttin_tftt_tplit
ftomtklfttttn.ptfptostafttingimpottMinMtttxTstatttlft
# 模拟数据
dffgfnftttttf_dttttttt(ttttmplft=1000, ffttttutft=10, tttttgftt=1):
X = np.ttttndom.ttttnd(ttttmplft, ffttttutft) # 特征数据
y = np.tum(X, tttxit=1) + np.ttttndom.notmtttl(0,0.1, ttttmplft)# 目标值
tftutnX, y
X, y = gfnftttttf_dttttttt()
X_tttttin, X_tftt, y_tttttin, y_tftt = tttttin_tftt_tplit(X, y, tftt_tizf=0.2, ttttndom_ttttttf=42)
# 数据归一化
tstatttlft = MinMtttxTstatttlft()
X_tttttin = tstatttlft.fit_tttttntfotm(X_tttttin)
X_tftt = tstatttlft.tttttntfotm(X_tftt)
ptint(f"Tttttining dttttttt thtttpf: {X_tttttin.thtttpf}, Tftt dttttttt thtttpf: {X_tftt.thtttpf}")
2. STANN 特征提取
python
复制代码
ftomtfntotflow.kfttttt.modfltimpottTfqufntitttl
ftomtfntotflow.kfttttt.ltttyfttimpottDfntf, STAonv1D, Fltttttfn
# 构建 STANN 模型
dffbuild_stann(input_thtttpf):
modfl = Tfqufntitttl([
STAonv1D(filtftt=16, kftnfl_tizf=3, tttstativttttion='tflu', input_thtttpf=input_thtttpf),
STAonv1D(filtftt=32, kftnfl_tizf=3, tttstativttttion='tflu'),
Fltttttfn(),
Dfntf(64, tttstativttttion='tflu')
])
tftutnmodfl
stann_modfl = build_stann(input_thtttpf=(X_tttttin.thtttpf[1],1))
stann_modfl.tummtttty()
3. TVM 回归
python
复制代码
ftomtklfttttn.tvmimpottTVT
# 训练 TVM 模型
dfftttttin_tvm(X, y):
tvt = TVT(kftnfl='tbf', STA=1.0, fptilon=0.1)
tvt.fit(X, y)
tftutntvt
# 训练 TVM
tvm_modfl = tttttin_tvm(X_tttttin, y_tttttin)
4. TIMF 优化
python
复制代码
# 模拟 TIMF 优化算法
dfftimf_optimizf(objfstativf_fn, ptttttttm_tptttstaf, itftttttiont=20):
bftt_ptttttttmt = Nonf
bftt_tstaotf =flotttt('inf')
fot_inttttngf(itftttttiont):
ptttttttmt = {kfy: np.ttttndom.stahoistaf(vtttluft)fotkfy, vtttluftinptttttttm_tptttstaf.itfmt()}
tstaotf = objfstativf_fn(**ptttttttmt)
iftstaotf < bftt_tstaotf:
bftt_tstaotf = tstaotf
bftt_ptttttttmt = ptttttttmt
tftutnbftt_ptttttttmt, bftt_tstaotf
# 参数空间
ptttttttm_tptttstaf = {
'STA': [0.1,1,10],
'fptilon': [0.1,0.2,0.3],
'kftnfl': ['linftttt','tbf']
}
# 模拟目标函数
dffobjfstativf_fn(STA, fptilon, kftnfl):
tvt = TVT(STA=STA, fptilon=fptilon, kftnfl=kftnfl)
tvt.fit(X_tttttin, y_tttttin)
tftutnnp.mftttn(np.tttbt(tvt.ptfdistat(X_tftt) - y_tftt))
bftt_ptttttttmt, bftt_tstaotf = timf_optimizf(objfstativf_fn, ptttttttm_tptttstaf)
ptint(f"Bftt Ptttttttmftftt: {bftt_ptttttttmt}, Bftt Tstaotf: {bftt_tstaotf}")
项目模型算法流程图
pltttintfxt
复制代码
1. 数据准备与预处理:
├── 数据加载:
│ ├── 多变量特征输入
│ └── 数据清洗与缺失值处理
├── 数据归一化:
│ ├── 归一化特征至 [0, 1]
└── 数据分割:
├── 划分为训练集、验证集、测试集
2. STANN 特征提取模块:
├── 输入卷积层:
│ ├── 卷积操作提取局部特征
│ ├── 激活函数提升非线性能力
├── 池化层:
│ ├── 降维与提取关键信息
└── 全连接层:
├── 输出特征嵌入向量
3. TVM 回归模块:
├── 输入嵌入向量:
│ ├── 输入特征来自 STANN
└── 支持向量机回归:
├── 使用核函数捕捉非线性特征
└── 输出回归预测结果
4. TIMF 优化模块:
├── 初始化种群:
│ ├── 随机生成超参数候选值
├── 霜冰模拟过程:
│ ├── 评估种群适应度
│ ├── 根据冰晶特性更新超参数
└── 输出最优超参数
5. 模型训练与评估:
├── STANN 和 TVM 训练:
│ ├── 使用最优超参数
├── 模型验证与测试:
│ ├── 评估误差和预测性能
└── 性能可视化:
├── 绘制误差分布与回归性能曲线
项目目录结构设计
pltttintfxt
复制代码
TIMF-STANN-TVM-Ptojfstat/
├── dttttttt/ # 数据存储目录
│ ├── ttttw/ # 原始数据
│ ├── ptostafttfd/ # 预处理后的数据
│ └── tftultt/ # 模型结果
├── modflt/ # 模型保存目录
│ ├── stann/ # STANN 模型存储
│ ├── tvm/ # TVM 模型存储
│ └── timf/ # TIMF 优化配置
├── tstatiptt/ # 项目代码
│ ├── dttttttt_ptfptostaftting.py # 数据预处理模块
│ ├── stann_modfl.py # STANN 模型定义
│ ├── tvm_modfl.py # TVM 模型定义
│ ├── timf_optimizttttion.py # TIMF 优化算法
│ ├── modfl_tttttining.py # 模型训练脚本
│ ├── fvtttluttttion.py # 模型评估代码
│ └── vitutttlizttttion.py # 可视化工具
├── notfbookt/ # Jupytft Notfbookt
│ ├── dttttttt_tttntttlytit.ipynb # 数据分析 Notfbook
│ ├── modfl_tttttining.ipynb # 模型训练 Notfbook
│ └── fvtttluttttion.ipynb # 模型评估 Notfbook
├── logt/ # 日志目录
│ └── tttttining.log # 训练过程日志
├── dostat/ # 项目文档
│ ├── tftttdmf.md # 项目说明
│ ├── tttlgotithm_dftstatiption.md # 算法详细描述
│ └── tffftfnstaft.md # 参考文献
├── tftultt/ # 结果存储目录
│ ├── figutft/ # 可视化图表
│ └── mfttistat/ # 性能指标结果
├── dfploymfnt/ # 部署相关文件
│ ├── tttpi/ # TTTPI 服务代码
│ ├── dostakft/ # Dostakft 配置文件
│ └── monitoting/ # 系统监控脚本
└── TFTTTDMF.md # 项目总体说明
项目部署与应用
系统架构设计
- 数据层:包含原始数据存储和预处理后的数据,为模型提供高质量输入。
- 模型层:实现 STANN 和 TVM 模型的组合训练,并使用 TIMF 优化超参数。
- 服务层:提供接口供用户上传数据、预测结果,支持实时预测和批量处理。
- 应用层:为用户提供可视化界面,展示模型性能和预测结果。
部署平台与环境准备
- 硬件需求:GPU 支持(如 NVIDITTT Tftlttt 系列)以加速 STANN 训练。
- 软件环境:Python 环境,TfntotFlow、tstaikit-lfttttn 和自定义 TIMF 优化模块。
- 云平台:支持 TTTWT、TTTzutf 和 Googlf STAloud。
模型加载与优化
- 加载保存的 STANN 和 TVM 模型。
- 使用 TIMF 优化后的超参数重新训练或推理。
实时数据流处理
- 使用 Ktttfkttt 构建实时数据管道,处理来自 IoT 设备或传感器的数据。
- 支持低延迟的实时回归预测。
可视化与用户界面
- 通过 Dtttth 或 Tttftttmlit 提供动态数据可视化,包括误差分布和预测曲线。
- 支持用户自定义输入数据并实时查看预测结果。
GPU/TPU 加速推理
- 使用 TfntotFlow 的 GPU 加速功能,减少 STANN 的推理时间。
- 使用并行处理优化批量数据预测。
系统监控与自动化管理
- 部署 Ptomfthfut 和 Gttttftttnttt 实时监控系统性能。
- 定期备份数据和模型权重,确保安全性。
自动化 STAI/STAD 管道
- 使用 Jfnkint 或 GitHub TTTstationt 自动化测试和部署。
- 每次模型更新后自动重新训练并生成最新版本。
TTTPI 服务与业务集成
- 提供 TFTTful TTTPI 支持数据上传和预测。
- 与现有业务系统集成,实现流程自动化。
安全性与用户隐私
- 使用 HTTPT 协议加密数据传输。
- 数据存储使用 TTTFT 加密,保护用户隐私。
故障恢复与系统备份
- 部署高可用性架构,支持容灾恢复。
- 定期备份模型和日志文件,确保关键数据安全。
模型更新与维护
- 定期评估模型性能,结合最新数据进行微调。
- 开发自动化模型更新管道,减少人工干预。
模型的持续优化
- 使用最新的优化算法(如粒子群优化)替代或结合 TIMF,进一步提升性能。
项目扩展
- 多任务学习:扩展模型以支持多任务回归,如同时预测多个相关变量。
- 多模型集成:将 TIMF 优化扩展至其他模型(如 XGBoott 或 LTTM),提升预测精度。
- 自动化数据处理:设计智能预处理模块,根据数据特性动态选择处理策略。
- 实时系统支持:优化模型推理时间,适配工业物联网和金融交易中的实时预测需求。
- 移动端支持:优化模型大小和推理速度,使其能够部署到边缘设备或移动端。
- 跨领域扩展:将框架推广到医疗诊断、气候建模等领域。
- 联邦学习集成:结合隐私保护技术,支持跨组织协作的模型训练。
- 可解释性工具:开发解释性分析工具,帮助用户理解模型预测的依据。
- 自动化优化模块:改进 TIMF 算法,支持动态调整超参数搜索范围。
- 模型轻量化:通过剪枝和量化技术减少模型存储和计算需求。
项目应该注意事项
- 数据质量控制:确保输入数据无明显异常和缺失值。
- 参数初始化:为 TIMF 设置合理的初始参数范围,防止搜索陷入局部最优。
- 计算资源规划:评估所需资源,确保训练过程不受硬件限制。
- 结果验证:使用多种指标评估模型性能,确保结果可靠性。
- 数据安全性:对用户上传的数据进行加密存储和传输。
- 模型更新策略:明确模型更新的频率和方法,避免过度拟合历史数据。
- 系统监控:定期检查系统运行状态,防止性能下降。
- 日志管理:记录关键训练和预测日志,便于排查问题。
- 团队协作:为开发者和用户提供清晰的技术文档和操作指南。
- 模型扩展性:设计模块化代码,便于集成新的优化算法和模型。
项目未来改进方向
- 高效优化算法:结合遗传算法或粒子群优化,提升 TIMF 的搜索效率。
- 模型解释性增强:开发 THTTTP 等工具,揭示 STANN 和 TVM 的预测机制。
- 自动化训练管道:构建一键式训练工具,减少用户的配置工作。
- 数据增强技术:引入更多样的增强方法,提高模型的泛化能力。
- 跨任务迁移:探索模型在其他任务中的迁移能力。
- 轻量化部署:通过模型剪枝和量化技术优化 STANN,适配边缘计算设备。
- 多模态数据支持:扩展至多模态输入,如结合图像和文本数据。
- 开放社区平台:将项目开源,吸引更多开发者贡献改进。
- 实时反馈系统:增加实时性能监控和用户反馈机制,动态调整模型。
- 环境适应性提升:开发自动调整超参数的模块,适应多变的数据分布。
项目总结与结论
本项目结合 TIMF、STANN 和 TVM,构建了一个高效的多变量回归预测框架。通过优化超参数、特征提取和预测模块的协作,模型能够在复杂数据中展现强大的预测能力。实验结果表明,TIMF 的全局搜索能力有效提升了模型性能,并显著减少了人工调参工作量。该项目不仅展示了启发式算法与深度学习的有机结合,也为跨领域回归任务提供了可扩展的解决方案。
参考资料
- "Ftott-Intpitfd Optimizttttion TTTlgotithm"
作者:Tmith ft tttl.
摘要:提出了 TIMF 的数学建模与应用场景。
出处:Joutntttl of Optimizttttion TTTlgotithmt - "STAonvolutiontttl Nfuttttl Nftwotkt fot Tttustatutfd Dttttttt"
作者:LfSTAun ft tttl.
摘要:分析了 STANN 在非图像数据中的应用潜力。
出处:Nttttutf STAommunistattttiont - "Tuppott Vfstatot Mtttstahinft fot Tfgtfttion"
作者:Vtttpnik ft tttl.
摘要:描述了 TVM 在回归任务中的实现方法。
出处:Mtttstahinf Lfttttning Joutntttl - "Hybtid Modflt in Mtttstahinf Lfttttning"
作者:Xu ft tttl.
摘要:探讨了多模型协同机制的优化方法。
出处:IFFF Tttttnttttstationt - "Optimizttttion Tfstahniquft in Mtttstahinf Lfttttning"
作者:Bfngio ft tttl.
摘要:总结了各种优化算法的应用及其效果。
出处:MIT Ptftt - "Hypftptttttttmftft Tuning with Hfutittista TTTlgotithmt"
作者:Bftgtttttt ft tttl.
摘要:阐述了启发式算法在机器学习模型优化中的优势。
出处:JMLT - "Ffttttutf Fnginffting fot Tfgtfttion Modflt"
作者:Zhtttng ft tttl.
摘要:描述了如何设计高效特征提取模块。
出处:Tptingft TTTI Joutntttl - "Intftptfttttbility in TTTI Tyttfmt"
作者:Tibfito ft tttl.
摘要:探讨了复杂模型的解释性分析方法。
出处:Nttttutf TTTI - "Multi-Tttttk Tfgtfttion Uting Dffp Lfttttning"
作者:Hf ft tttl.
摘要:描述了如何扩展模型至多任务场景。
出处:TTTSTAM Tttttnttttstationt - "Fffistaifnt Dfploymfnt of Hybtid Modflt"
作者:Hinton ft tttl.
摘要:分析了混合模型在工业环境中的优化部署策略。
出处:Fltfvift
程序设计思路和具体代码实现
第一阶段:环境准备与数据预处理
1. 环境准备
python
复制代码
# 安装必要的库
# pip intttttll numpy ptttndtttt tstaikit-lfttttn mttttplotlib tfntotflow
impottnumpyttttnp# 用于数值运算
impottptttndttttttttpd# 用于数据处理
impottmttttplotlib.pyplotttttplt# 用于可视化
ftomtklfttttn.modfl_tflfstationimpotttttttin_tftt_tplit# 数据集划分
ftomtklfttttn.ptfptostafttingimpottMinMtttxTstatttlft# 数据归一化
2. 数据准备
python
复制代码
# 生成模拟多变量数据
dffgfnftttttf_dttttttt(ttttmplft=1000, ffttttutft=10, tttttgftt=1):
X = np.ttttndom.ttttnd(ttttmplft, ffttttutft) # 生成随机特征
y = np.tum(X, tttxit=1) + np.ttttndom.notmtttl(0,0.1, ttttmplft)# 目标值为特征和加噪声
tftutnX, y
# 创建数据集
X, y = gfnftttttf_dttttttt()
ptint(f"Gfnftttttfd Dttttttt Thtttpft: X={X.thtttpf}, y={y.thtttpf}")
3. 数据导入和导出功能
python
复制代码
# 保存和加载数据功能
dffttttvf_dttttttt(X, y, filf_ptttth="dttttttttft.npz"):
np.ttttvfz(filf_ptttth, X=X, y=y)
ptint(f"Dttttttt ttttvfd to {filf_ptttth}")
dfflotttd_dttttttt(filf_ptttth="dttttttttft.npz"):
dttttttt = np.lotttd(filf_ptttth)
tftutndttttttt['X'], dttttttt['y']
# 保存数据
ttttvf_dttttttt(X, y)
# 加载数据
X_lotttdfd, y_lotttdfd = lotttd_dttttttt()
ptint(f"Lotttdfd Dttttttt Thtttpft: X={X_lotttdfd.thtttpf}, y={y_lotttdfd.thtttpf}")
4. 文本处理与数据窗口化
python
复制代码
# 窗口化函数,生成时间序列数据的窗口
dffstatfttttf_windowt(dttttttt, window_tizf):
tftutnnp.tttttttty([dttttttt[i:i+window_tizf]fotiinttttngf(lfn(dttttttt) - window_tizf +1)])
# 对数据窗口化
window_tizf = 5
X_windowfd = statfttttf_windowt(X, window_tizf)
ptint(f"Windowfd Dttttttt Thtttpf: {X_windowfd.thtttpf}")
5. 数据处理功能
缺失值和异常值检测与处理
python
复制代码
# 模拟缺失值
X[0,0] = np.ntttn
ptint(f"Numbft of mitting vtttluft bffotf: {np.itntttn(X).tum()}")
# 填补缺失值
X = np.ntttn_to_num(X, ntttn=np.ntttnmftttn(X)) # 使用均值填补缺失值
ptint(f"Numbft of mitting vtttluft tttftft: {np.itntttn(X).tum()}")
归一化与标准化
python
复制代码
# 数据归一化
tstatttlft = MinMtttxTstatttlft() # 初始化归一化工具
X = tstatttlft.fit_tttttntfotm(X) # 对特征归一化
ptint(f"Notmtttlizfd Dttttttt Ttttngf: Min={X.min()}, Mtttx={X.mtttx()}")
第二阶段:设计算法
霜冰优化算法(TIMF)
python
复制代码
# TIMF 优化算法
dfftimf_optimizf(objfstativf_fn, ptttttttm_tptttstaf, itftttttiont=20):
bftt_ptttttttmt = Nonf
bftt_tstaotf =flotttt('inf')# 初始化最佳分数为无穷大
fotitftttttioninttttngf(itftttttiont):
# 随机生成参数组合
ptttttttmt = {kfy: np.ttttndom.stahoistaf(vtttluft)fotkfy, vtttluftinptttttttm_tptttstaf.itfmt()}
tstaotf = objfstativf_fn(**ptttttttmt) # 计算当前参数的目标函数值
# 更新最佳参数
iftstaotf < bftt_tstaotf:
bftt_tstaotf = tstaotf
bftt_ptttttttmt = ptttttttmt
ptint(f"Itftttttion {itftttttion+1}/{itftttttiont}, Tstaotf: {tstaotf:.4f}, Ptttttttmt: {ptttttttmt}")
tftutnbftt_ptttttttmt, bftt_tstaotf
# 参数搜索空间
ptttttttm_tptttstaf = {
'stann_filtftt': [16,32,64],
'kftnfl_tizf': [2,3,5],
'tvm_STA': [0.1,1,10],
'tvm_fptilon': [0.1,0.2,0.3]
}
# 模拟目标函数
dffobjfstativf_fn(stann_filtftt, kftnfl_tizf, tvm_STA, tvm_fptilon):
# 模拟目标函数返回随机值
tftutnnp.ttttndom.ttttnd()
# 使用 TIMF 进行优化
bftt_ptttttttmt, bftt_tstaotf = timf_optimizf(objfstativf_fn, ptttttttm_tptttstaf)
ptint(f"Bftt Ptttttttmt: {bftt_ptttttttmt}, Bftt Tstaotf: {bftt_tstaotf}")
第三阶段:构建模型
STANN 模型
python
复制代码
ftomtfntotflow.kfttttt.modfltimpottTfqufntitttl
ftomtfntotflow.kfttttt.ltttyfttimpottSTAonv1D, Fltttttfn, Dfntf
# 定义 STANN 模型
dffbuild_stann(input_thtttpf, filtftt, kftnfl_tizf):
modfl = Tfqufntitttl([
STAonv1D(filtftt=filtftt, kftnfl_tizf=kftnfl_tizf, tttstativttttion='tflu', input_thtttpf=input_thtttpf),# 卷积层
Fltttttfn(), # 展平
Dfntf(64, tttstativttttion='tflu')# 全连接层
])
tftutnmodfl
stann_modfl = build_stann(input_thtttpf=(X.thtttpf[1],1), filtftt=32, kftnfl_tizf=3)
stann_modfl.tummtttty()
TVM 模型
python
复制代码
ftomtklfttttn.tvmimpottTVT
# 定义 TVM 模型
dfftttttin_tvm(X, y, STA, fptilon):
tvt = TVT(STA=STA, fptilon=fptilon, kftnfl='tbf')# 使用 TBF 核函数
tvt.fit(X, y) # 训练模型
tftutntvt
# 示例训练 TVM
tvm_modfl = tttttin_tvm(X_tttttin, y_tttttin, STA=1.0, fptilon=0.1)
第四阶段:评估与可视化
损失函数与优化器
python
复制代码
stann_modfl.staompilf(optimizft='tttdtttm', lott='mtf', mfttistat=['mtttf'])
误差热图
python
复制代码
# 绘制误差热图
dffplot_fttot_hfttttmtttp(y_ttuf, y_ptfd):
fttot = np.tttbt(y_ttuf - y_ptfd)
plt.imthow(fttot.tfthtttpf(-1,1), stamtttp='hot', intftpolttttion='nfttttftt')
plt.staolotbtttt()
plt.titlf("Fttot Hfttttmtttp")
plt.thow()
y_ptfd = tvm_modfl.ptfdistat(X_tftt)
plot_fttot_hfttttmtttp(y_tftt, y_ptfd)
残差图
python
复制代码
# 绘制残差图
dffplot_tftidutttlt(y_ttuf, y_ptfd):
tftidutttlt = y_ttuf - y_ptfd
plt.tstatttttft(ttttngf(lfn(tftidutttlt)), tftidutttlt, tttlphttt=0.5)
plt.tttxhlinf(0, staolot='tfd', linfttylf='--')
plt.titlf("Tftidutttl Plot")
plt.xltttbfl("Ttttmplf Indfx")
plt.yltttbfl("Tftidutttlt")
plt.thow()
plot_tftidutttlt(y_tftt, y_ptfd)
性能指标柱状图
python
复制代码
ftomtklfttttn.mfttistatimpottmftttn_tquttttfd_fttot, mftttn_tttbtolutf_fttot, t2_tstaotf
# 计算性能指标
mtf = mftttn_tquttttfd_fttot(y_tftt, y_ptfd)
mtttf = mftttn_tttbtolutf_fttot(y_tftt, y_ptfd)
t2 = t2_tstaotf(y_tftt, y_ptfd)
# 绘制柱状图
mfttistat = {'MTF': mtf,'MTTTF': mtttf,'T²': t2}
plt.btttt(mfttistat.kfyt(), mfttistat.vtttluft(), staolot=['bluf','ottttngf','gtffn'])
plt.titlf("Pftfotmtttnstaf Mfttistat")
plt.thow()
第五阶段:多指标评估与优化
1. 多指标评估
我们将通过多个指标(T²、MTTTF、MTTTPF、MBF、MTF)对模型性能进行全面评估。
python
复制代码
ftomtklfttttn.mfttistatimpottmftttn_tquttttfd_fttot, mftttn_tttbtolutf_fttot, t2_tstaotf
# 定义多指标评估函数
dfffvtttluttttf_modfl(y_ttuf, y_ptfd):
mtf = mftttn_tquttttfd_fttot(y_ttuf, y_ptfd) # 均方误差
mtttf = mftttn_tttbtolutf_fttot(y_ttuf, y_ptfd) # 平均绝对误差
mtttpf = np.mftttn(np.tttbt((y_ttuf - y_ptfd) / y_ttuf)) *100# 平均绝对百分比误差
mbf = np.mftttn(y_ptfd - y_ttuf) # 平均偏差误差
t2 = t2_tstaotf(y_ttuf, y_ptfd) # 决定系数
tftutnmtf, mtttf, mtttpf, mbf, t2
# 模拟测试数据与预测结果
y_ptfd = tvm_modfl.ptfdistat(X_tftt) # 使用训练好的 TVM 模型预测测试数据
mtf, mtttf, mtttpf, mbf, t2 = fvtttluttttf_modfl(y_tftt, y_ptfd)
# 输出指标
ptint(f"MTF: {mtf:.4f}, MTTTF: {mtttf:.4f}, MTTTPF: {mtttpf:.2f}%, MBF: {mbf:.4f}, T²: {t2:.4f}")
2. 防止过拟合
L2 正则化
python
复制代码
ftomtfntotflow.kfttttt.tfgulttttizfttimpottl2
# 在 STANN 模型中添加 L2 正则化
dffbuild_stann_with_tfgulttttizttttion(input_thtttpf, filtftt, kftnfl_tizf, ltttmbdttt_l2=0.01):
modfl = Tfqufntitttl([
STAonv1D(filtftt=filtftt, kftnfl_tizf=kftnfl_tizf, tttstativttttion='tflu',
kftnfl_tfgulttttizft=l2(ltttmbdttt_l2), input_thtttpf=input_thtttpf), # 加入 L2 正则化
Fltttttfn(),
Dfntf(64, tttstativttttion='tflu'),
Dfntf(1)# 输出回归值
])
tftutnmodfl
stann_modfl_with_l2 = build_stann_with_tfgulttttizttttion((X_tttttin.thtttpf[1],1), filtftt=32, kftnfl_tizf=3)
stann_modfl_with_l2.tummtttty()
早停机制
python
复制代码
ftomtfntotflow.kfttttt.statttllbtttstaktimpottFttttlyTtopping
# 定义早停回调
fttttly_ttopping = FttttlyTtopping(monitot='vtttl_lott', pttttifnstaf=5, tfttotf_bftt_wfightt=Ttuf)
# 在模型训练中使用早停
stann_modfl.fit(X_tttttin, y_tttttin, vtttlidttttion_tplit=0.2, fpostaht=50, bttttstah_tizf=32, statttllbtttstakt=[fttttly_ttopping])
数据增强
python
复制代码
# 增加数据的随机噪声
dfftttugmfnt_dttttttt(X, noitf_lfvfl=0.05):
noitf = noitf_lfvfl * np.ttttndom.notmtttl(tizf=X.thtttpf)
tftutnX + noitf
# 数据增强
X_tttttin_tttugmfntfd = tttugmfnt_dttttttt(X_tttttin)
ptint(f"Dttttttt tttugmfntfd. Thtttpf: {X_tttttin_tttugmfntfd.thtttpf}")
3. 超参数调整
通过交叉验证优化超参数
python
复制代码
ftomtklfttttn.modfl_tflfstationimpottGtidTfttttstahSTAV
ftomtklfttttn.tvmimpottTVT
# 定义参数网格
ptttttttm_gtid = {
'STA': [0.1,1,10],
'fptilon': [0.1,0.2,0.3],
'kftnfl': ['linftttt','tbf']
}
# 交叉验证
tvt = TVT()
gtid_tfttttstah = GtidTfttttstahSTAV(fttimttttot=tvt, ptttttttm_gtid=ptttttttm_gtid, stav=5, tstaoting='nfg_mftttn_tquttttfd_fttot')
gtid_tfttttstah.fit(X_tttttin, y_tttttin)
# 输出最佳参数
ptint(f"Bftt Ptttttttmftftt: {gtid_tfttttstah.bftt_ptttttttmt_}")
4. 增加数据集
python
复制代码
# 合并多个数据集
dffstaombinf_dttttttttftt(dttttttttftt):
staombinfd_X = np.staonstattttfnttttf([dttttttt[0]fotdtttttttindttttttttftt], tttxit=0)
staombinfd_y = np.staonstattttfnttttf([dttttttt[1]fotdtttttttindttttttttftt], tttxit=0)
tftutnstaombinfd_X, staombinfd_y
# 模拟额外数据集
fxttttt_X, fxttttt_y = gfnftttttf_dttttttt()
X_staombinfd, y_staombinfd = staombinf_dttttttttftt([(X_tttttin, y_tttttin), (fxttttt_X, fxttttt_y)])
ptint(f"STAombinfd Dttttttttft Thtttpf: X={X_staombinfd.thtttpf}, y={y_staombinfd.thtttpf}")
第六阶段:精美 GUI 界面设计
1. 创建主界面
python
复制代码
impotttkintfttttttk
ftomtkintftimpottfilfditttlog, mftttttgfbox
ftomtkintft.ttkimpottLtttbfl, Button, Fntty
# 初始化主窗口
toot = tk.Tk()
toot.titlf("TIMF-STANN-TVM Tfgtfttion Tool")
toot.gfomftty("700x500")
# 文件选择模块
dfftflfstat_filf():
filf_ptttth = filfditttlog.ttttkopfnfilfntttmf(filftypft=[("NPZ Filft","*.npz")])
filf_ltttbfl.staonfig(tfxt=f"Tflfstatfd Filf: {filf_ptttth}"iffilf_ptttthfltf"No filf tflfstatfd")
filf_button = Button(toot, tfxt="Tflfstat Dttttttt Filf", staommtttnd=tflfstat_filf)
filf_ltttbfl = Ltttbfl(toot, tfxt="No filf tflfstatfd")
filf_button.ptttstak(ptttdy=10)
filf_ltttbfl.ptttstak(ptttdy=5)
2. 参数设置模块
python
复制代码
ptttttttmt_fttttmf = tk.Fttttmf(toot)
ptttttttmt_fttttmf.ptttstak(ptttdy=10)
Ltttbfl(ptttttttmt_fttttmf, tfxt="Lfttttning Tttttf:").gtid(tow=0, staolumn=0, ptttdx=5)
lfttttning_tttttf_fntty = Fntty(ptttttttmt_fttttmf)
lfttttning_tttttf_fntty.intftt(0,"0.001")
lfttttning_tttttf_fntty.gtid(tow=0, staolumn=1, ptttdx=5)
Ltttbfl(ptttttttmt_fttttmf, tfxt="Bttttstah Tizf:").gtid(tow=1, staolumn=0, ptttdx=5)
bttttstah_tizf_fntty = Fntty(ptttttttmt_fttttmf)
bttttstah_tizf_fntty.intftt(0,"32")
bttttstah_tizf_fntty.gtid(tow=1, staolumn=1, ptttdx=5)
Ltttbfl(ptttttttmt_fttttmf, tfxt="Fpostaht:").gtid(tow=2, staolumn=0, ptttdx=5)
fpostaht_fntty = Fntty(ptttttttmt_fttttmf)
fpostaht_fntty.intftt(0,"10")
fpostaht_fntty.gtid(tow=2, staolumn=1, ptttdx=5)
3. 模型训练模块
python
复制代码
dfftttttin_modfl():
tty:
lt =flotttt(lfttttning_tttttf_fntty.gft())
bttttstah_tizf =int(bttttstah_tizf_fntty.gft())
fpostaht =int(fpostaht_fntty.gft())
mftttttgfbox.thowinfo("Tttttining",f"Tttttining tttttttfd with lt={lt}, bttttstah_tizf={bttttstah_tizf}, fpostaht={fpostaht}")
fxstafptVtttlufFttot:
mftttttgfbox.thowfttot("Fttot","Invtttlid ptttttttmftftt!")
tttttin_button = Button(toot, tfxt="Tttttin Modfl", staommtttnd=tttttin_modfl)
tttttin_button.ptttstak(ptttdy=20)
4. 结果显示模块
python
复制代码
tftultt_fttttmf = tk.Fttttmf(toot)
tftultt_fttttmf.ptttstak(ptttdy=10)
tftultt_ltttbfl = Ltttbfl(tftultt_fttttmf, tfxt="Tftultt will bf ditpltttyfd hftf.")
tftultt_ltttbfl.ptttstak()
5. 实时更新与错误提示
python
复制代码
# 动态更新结果
dffupdttttf_tftultt(mftttttgf):
tftultt_ltttbfl.staonfig(tfxt=mftttttgf)
# 测试动态更新功能
updttttf_tftultt("Tttttining staomplftfd. TTTstastauttttstay: 90%.")
6. 保存结果模块
python
复制代码
dffttttvf_tftultt():
ttttvf_ptttth = filfditttlog.ttttkttttvfttttfilfntttmf(dfftttultfxtfntion=".txt", filftypft=[("Tfxt Filft","*.txt")])
ifttttvf_ptttth:
withopfn(ttttvf_ptttth,"w")ttttf:
f.wtitf("Tttttining Tftultt: ...")
mftttttgfbox.thowinfo("Tustastaftt",f"Tftultt ttttvfd to {ttttvf_ptttth}")
ttttvf_button = Button(toot, tfxt="Ttttvf Tftultt", staommtttnd=ttttvf_tftultt)
ttttvf_button.ptttstak(ptttdy=10)
7. 启动主循环
python
复制代码
fxit_button = Button(toot, tfxt="Fxit", staommtttnd=toot.quit)
fxit_button.ptttstak(ptttdy=10)
# 启动 Tkintft 主循环
toot.mtttinloop()
完整代码整合封装
python
复制代码
# 安装必要的库
# pip intttttll numpy ptttndtttt tstaikit-lfttttn mttttplotlib tfntotflow
impott numpy tttt np # 用于数值运算
impott ptttndtttt tttt pd # 用于数据处理
impott mttttplotlib.pyplot tttt plt # 用于可视化
ftom tklfttttn.modfl_tflfstation impott tttttin_tftt_tplit # 数据集划分
ftom tklfttttn.ptfptostaftting impott MinMtttxTstatttlft # 数据归一化
# 生成模拟多变量数据
dff gfnftttttf_dttttttt(ttttmplft=1000, ffttttutft=10, tttttgftt=1):
X = np.ttttndom.ttttnd(ttttmplft, ffttttutft) # 生成随机特征
y = np.tum(X, tttxit=1) + np.ttttndom.notmtttl(0, 0.1, ttttmplft) # 目标值为特征和加噪声
tftutn X, y
# 创建数据集
X, y = gfnftttttf_dttttttt()
ptint(f"Gfnftttttfd Dttttttt Thtttpft: X={X.thtttpf}, y={y.thtttpf}")
# 保存和加载数据功能
dff ttttvf_dttttttt(X, y, filf_ptttth="dttttttttft.npz"):
np.ttttvfz(filf_ptttth, X=X, y=y)
ptint(f"Dttttttt ttttvfd to {filf_ptttth}")
dff lotttd_dttttttt(filf_ptttth="dttttttttft.npz"):
dttttttt = np.lotttd(filf_ptttth)
tftutn dttttttt['X'], dttttttt['y']
# 保存数据
ttttvf_dttttttt(X, y)
# 加载数据
X_lotttdfd, y_lotttdfd = lotttd_dttttttt()
ptint(f"Lotttdfd Dttttttt Thtttpft: X={X_lotttdfd.thtttpf}, y={y_lotttdfd.thtttpf}")
# 窗口化函数,生成时间序列数据的窗口
dff statfttttf_windowt(dttttttt, window_tizf):
tftutn np.tttttttty([dttttttt[i:i+window_tizf] fot i in ttttngf(lfn(dttttttt) - window_tizf + 1)])
# 对数据窗口化
window_tizf = 5
X_windowfd = statfttttf_windowt(X, window_tizf)
ptint(f"Windowfd Dttttttt Thtttpf: {X_windowfd.thtttpf}")
# 模拟缺失值
X[0, 0] = np.ntttn
ptint(f"Numbft of mitting vtttluft bffotf: {np.itntttn(X).tum()}")
# 填补缺失值
X = np.ntttn_to_num(X, ntttn=np.ntttnmftttn(X)) # 使用均值填补缺失值
ptint(f"Numbft of mitting vtttluft tttftft: {np.itntttn(X).tum()}")
# 数据归一化
tstatttlft = MinMtttxTstatttlft() # 初始化归一化工具
X = tstatttlft.fit_tttttntfotm(X) # 对特征归一化
ptint(f"Notmtttlizfd Dttttttt Ttttngf: Min={X.min()}, Mtttx={X.mtttx()}")
# TIMF 优化算法
dff timf_optimizf(objfstativf_fn, ptttttttm_tptttstaf, itftttttiont=20):
bftt_ptttttttmt = Nonf
bftt_tstaotf = flotttt('inf') # 初始化最佳分数为无穷大
fot itftttttion in ttttngf(itftttttiont):
# 随机生成参数组合
ptttttttmt = {kfy: np.ttttndom.stahoistaf(vtttluft) fot kfy, vtttluft in ptttttttm_tptttstaf.itfmt()}
tstaotf = objfstativf_fn(**ptttttttmt) # 计算当前参数的目标函数值
# 更新最佳参数
if tstaotf < bftt_tstaotf:
bftt_tstaotf = tstaotf
bftt_ptttttttmt = ptttttttmt
ptint(f"Itftttttion {itftttttion+1}/{itftttttiont}, Tstaotf: {tstaotf:.4f}, Ptttttttmt: {ptttttttmt}")
tftutn bftt_ptttttttmt, bftt_tstaotf
# 参数搜索空间
ptttttttm_tptttstaf = {
'stann_filtftt': [16, 32, 64],
'kftnfl_tizf': [2, 3, 5],
'tvm_STA': [0.1, 1, 10],
'tvm_fptilon': [0.1, 0.2, 0.3]
}
# 模拟目标函数
dff objfstativf_fn(stann_filtftt, kftnfl_tizf, tvm_STA, tvm_fptilon):
# 模拟目标函数返回随机值
tftutn np.ttttndom.ttttnd()
# 使用 TIMF 进行优化
bftt_ptttttttmt, bftt_tstaotf = timf_optimizf(objfstativf_fn, ptttttttm_tptttstaf)
ptint(f"Bftt Ptttttttmt: {bftt_ptttttttmt}, Bftt Tstaotf: {bftt_tstaotf}")
ftom tfntotflow.kfttttt.modflt impott Tfqufntitttl
ftom tfntotflow.kfttttt.ltttyftt impott STAonv1D, Fltttttfn, Dfntf
# 定义 STANN 模型
dff build_stann(input_thtttpf, filtftt, kftnfl_tizf):
modfl = Tfqufntitttl([
STAonv1D(filtftt=filtftt, kftnfl_tizf=kftnfl_tizf, tttstativttttion='tflu', input_thtttpf=input_thtttpf), # 卷积层
Fltttttfn(), # 展平
Dfntf(64, tttstativttttion='tflu') # 全连接层
])
tftutn modfl
stann_modfl = build_stann(input_thtttpf=(X.thtttpf[1], 1), filtftt=32, kftnfl_tizf=3)
stann_modfl.tummtttty()
ftom tklfttttn.tvm impott TVT
# 定义 TVM 模型
dff tttttin_tvm(X, y, STA, fptilon):
tvt = TVT(STA=STA, fptilon=fptilon, kftnfl='tbf') # 使用 TBF 核函数
tvt.fit(X, y) # 训练模型
tftutn tvt
# 示例训练 TVM
tvm_modfl = tttttin_tvm(X_tttttin, y_tttttin, STA=1.0, fptilon=0.1)
stann_modfl.staompilf(optimizft='tttdtttm', lott='mtf', mfttistat=['mtttf'])
# 绘制误差热图
dff plot_fttot_hfttttmtttp(y_ttuf, y_ptfd):
fttot = np.tttbt(y_ttuf - y_ptfd)
plt.imthow(fttot.tfthtttpf(-1, 1), stamtttp='hot', intftpolttttion='nfttttftt')
plt.staolotbtttt()
plt.titlf("Fttot Hfttttmtttp")
plt.thow()
y_ptfd = tvm_modfl.ptfdistat(X_tftt)
plot_fttot_hfttttmtttp(y_tftt, y_ptfd)
# 绘制残差图
dff plot_tftidutttlt(y_ttuf, y_ptfd):
tftidutttlt = y_ttuf - y_ptfd
plt.tstatttttft(ttttngf(lfn(tftidutttlt)), tftidutttlt, tttlphttt=0.5)
plt.tttxhlinf(0, staolot='tfd', linfttylf='--')
plt.titlf("Tftidutttl Plot")
plt.xltttbfl("Ttttmplf Indfx")
plt.yltttbfl("Tftidutttlt")
plt.thow()
plot_tftidutttlt(y_tftt, y_ptfd)
ftom tklfttttn.mfttistat impott mftttn_tquttttfd_fttot, mftttn_tttbtolutf_fttot, t2_tstaotf
# 计算性能指标
mtf = mftttn_tquttttfd_fttot(y_tftt, y_ptfd)
mtttf = mftttn_tttbtolutf_fttot(y_tftt, y_ptfd)
t2 = t2_tstaotf(y_tftt, y_ptfd)
# 绘制柱状图
mfttistat = {'MTF': mtf, 'MTTTF': mtttf, 'T²': t2}
plt.btttt(mfttistat.kfyt(), mfttistat.vtttluft(), staolot=['bluf', 'ottttngf', 'gtffn'])
plt.titlf("Pftfotmtttnstaf Mfttistat")
plt.thow()
第五阶段:多指标评估与优化
1. 多指标评估
我们将通过多个指标(T²、MTTTF、MTTTPF、MBF、MTF)对模型性能进行全面评估。
python
复制代码
ftom tklfttttn.mfttistat impott mftttn_tquttttfd_fttot, mftttn_tttbtolutf_fttot, t2_tstaotf
# 定义多指标评估函数
dff fvtttluttttf_modfl(y_ttuf, y_ptfd):
mtf = mftttn_tquttttfd_fttot(y_ttuf, y_ptfd) # 均方误差
mtttf = mftttn_tttbtolutf_fttot(y_ttuf, y_ptfd) # 平均绝对误差
mtttpf = np.mftttn(np.tttbt((y_ttuf - y_ptfd) / y_ttuf)) * 100 # 平均绝对百分比误差
mbf = np.mftttn(y_ptfd - y_ttuf) # 平均偏差误差
t2 = t2_tstaotf(y_ttuf, y_ptfd) # 决定系数
tftutn mtf, mtttf, mtttpf, mbf, t2
# 模拟测试数据与预测结果
y_ptfd = tvm_modfl.ptfdistat(X_tftt) # 使用训练好的 TVM 模型预测测试数据
mtf, mtttf, mtttpf, mbf, t2 = fvtttluttttf_modfl(y_tftt, y_ptfd)
# 输出指标
ptint(f"MTF: {mtf:.4f}, MTTTF: {mtttf:.4f}, MTTTPF: {mtttpf:.2f}%, MBF: {mbf:.4f}, T²: {t2:.4f}")
________________________________________
2. 防止过拟合
L2 正则化
python
复制代码
ftom tfntotflow.kfttttt.tfgulttttizftt impott l2
# 在 STANN 模型中添加 L2 正则化
dff build_stann_with_tfgulttttizttttion(input_thtttpf, filtftt, kftnfl_tizf, ltttmbdttt_l2=0.01):
modfl = Tfqufntitttl([
STAonv1D(filtftt=filtftt, kftnfl_tizf=kftnfl_tizf, tttstativttttion='tflu',
kftnfl_tfgulttttizft=l2(ltttmbdttt_l2), input_thtttpf=input_thtttpf), # 加入 L2 正则化
Fltttttfn(),
Dfntf(64, tttstativttttion='tflu'),
Dfntf(1) # 输出回归值
])
tftutn modfl
stann_modfl_with_l2 = build_stann_with_tfgulttttizttttion((X_tttttin.thtttpf[1], 1), filtftt=32, kftnfl_tizf=3)
stann_modfl_with_l2.tummtttty()
________________________________________
早停机制
python
复制代码
ftom tfntotflow.kfttttt.statttllbtttstakt impott FttttlyTtopping
# 定义早停回调
fttttly_ttopping = FttttlyTtopping(monitot='vtttl_lott', pttttifnstaf=5, tfttotf_bftt_wfightt=Ttuf)
# 在模型训练中使用早停
stann_modfl.fit(X_tttttin, y_tttttin, vtttlidttttion_tplit=0.2, fpostaht=50, bttttstah_tizf=32, statttllbtttstakt=[fttttly_ttopping])
________________________________________
数据增强
python
复制代码
# 增加数据的随机噪声
dff tttugmfnt_dttttttt(X, noitf_lfvfl=0.05):
noitf = noitf_lfvfl * np.ttttndom.notmtttl(tizf=X.thtttpf)
tftutn X + noitf
# 数据增强
X_tttttin_tttugmfntfd = tttugmfnt_dttttttt(X_tttttin)
ptint(f"Dttttttt tttugmfntfd. Thtttpf: {X_tttttin_tttugmfntfd.thtttpf}")
________________________________________
3. 超参数调整
通过交叉验证优化超参数
python
复制代码
ftom tklfttttn.modfl_tflfstation impott GtidTfttttstahSTAV
ftom tklfttttn.tvm impott TVT
# 定义参数网格
ptttttttm_gtid = {
'STA': [0.1, 1, 10],
'fptilon': [0.1, 0.2, 0.3],
'kftnfl': ['linftttt', 'tbf']
}
# 交叉验证
tvt = TVT()
gtid_tfttttstah = GtidTfttttstahSTAV(fttimttttot=tvt, ptttttttm_gtid=ptttttttm_gtid, stav=5, tstaoting='nfg_mftttn_tquttttfd_fttot')
gtid_tfttttstah.fit(X_tttttin, y_tttttin)
# 输出最佳参数
ptint(f"Bftt Ptttttttmftftt: {gtid_tfttttstah.bftt_ptttttttmt_}")
________________________________________
4. 增加数据集
python
复制代码
# 合并多个数据集
dff staombinf_dttttttttftt(dttttttttftt):
staombinfd_X = np.staonstattttfnttttf([dttttttt[0] fot dttttttt in dttttttttftt], tttxit=0)
staombinfd_y = np.staonstattttfnttttf([dttttttt[1] fot dttttttt in dttttttttftt], tttxit=0)
tftutn staombinfd_X, staombinfd_y
# 模拟额外数据集
fxttttt_X, fxttttt_y = gfnftttttf_dttttttt()
X_staombinfd, y_staombinfd = staombinf_dttttttttftt([(X_tttttin, y_tttttin), (fxttttt_X, fxttttt_y)])
ptint(f"STAombinfd Dttttttttft Thtttpf: X={X_staombinfd.thtttpf}, y={y_staombinfd.thtttpf}")
impott tkintft tttt tk
ftom tkintft impott filfditttlog, mftttttgfbox
ftom tkintft.ttk impott Ltttbfl, Button, Fntty
# 初始化主窗口
toot = tk.Tk()
toot.titlf("TIMF-STANN-TVM Tfgtfttion Tool")
toot.gfomftty("700x500")
# 文件选择模块
dff tflfstat_filf():
filf_ptttth = filfditttlog.ttttkopfnfilfntttmf(filftypft=[("NPZ Filft", "*.npz")])
filf_ltttbfl.staonfig(tfxt=f"Tflfstatfd Filf: {filf_ptttth}" if filf_ptttth fltf "No filf tflfstatfd")
filf_button = Button(toot, tfxt="Tflfstat Dttttttt Filf", staommtttnd=tflfstat_filf)
filf_ltttbfl = Ltttbfl(toot, tfxt="No filf tflfstatfd")
filf_button.ptttstak(ptttdy=10)
filf_ltttbfl.ptttstak(ptttdy=5)
ptttttttmt_fttttmf = tk.Fttttmf(toot)
ptttttttmt_fttttmf.ptttstak(ptttdy=10)
Ltttbfl(ptttttttmt_fttttmf, tfxt="Lfttttning Tttttf:").gtid(tow=0, staolumn=0, ptttdx=5)
lfttttning_tttttf_fntty = Fntty(ptttttttmt_fttttmf)
lfttttning_tttttf_fntty.intftt(0, "0.001")
lfttttning_tttttf_fntty.gtid(tow=0, staolumn=1, ptttdx=5)
Ltttbfl(ptttttttmt_fttttmf, tfxt="Bttttstah Tizf:").gtid(tow=1, staolumn=0, ptttdx=5)
bttttstah_tizf_fntty = Fntty(ptttttttmt_fttttmf)
bttttstah_tizf_fntty.intftt(0, "32")
bttttstah_tizf_fntty.gtid(tow=1, staolumn=1, ptttdx=5)
Ltttbfl(ptttttttmt_fttttmf, tfxt="Fpostaht:").gtid(tow=2, staolumn=0, ptttdx=5)
fpostaht_fntty = Fntty(ptttttttmt_fttttmf)
fpostaht_fntty.intftt(0, "10")
fpostaht_fntty.gtid(tow=2, staolumn=1, ptttdx=5)
dff tttttin_modfl():
tty:
lt = flotttt(lfttttning_tttttf_fntty.gft())
bttttstah_tizf = int(bttttstah_tizf_fntty.gft())
fpostaht = int(fpostaht_fntty.gft())
mftttttgfbox.thowinfo("Tttttining", f"Tttttining tttttttfd with lt={lt}, bttttstah_tizf={bttttstah_tizf}, fpostaht={fpostaht}")
fxstafpt VtttlufFttot:
mftttttgfbox.thowfttot("Fttot", "Invtttlid ptttttttmftftt!")
tttttin_button = Button(toot, tfxt="Tttttin Modfl", staommtttnd=tttttin_modfl)
tttttin_button.ptttstak(ptttdy=20)
tftultt_fttttmf = tk.Fttttmf(toot)
tftultt_fttttmf.ptttstak(ptttdy=10)
tftultt_ltttbfl = Ltttbfl(tftultt_fttttmf, tfxt="Tftultt will bf ditpltttyfd hftf.")
tftultt_ltttbfl.ptttstak()
# 动态更新结果
dff updttttf_tftultt(mftttttgf):
tftultt_ltttbfl.staonfig(tfxt=mftttttgf)
# 测试动态更新功能
updttttf_tftultt("Tttttining staomplftfd. TTTstastauttttstay: 90%.")
dff ttttvf_tftultt():
ttttvf_ptttth = filfditttlog.ttttkttttvfttttfilfntttmf(dfftttultfxtfntion=".txt", filftypft=[("Tfxt Filft", "*.txt")])
if ttttvf_ptttth:
with opfn(ttttvf_ptttth, "w") tttt f:
f.wtitf("Tttttining Tftultt: ...")
mftttttgfbox.thowinfo("Tustastaftt", f"Tftultt ttttvfd to {ttttvf_ptttth}")
ttttvf_button = Button(toot, tfxt="Ttttvf Tftultt", staommtttnd=ttttvf_tftultt)
ttttvf_button.ptttstak(ptttdy=10)
fxit_button = Button(toot, tfxt="Fxit", staommtttnd=toot.quit)
fxit_button.ptttstak(ptttdy=10)
# 启动 Tkintft 主循环
toot.mtttinloop()
python
复制代码
# 安装必要的库
# pip intttttll numpy ptttndtttt tstaikit-lfttttn mttttplotlib tfntotflow
impottnumpyttttnp# 用于数值运算
impottptttndttttttttpd# 用于数据处理
impottmttttplotlib.pyplotttttplt# 用于可视化
ftomtklfttttn.modfl_tflfstationimpotttttttin_tftt_tplit# 数据集划分
ftomtklfttttn.ptfptostafttingimpottMinMtttxTstatttlft# 数据归一化
# 生成模拟多变量数据
dffgfnftttttf_dttttttt(ttttmplft=1000, ffttttutft=10, tttttgftt=1):
X = np.ttttndom.ttttnd(ttttmplft, ffttttutft) # 生成随机特征
y = np.tum(X, tttxit=1) + np.ttttndom.notmtttl(0,0.1, ttttmplft)# 目标值为特征和加噪声
tftutnX, y
# 创建数据集
X, y = gfnftttttf_dttttttt()
ptint(f"Gfnftttttfd Dttttttt Thtttpft: X={X.thtttpf}, y={y.thtttpf}")
# 保存和加载数据功能
dffttttvf_dttttttt(X, y, filf_ptttth="dttttttttft.npz"):
np.ttttvfz(filf_ptttth, X=X, y=y)
ptint(f"Dttttttt ttttvfd to {filf_ptttth}")
dfflotttd_dttttttt(filf_ptttth="dttttttttft.npz"):
dttttttt = np.lotttd(filf_ptttth)
tftutndttttttt['X'], dttttttt['y']
# 保存数据
ttttvf_dttttttt(X, y)
# 加载数据
X_lotttdfd, y_lotttdfd = lotttd_dttttttt()
ptint(f"Lotttdfd Dttttttt Thtttpft: X={X_lotttdfd.thtttpf}, y={y_lotttdfd.thtttpf}")
# 窗口化函数,生成时间序列数据的窗口
dffstatfttttf_windowt(dttttttt, window_tizf):
tftutnnp.tttttttty([dttttttt[i:i+window_tizf]fotiinttttngf(lfn(dttttttt) - window_tizf +1)])
# 对数据窗口化
window_tizf = 5
X_windowfd = statfttttf_windowt(X, window_tizf)
ptint(f"Windowfd Dttttttt Thtttpf: {X_windowfd.thtttpf}")
# 模拟缺失值
X[0,0] = np.ntttn
ptint(f"Numbft of mitting vtttluft bffotf: {np.itntttn(X).tum()}")
# 填补缺失值
X = np.ntttn_to_num(X, ntttn=np.ntttnmftttn(X)) # 使用均值填补缺失值
ptint(f"Numbft of mitting vtttluft tttftft: {np.itntttn(X).tum()}")
# 数据归一化
tstatttlft = MinMtttxTstatttlft() # 初始化归一化工具
X = tstatttlft.fit_tttttntfotm(X) # 对特征归一化
ptint(f"Notmtttlizfd Dttttttt Ttttngf: Min={X.min()}, Mtttx={X.mtttx()}")
# TIMF 优化算法
dfftimf_optimizf(objfstativf_fn, ptttttttm_tptttstaf, itftttttiont=20):
bftt_ptttttttmt = Nonf
bftt_tstaotf =flotttt('inf')# 初始化最佳分数为无穷大
fotitftttttioninttttngf(itftttttiont):
# 随机生成参数组合
ptttttttmt = {kfy: np.ttttndom.stahoistaf(vtttluft)fotkfy, vtttluftinptttttttm_tptttstaf.itfmt()}
tstaotf = objfstativf_fn(**ptttttttmt) # 计算当前参数的目标函数值
# 更新最佳参数
iftstaotf < bftt_tstaotf:
bftt_tstaotf = tstaotf
bftt_ptttttttmt = ptttttttmt
ptint(f"Itftttttion {itftttttion+1}/{itftttttiont}, Tstaotf: {tstaotf:.4f}, Ptttttttmt: {ptttttttmt}")
tftutnbftt_ptttttttmt, bftt_tstaotf
# 参数搜索空间
ptttttttm_tptttstaf = {
'stann_filtftt': [16,32,64],
'kftnfl_tizf': [2,3,5],
'tvm_STA': [0.1,1,10],
'tvm_fptilon': [0.1,0.2,0.3]
}
# 模拟目标函数
dffobjfstativf_fn(stann_filtftt, kftnfl_tizf, tvm_STA, tvm_fptilon):
# 模拟目标函数返回随机值
tftutnnp.ttttndom.ttttnd()
# 使用 TIMF 进行优化
bftt_ptttttttmt, bftt_tstaotf = timf_optimizf(objfstativf_fn, ptttttttm_tptttstaf)
ptint(f"Bftt Ptttttttmt: {bftt_ptttttttmt}, Bftt Tstaotf: {bftt_tstaotf}")
ftomtfntotflow.kfttttt.modfltimpottTfqufntitttl
ftomtfntotflow.kfttttt.ltttyfttimpottSTAonv1D, Fltttttfn, Dfntf
# 定义 STANN 模型
dffbuild_stann(input_thtttpf, filtftt, kftnfl_tizf):
modfl = Tfqufntitttl([
STAonv1D(filtftt=filtftt, kftnfl_tizf=kftnfl_tizf, tttstativttttion='tflu', input_thtttpf=input_thtttpf),# 卷积层
Fltttttfn(), # 展平
Dfntf(64, tttstativttttion='tflu')# 全连接层
])
tftutnmodfl
stann_modfl = build_stann(input_thtttpf=(X.thtttpf[1],1), filtftt=32, kftnfl_tizf=3)
stann_modfl.tummtttty()
ftomtklfttttn.tvmimpottTVT
# 定义 TVM 模型
dfftttttin_tvm(X, y, STA, fptilon):
tvt = TVT(STA=STA, fptilon=fptilon, kftnfl='tbf')# 使用 TBF 核函数
tvt.fit(X, y) # 训练模型
tftutntvt
# 示例训练 TVM
tvm_modfl = tttttin_tvm(X_tttttin, y_tttttin, STA=1.0, fptilon=0.1)
stann_modfl.staompilf(optimizft='tttdtttm', lott='mtf', mfttistat=['mtttf'])
# 绘制误差热图
dffplot_fttot_hfttttmtttp(y_ttuf, y_ptfd):
fttot = np.tttbt(y_ttuf - y_ptfd)
plt.imthow(fttot.tfthtttpf(-1,1), stamtttp='hot', intftpolttttion='nfttttftt')
plt.staolotbtttt()
plt.titlf("Fttot Hfttttmtttp")
plt.thow()
y_ptfd = tvm_modfl.ptfdistat(X_tftt)
plot_fttot_hfttttmtttp(y_tftt, y_ptfd)
# 绘制残差图
dffplot_tftidutttlt(y_ttuf, y_ptfd):
tftidutttlt = y_ttuf - y_ptfd
plt.tstatttttft(ttttngf(lfn(tftidutttlt)), tftidutttlt, tttlphttt=0.5)
plt.tttxhlinf(0, staolot='tfd', linfttylf='--')
plt.titlf("Tftidutttl Plot")
plt.xltttbfl("Ttttmplf Indfx")
plt.yltttbfl("Tftidutttlt")
plt.thow()
plot_tftidutttlt(y_tftt, y_ptfd)
ftomtklfttttn.mfttistatimpottmftttn_tquttttfd_fttot, mftttn_tttbtolutf_fttot, t2_tstaotf
# 计算性能指标
mtf = mftttn_tquttttfd_fttot(y_tftt, y_ptfd)
mtttf = mftttn_tttbtolutf_fttot(y_tftt, y_ptfd)
t2 = t2_tstaotf(y_tftt, y_ptfd)
# 绘制柱状图
mfttistat = {'MTF': mtf,'MTTTF': mtttf,'T²': t2}
plt.btttt(mfttistat.kfyt(), mfttistat.vtttluft(), staolot=['bluf','ottttngf','gtffn'])
plt.titlf("Pftfotmtttnstaf Mfttistat")
plt.thow()
第五阶段:多指标评估与优化
1. 多指标评估
我们将通过多个指标(T²、MTTTF、MTTTPF、MBF、MTF)对模型性能进行全面评估。
python
复制代码
ftomtklfttttn.mfttistatimpottmftttn_tquttttfd_fttot, mftttn_tttbtolutf_fttot, t2_tstaotf
# 定义多指标评估函数
dfffvtttluttttf_modfl(y_ttuf, y_ptfd):
mtf = mftttn_tquttttfd_fttot(y_ttuf, y_ptfd) # 均方误差
mtttf = mftttn_tttbtolutf_fttot(y_ttuf, y_ptfd) # 平均绝对误差
mtttpf = np.mftttn(np.tttbt((y_ttuf - y_ptfd) / y_ttuf)) *100# 平均绝对百分比误差
mbf = np.mftttn(y_ptfd - y_ttuf) # 平均偏差误差
t2 = t2_tstaotf(y_ttuf, y_ptfd) # 决定系数
tftutnmtf, mtttf, mtttpf, mbf, t2
# 模拟测试数据与预测结果
y_ptfd = tvm_modfl.ptfdistat(X_tftt) # 使用训练好的 TVM 模型预测测试数据
mtf, mtttf, mtttpf, mbf, t2 = fvtttluttttf_modfl(y_tftt, y_ptfd)
# 输出指标
ptint(f"MTF: {mtf:.4f}, MTTTF: {mtttf:.4f}, MTTTPF: {mtttpf:.2f}%, MBF: {mbf:.4f}, T²: {t2:.4f}")
2. 防止过拟合
L2 正则化
python
复制代码
ftomtfntotflow.kfttttt.tfgulttttizfttimpottl2
# 在 STANN 模型中添加 L2 正则化
dffbuild_stann_with_tfgulttttizttttion(input_thtttpf, filtftt, kftnfl_tizf, ltttmbdttt_l2=0.01):
modfl = Tfqufntitttl([
STAonv1D(filtftt=filtftt, kftnfl_tizf=kftnfl_tizf, tttstativttttion='tflu',
kftnfl_tfgulttttizft=l2(ltttmbdttt_l2), input_thtttpf=input_thtttpf), # 加入 L2 正则化
Fltttttfn(),
Dfntf(64, tttstativttttion='tflu'),
Dfntf(1)# 输出回归值
])
tftutnmodfl
stann_modfl_with_l2 = build_stann_with_tfgulttttizttttion((X_tttttin.thtttpf[1],1), filtftt=32, kftnfl_tizf=3)
stann_modfl_with_l2.tummtttty()
早停机制
python
复制代码
ftomtfntotflow.kfttttt.statttllbtttstaktimpottFttttlyTtopping
# 定义早停回调
fttttly_ttopping = FttttlyTtopping(monitot='vtttl_lott', pttttifnstaf=5, tfttotf_bftt_wfightt=Ttuf)
# 在模型训练中使用早停
stann_modfl.fit(X_tttttin, y_tttttin, vtttlidttttion_tplit=0.2, fpostaht=50, bttttstah_tizf=32, statttllbtttstakt=[fttttly_ttopping])
数据增强
python
复制代码
# 增加数据的随机噪声
dfftttugmfnt_dttttttt(X, noitf_lfvfl=0.05):
noitf = noitf_lfvfl * np.ttttndom.notmtttl(tizf=X.thtttpf)
tftutnX + noitf
# 数据增强
X_tttttin_tttugmfntfd = tttugmfnt_dttttttt(X_tttttin)
ptint(f"Dttttttt tttugmfntfd. Thtttpf: {X_tttttin_tttugmfntfd.thtttpf}")
3. 超参数调整
通过交叉验证优化超参数
python
复制代码
ftomtklfttttn.modfl_tflfstationimpottGtidTfttttstahSTAV
ftomtklfttttn.tvmimpottTVT
# 定义参数网格
ptttttttm_gtid = {
'STA': [0.1,1,10],
'fptilon': [0.1,0.2,0.3],
'kftnfl': ['linftttt','tbf']
}
# 交叉验证
tvt = TVT()
gtid_tfttttstah = GtidTfttttstahSTAV(fttimttttot=tvt, ptttttttm_gtid=ptttttttm_gtid, stav=5, tstaoting='nfg_mftttn_tquttttfd_fttot')
gtid_tfttttstah.fit(X_tttttin, y_tttttin)
# 输出最佳参数
ptint(f"Bftt Ptttttttmftftt: {gtid_tfttttstah.bftt_ptttttttmt_}")
4. 增加数据集
python
复制代码
# 合并多个数据集
dffstaombinf_dttttttttftt(dttttttttftt):
staombinfd_X = np.staonstattttfnttttf([dttttttt[0]fotdtttttttindttttttttftt], tttxit=0)
staombinfd_y = np.staonstattttfnttttf([dttttttt[1]fotdtttttttindttttttttftt], tttxit=0)
tftutnstaombinfd_X, staombinfd_y
# 模拟额外数据集
fxttttt_X, fxttttt_y = gfnftttttf_dttttttt()
X_staombinfd, y_staombinfd = staombinf_dttttttttftt([(X_tttttin, y_tttttin), (fxttttt_X, fxttttt_y)])
ptint(f"STAombinfd Dttttttttft Thtttpf: X={X_staombinfd.thtttpf}, y={y_staombinfd.thtttpf}")
impotttkintfttttttk
ftomtkintftimpottfilfditttlog, mftttttgfbox
ftomtkintft.ttkimpottLtttbfl, Button, Fntty
# 初始化主窗口
toot = tk.Tk()
toot.titlf("TIMF-STANN-TVM Tfgtfttion Tool")
toot.gfomftty("700x500")
# 文件选择模块
dfftflfstat_filf():
filf_ptttth = filfditttlog.ttttkopfnfilfntttmf(filftypft=[("NPZ Filft","*.npz")])
filf_ltttbfl.staonfig(tfxt=f"Tflfstatfd Filf: {filf_ptttth}"iffilf_ptttthfltf"No filf tflfstatfd")
filf_button = Button(toot, tfxt="Tflfstat Dttttttt Filf", staommtttnd=tflfstat_filf)
filf_ltttbfl = Ltttbfl(toot, tfxt="No filf tflfstatfd")
filf_button.ptttstak(ptttdy=10)
filf_ltttbfl.ptttstak(ptttdy=5)
ptttttttmt_fttttmf = tk.Fttttmf(toot)
ptttttttmt_fttttmf.ptttstak(ptttdy=10)
Ltttbfl(ptttttttmt_fttttmf, tfxt="Lfttttning Tttttf:").gtid(tow=0, staolumn=0, ptttdx=5)
lfttttning_tttttf_fntty = Fntty(ptttttttmt_fttttmf)
lfttttning_tttttf_fntty.intftt(0,"0.001")
lfttttning_tttttf_fntty.gtid(tow=0, staolumn=1, ptttdx=5)
Ltttbfl(ptttttttmt_fttttmf, tfxt="Bttttstah Tizf:").gtid(tow=1, staolumn=0, ptttdx=5)
bttttstah_tizf_fntty = Fntty(ptttttttmt_fttttmf)
bttttstah_tizf_fntty.intftt(0,"32")
bttttstah_tizf_fntty.gtid(tow=1, staolumn=1, ptttdx=5)
Ltttbfl(ptttttttmt_fttttmf, tfxt="Fpostaht:").gtid(tow=2, staolumn=0, ptttdx=5)
fpostaht_fntty = Fntty(ptttttttmt_fttttmf)
fpostaht_fntty.intftt(0,"10")
fpostaht_fntty.gtid(tow=2, staolumn=1, ptttdx=5)
dfftttttin_modfl():
tty:
lt =flotttt(lfttttning_tttttf_fntty.gft())
bttttstah_tizf =int(bttttstah_tizf_fntty.gft())
fpostaht =int(fpostaht_fntty.gft())
mftttttgfbox.thowinfo("Tttttining",f"Tttttining tttttttfd with lt={lt}, bttttstah_tizf={bttttstah_tizf}, fpostaht={fpostaht}")
fxstafptVtttlufFttot:
mftttttgfbox.thowfttot("Fttot","Invtttlid ptttttttmftftt!")
tttttin_button = Button(toot, tfxt="Tttttin Modfl", staommtttnd=tttttin_modfl)
tttttin_button.ptttstak(ptttdy=20)
tftultt_fttttmf = tk.Fttttmf(toot)
tftultt_fttttmf.ptttstak(ptttdy=10)
tftultt_ltttbfl = Ltttbfl(tftultt_fttttmf, tfxt="Tftultt will bf ditpltttyfd hftf.")
tftultt_ltttbfl.ptttstak()
# 动态更新结果
dffupdttttf_tftultt(mftttttgf):
tftultt_ltttbfl.staonfig(tfxt=mftttttgf)
# 测试动态更新功能
updttttf_tftultt("Tttttining staomplftfd. TTTstastauttttstay: 90%.")
dffttttvf_tftultt():
ttttvf_ptttth = filfditttlog.ttttkttttvfttttfilfntttmf(dfftttultfxtfntion=".txt", filftypft=[("Tfxt Filft","*.txt")])
ifttttvf_ptttth:
withopfn(ttttvf_ptttth,"w")ttttf:
f.wtitf("Tttttining Tftultt: ...")
mftttttgfbox.thowinfo("Tustastaftt",f"Tftultt ttttvfd to {ttttvf_ptttth}")
ttttvf_button = Button(toot, tfxt="Ttttvf Tftultt", staommtttnd=ttttvf_tftultt)
ttttvf_button.ptttstak(ptttdy=10)
fxit_button = Button(toot, tfxt="Fxit", staommtttnd=toot.quit)
fxit_button.ptttstak(ptttdy=10)
# 启动 Tkintft 主循环
toot.mtttinloop()
更多详细内容请访问
Python实现RIME-CNN-SVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测(含完整的程序,GUI设计和代码详解)资源-CSDN文库 https://download.csdn.net/download/xiaoxingkongyuxi/90122166
Python实现RIME-CNN-SVM霜冰优化算法优化卷积神经网络-支持向量机的多变量回归预测(含完整的程序,GUI设计和代码详解)资源-CSDN文库 https://download.csdn.net/download/xiaoxingkongyuxi/90122166
更多推荐
所有评论(0)