通过遗传算法进行超参数调整和自动时间序列建模

简介: 通过遗传算法进行超参数调整和自动时间序列建模

在以前的文章中我们介绍过一些基于遗传算法的知识,本篇文章将使用遗传算法处理机器学习模型和时间序列数据。

超参数调整(TPOT )

自动机器学习(Auto ML)通过自动化整个机器学习过程,帮我们找到最适合预测的模型,对于机器学习模型来说Auto ML可能更多的意味着超参数的调整和优化。

在这里我们使用python的一个名叫Tpot 的包来操作,TPOT 是建立在 scikit-learn 之上,虽然还是处在开发中,但是他的功能已经可以帮助我们了解这些概念了,下图显示了 Tpot 的工作原理:

640.png

640.png

fromtpotimportTPOTClassifierfromtpotimportTPOTRegressormodel=TPOTClassifier(generations=100, population_size=100, offspring_size=None, mutation_rate=0.9, crossover_rate=0.1, scoring=None, cv=5, subsample=1.0, n_jobs=1, max_time_mins=None, max_eval_time_mins=5, random_state=None, config_dict=None, template=None, warm_start=False, memory=None, use_dask=False, periodic_checkpoint_folder=None, early_stop=None, verbosity=0, disable_update_check=False, log_file=None)

通过上面的代码就可以获得简单的回归模型,这是默认参数列表

generations=100,
population_size=100,
offspring_size=None#Jeffnotesthisgetssettopopulation_sizemutation_rate=0.9,
crossover_rate=0.1,
scoring="Accuracy", #forClassificationcv=5,
subsample=1.0,
n_jobs=1,
max_time_mins=None,
max_eval_time_mins=5,
random_state=None,
config_dict=None,
warm_start=False,
memory=None,
periodic_checkpoint_folder=None,
early_stop=Noneverbosity=0disable_update_check=False

我们看看有哪些超参数可以进行调整:

generations :迭代次数。默认值为 100。

population_size:每代遗传编程种群中保留的个体数。默认值为 100。

offspring_size:在每一代遗传编程中产生的后代数量。默认值为 100。

mutation_rate:遗传编程算法的突变率 范围[0.0, 1.0] 。该参数告诉 GP 算法有多少管道将随机更改应用于每词迭代。默认值为 0.9

crossover_rate:遗传编程算法交叉率, 范围[0.0, 1.0] 。这个参数告诉遗传编程算法每一代要“培育”多少管道。

scoring:用于评估问题函数,如准确率、平均精度、roc_auc、召回率等。默认为准确率。

cv:评估管道时使用的交叉验证策略。默认值为 5。

random_state:TPOT 中使用的伪随机数生成器的种子。使用此参数可确保运行 TPOT 时使用相同随机种子,得到相同的结果。

n_jobs:= -1多个 CPU 内核上运行以加快 tpot 进程。

period_checkpoint_folder:“any_string”,可以在训练分数提高的同时观察模型的演变。

mutation_rate + crossover_rate 不能超过 1.0。

下面我们将Tpot 和sklearn结合使用,进行模型的训练。

frompandasimportread_csvfromsklearn.preprocessingimportLabelEncoderfromsklearn.model_selectionimportRepeatedStratifiedKFoldfromtpotimportTPOTClassifierdataframe=read_csv('sonar.csv')
#defineXandydata=dataframe.valuesX, y=data[:, :-1], data[:, -1]
#minimallypreparedatasetX=X.astype('float32')
y=LabelEncoder().fit_transform(y.astype('str'))
#splitthedatasetfromsklearn.model_selectionimporttrain_test_splitX_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.2, random_state=0)
#definecrossvalidationcv=RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)

现在我们运行 TPOTClassifier,进行超参数的优化

#initializetheclassifiermodel=TPOTClassifier(generations=5, population_size=50,max_time_mins=2,cv=cv, scoring='accuracy', verbosity=2, random_state=1, n_jobs=-1)
model.fit(X_train, y_train)
#exportthebestmodelmodel.export('tpot_best_model.py')

640.jpg

最后一句代码将模型保存在 .py 文件中,在使用的是后可以直接import。因为对于AutoML来说,最大的问题就是训练的时间,所以为了节省时间,population_size、max_time_mins 等值都使用了最小的设置。

现在我们打开文件 tpot_best_model.py,看看内容:

importnumpyasnpimportpandasaspdfromsklearn.linear_modelimportRidgeCVfromsklearn.model_selectionimporttrain_test_splitfromsklearn.pipelineimportmake_pipelinefromsklearn.preprocessingimportPolynomialFeaturesfromtpot.export_utilsimportset_param_recursive#NOTE: Makesurethattheoutcomecolumnislabeled'target'inthedatafiletpot_data=pd.read_csv('PATH/TO/DATA/FILE', sep='COLUMN_SEPARATOR', dtype=np.float64)
features=tpot_data.drop('target', axis=1)
training_features, testing_features, training_target, testing_target=\train_test_split(features, tpot_data['target'], random_state=1)
#AverageCVscoreonthetrainingsetwas: -29.099695845082277exported_pipeline=make_pipeline(
PolynomialFeatures(degree=2, include_bias=False, interaction_only=False),
RidgeCV()
)
#Fixrandomstateforallthestepsinexportedpipelineset_param_recursive(exported_pipeline.steps, 'random_state', 1)
exported_pipeline.fit(training_features, training_target)
results=exported_pipeline.predict(testing_features)

如果想做预测的话,使用下面代码

yhat=exported_pipeline.predict(new_data)

以上就是遗传算法进行AutoML/机器学习中超参数优化的方法。遗传算法受到达尔文自然选择过程的启发,并被用于计算机科学以寻找优化搜索。简而言之遗传算法由 3 种常见行为组成:选择、交叉、突变

下面我们看看它对处理时间序列的模型有什么帮助

时间序列数据建模(AutoTS)

在Python中有一个名叫 AutoTS 的包可以处理时间序列数据,我们从它开始

#AutoTS

fromautotsimportAutoTSfromautots.models.model_listimportmodel_listsprint(model_lists)

640.jpg

autots中有大量不同类型的时间序列模型,他就是以这些算法为基础,通过遗传算法的优化来找到最优的模型。

现在让我们加载数据。

#defaultdatafromautots.datasetsimportload_monthly#datawasinlongformatdf_long=load_monthly(long=True)

640.jpg

用不同的参数初始化AutoTS

model=AutoTS(
forecast_length=3,
frequency='infer',
ensemble='simple',
max_generations=5,
num_validations=2,
)
model=model.fit(df_long, date_col='datetime', value_col='value', id_col='series_id')
#help(AutoTS)

这个步骤需要很长的时间,因为它必须经过多次算法迭代。

print(model)

640.jpg

我们还可以查看模型准确率分数

#accuracyscoremodel.results()
#aggregatedfromcrossvalidationvalidation_results=model.results("validation")

640.jpg

从模型准确度分数列表中,还可以看到上面突出显示的“Ensemble”这一栏,它的低精度验证了一个理论,即Ensemble总是表现更好,这种说法是不正确的。

找到了最好的模型,就可以进行预测了。

prediction=model.predict()
forecasts_df=prediction.forecastupper_forecasts_df=prediction.upper_forecastlower_forecasts_df=prediction.lower_forecast#orforecasts_df1=prediction.long_form_results()
upper_forecasts_df1=prediction.long_form_results()
lower_forecasts_df1=prediction.long_form_results()

640.jpg

默认的方法是使用AutoTs提供的所有模型进行训练,如果我们想要在一些模型列表上执行,并对某个特性设定不同的权重,就需要一些自定义的配置。

首先还是读取数据

fromautotsimportAutoTSfromautots.datasetsimportload_hourlydf_wide=load_hourly(long=False)
#herewecaremostabouttrafficvolume, allotherseriesassumedtobeweightof1weights_hourly= {'traffic_volume': 20}

640.jpg

定义模型列表:

model_list= [
'LastValueNaive',
'GLS',
'ETS',
'AverageValueNaive',
]
model=AutoTS(
forecast_length=49,
frequency='infer',
prediction_interval=0.95,
ensemble=['simple', 'horizontal-min'],
max_generations=5,
num_validations=2,
validation_method='seasonal 168',
model_list=model_list,
transformer_list='all',
models_to_validate=0.2,
drop_most_recent=1,
n_jobs='auto',
)

640.jpg

在用数据拟合模型时定义权重:

model=model.fit(
df_wide,
weights=weights_hourly,
)
prediction=model.predict()
forecasts_df=prediction.forecast

640.jpg

这样就完成了,对于使用来说非常的简单

目录
相关文章
|
3月前
|
机器学习/深度学习 算法 数据挖掘
基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB 2022a/2024b实现,采用WOA优化的BiLSTM算法进行序列预测。核心代码包含完整中文注释与操作视频,展示从参数优化到模型训练、预测的全流程。BiLSTM通过前向与后向LSTM结合,有效捕捉序列前后文信息,解决传统RNN梯度消失问题。WOA优化超参数(如学习率、隐藏层神经元数),提升模型性能,避免局部最优解。附有运行效果图预览,最终输出预测值与实际值对比,RMSE评估精度。适合研究时序数据分析与深度学习优化的开发者参考。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本内容包含基于BiLSTM与遗传算法(GA)的算法介绍及实现。算法通过MATLAB2022a/2024b运行,核心为优化BiLSTM超参数(如学习率、神经元数量),提升预测性能。LSTM解决传统RNN梯度问题,捕捉长期依赖;BiLSTM双向处理序列,融合前文后文信息,适合全局信息任务。附完整代码(含注释)、操作视频及无水印运行效果预览,适用于股票预测等场景,精度优于单向LSTM。
|
4月前
|
存储 缓存 监控
上网行为监控系统剖析:基于 Java LinkedHashMap 算法的时间序列追踪机制探究
数字化办公蓬勃发展的背景下,上网行为监控系统已成为企业维护信息安全、提升工作效能的关键手段。该系统需实时记录并深入分析员工的网络访问行为,如何高效存储和管理这些处于动态变化中的数据,便成为亟待解决的核心问题。Java 语言中的LinkedHashMap数据结构,凭借其独有的有序性特征以及可灵活配置的淘汰策略,为上网行为监控系统提供了一种兼顾性能与功能需求的数据管理方案。本文将对LinkedHashMap在上网行为监控系统中的应用原理、实现路径及其应用价值展开深入探究。
96 3
|
21天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的XGBoost时间序列预测算法matlab仿真
本程序基于Matlab 2024b实现,结合粒子群优化(PSO)与XGBoost算法,用于时间序列预测。通过PSO优化XGBoost超参数,提升预测精度。程序包含完整注释与操作视频,运行后生成预测效果图及性能评估指标RMSE。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本内容展示了一种基于粒子群优化(PSO)与时间卷积神经网络(TCN)的时间序列预测方法。通过 MATLAB2022a 实现,完整程序运行无水印,核心代码附详细中文注释及操作视频。算法利用 PSO 优化 TCN 的超参数(如卷积核大小、层数等),提升非线性时间序列预测性能。TCN 结构包含因果卷积层与残差连接,结合 LSTM 构建混合模型,经多次迭代选择最优超参数,最终实现更准确可靠的预测效果,适用于金融、气象等领域。
|
3月前
|
算法 数据安全/隐私保护
基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密
本项目实现了一种基于Logistic Map混沌序列的数字信息加解密算法,使用MATLAB2022A开发并包含GUI操作界面。支持对文字、灰度图像、彩色图像和语音信号进行加密与解密处理。核心程序通过调整Logistic Map的参数生成伪随机密钥序列,确保加密的安全性。混沌系统的不可预测性和对初值的敏感依赖性是该算法的核心优势。示例展示了彩色图像、灰度图像、语音信号及文字信息的加解密效果,运行结果清晰准确,且完整程序输出无水印。
基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。
|
3月前
|
机器学习/深度学习 算法
基于遗传优化ELM网络的时间序列预测算法matlab仿真
本项目实现了一种基于遗传算法优化的极限学习机(GA-ELM)网络时间序列预测方法。通过对比传统ELM与GA-ELM,验证了参数优化对非线性时间序列预测精度的提升效果。核心程序利用MATLAB 2022A完成,采用遗传算法全局搜索最优权重与偏置,结合ELM快速训练特性,显著提高模型稳定性与准确性。实验结果展示了GA-ELM在复杂数据中的优越表现,误差明显降低。此方法适用于金融、气象等领域的时间序列预测任务。
|
3月前
|
算法 数据安全/隐私保护
基于混沌序列和小波变换层次化编码的遥感图像加密算法matlab仿真
本项目实现了一种基于小波变换层次化编码的遥感图像加密算法,并通过MATLAB2022A进行仿真测试。算法对遥感图像进行小波变换后,利用Logistic混沌映射分别对LL、LH、HL和HH子带加密,完成图像的置乱与扩散处理。核心程序展示了图像灰度化、加密及直方图分析过程,最终验证加密图像的相关性、熵和解密后图像质量等性能指标。通过实验结果(附图展示),证明了该算法在图像安全性与可恢复性方面的有效性。
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于PSO(粒子群优化)改进TCN(时间卷积神经网络)的时间序列预测方法。使用Matlab2022a运行,完整程序无水印,附带核心代码中文注释及操作视频。TCN通过因果卷积层与残差连接处理序列数据,PSO优化其卷积核权重等参数以降低预测误差。算法中,粒子根据个体与全局最优位置更新速度和位置,逐步逼近最佳参数组合,提升预测性能。

热门文章

最新文章