网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

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

超参数调整(TPOT )

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

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

from tpot import TPOTClassifier
from tpot import TPOTRegressor
model = 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)

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

  1. generations=100,
  2. population_size=100,
  3. offspring_size=None # Jeff notes this gets set to population_size
  4. mutation_rate=0.9,
  5. crossover_rate=0.1,
  6. scoring="Accuracy", # for Classification
  7. cv=5,
  8. subsample=1.0,
  9. n_jobs=1,
  10. max_time_mins=None,
  11. max_eval_time_mins=5,
  12. random_state=None,
  13. config_dict=None,
  14. warm_start=False,
  15. memory=None,
  16. periodic_checkpoint_folder=None,
  17. early_stop=None
  18. verbosity=0
  19. disable_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结合使用,进行模型的训练。

from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import RepeatedStratifiedKFold
from tpot import TPOTClassifier
dataframe = read_csv('sonar.csv')
#define X and y
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
# minimally prepare dataset
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
#split the dataset
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
# define cross validation
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)

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

#initialize the classifier
model = 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)
#export the best model
model.export('tpot_best_model.py')

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

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

import numpy as np
import pandas as pd
from sklearn.linear_model import RidgeCV
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
from tpot.export_utils import set_param_recursive
# NOTE: Make sure that the outcome column is labeled 'target' in the data file
tpot_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)
# Average CV score on the training set was: -29.099695845082277
exported_pipeline = make_pipeline(
PolynomialFeatures(degree=2, include_bias=False, interaction_only=False),
RidgeCV()
)
# Fix random state for all the steps in exported pipeline
set_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 的包可以处理时间序列数据,我们从它开始

#default data
from autots.datasets import load_monthly
#data was in long format
df_long = load_monthly(long=True)

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

现在让我们加载数据。

#default data
from autots.datasets import load_monthly
#data was in long format
df_long = load_monthly(long=True)

用不同的参数初始化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)

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

#accuracy score
model.results()
#aggregated from cross validation
validation_results = model.results("validation")

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

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

prediction = model.predict()
forecasts_df = prediction.forecast
upper_forecasts_df = prediction.upper_forecast
lower_forecasts_df = prediction.lower_forecast
#or
forecasts_df1 = prediction.long_form_results()
upper_forecasts_df1 = prediction.long_form_results()
lower_forecasts_df1 = prediction.long_form_results()

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

首先还是读取数据

from autots import AutoTS
from autots.datasets import load_hourlydf_wide = load_hourly(long=False)
# here we care most about traffic volume, all other series assumed to be weight of 1
weights_hourly = {'traffic_volume': 20}

定义模型列表:

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',
)

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

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

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

最后如果你对参加Kaggle比赛感兴趣,请私信我,邀你进入Kaggle比赛交流群

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
美国出现新套路:稳住中国、拖住伊朗,发动金融战,收割全球财富

美国出现新套路:稳住中国、拖住伊朗,发动金融战,收割全球财富

混沌录
2026-05-30 23:41:20
两名9岁女孩被困电梯2小时,轮流按求助键超35次,保安无动于衷称“别再按电梯玩”,妈妈:被救时孩子头发全湿了;物业致歉:已辞退涉事人

两名9岁女孩被困电梯2小时,轮流按求助键超35次,保安无动于衷称“别再按电梯玩”,妈妈:被救时孩子头发全湿了;物业致歉:已辞退涉事人

大风新闻
2026-05-31 10:29:12
为什么现金受贿还是会被查到?纪委的3个手段你根本想不到

为什么现金受贿还是会被查到?纪委的3个手段你根本想不到

职场资深秘书
2026-05-25 15:59:26
你们都是什么时候对男女之事开窍的?网友:果然还是拦不住有心人

你们都是什么时候对男女之事开窍的?网友:果然还是拦不住有心人

夜深爱杂谈
2026-02-21 21:37:02
年终奖3000万变300,当场提离职,董事长懵了——脑子进水?我却笑了!

年终奖3000万变300,当场提离职,董事长懵了——脑子进水?我却笑了!

麦子情感故事
2026-05-30 17:51:29
何猷君也没想到,官宣婚礼不到24小时,让人恶心的2件事接连发生

何猷君也没想到,官宣婚礼不到24小时,让人恶心的2件事接连发生

青梅侃史啊
2026-05-31 07:33:39
一个家最好的风水,从来不是优秀的孩子,而是被善待的妈妈

一个家最好的风水,从来不是优秀的孩子,而是被善待的妈妈

青苹果sht
2026-05-30 05:15:46
网友请假说明原因,外企领导:隐私、无需说明,评论区感动哭了!

网友请假说明原因,外企领导:隐私、无需说明,评论区感动哭了!

谭谈社会
2026-05-31 11:03:25
老话不假:一个人的善报和恶报,大多在60岁左右应验,千万别不信

老话不假:一个人的善报和恶报,大多在60岁左右应验,千万别不信

心理观察局
2026-05-30 07:39:07
不要随便分享!一家人喜提新车,网友却乱了锅,提醒女生注意丈夫

不要随便分享!一家人喜提新车,网友却乱了锅,提醒女生注意丈夫

林子说事
2026-05-31 07:41:12
5700亿方淡水白白流走?中方砸万亿截弯取直,把西北“喂成”江南

5700亿方淡水白白流走?中方砸万亿截弯取直,把西北“喂成”江南

古事寻踪记
2026-05-25 07:07:29
原来他们是夫妻,从相爱到结婚只用1年,如今丈夫凭新电影又红了

原来他们是夫妻,从相爱到结婚只用1年,如今丈夫凭新电影又红了

白面书誏
2026-05-29 21:44:35
中国和塔吉克斯坦没有深仇大恨,为何两国边界却一直是未定国界?

中国和塔吉克斯坦没有深仇大恨,为何两国边界却一直是未定国界?

老达子
2026-05-25 06:55:03
《教父》:柯里昂告诉儿子,人生最重要的不是赚多少钱,不是有多大权势,而是要在年轻时就深刻理解这两句话

《教父》:柯里昂告诉儿子,人生最重要的不是赚多少钱,不是有多大权势,而是要在年轻时就深刻理解这两句话

心理观察局
2026-05-23 07:11:11
正大量上市,钾含量是苹果8倍,6月使劲吃,腿脚有劲,精神饱满

正大量上市,钾含量是苹果8倍,6月使劲吃,腿脚有劲,精神饱满

阿龙美食记
2026-05-28 16:48:12
绿地控股集团副总裁吴晓晖被禁足处罚后辞职

绿地控股集团副总裁吴晓晖被禁足处罚后辞职

地产微资讯
2026-05-31 10:57:24
警告超20次!美称向赴伊朗货船发射"地狱火"导弹

警告超20次!美称向赴伊朗货船发射"地狱火"导弹

看看新闻Knews
2026-05-31 08:07:45
中央再发铁令!领导干部出现这15种情形 , 将不能再担任现职!

中央再发铁令!领导干部出现这15种情形 , 将不能再担任现职!

细说职场
2026-05-14 21:37:29
詹俊:阿森纳坚持到点球决战已经很不容易了,新赛季继续努力

詹俊:阿森纳坚持到点球决战已经很不容易了,新赛季继续努力

懂球帝
2026-05-31 03:46:29
幼儿老师用热熔胶枪烫伤女童后续:老师的个人情况曝出,反差巨大

幼儿老师用热熔胶枪烫伤女童后续:老师的个人情况曝出,反差巨大

胡侃社会百态
2026-05-31 10:45:19
2026-05-31 12:55:00
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
2003文章数 1462关注度
往期回顾 全部

科技要闻

戴尔诺基亚又回来了!AI重估老牌科技公司

头条要闻

解放军代表针对日本防卫大臣尖锐提问 对方未正面回应

头条要闻

解放军代表针对日本防卫大臣尖锐提问 对方未正面回应

体育要闻

阿森纳用最悲壮的方式,成就了巴黎王朝

娱乐要闻

贾玲最新动作!侯明昊给虞书欣抬轿!

财经要闻

医学首席转岗搞科技,A股科技股遭遇巨震

汽车要闻

900V+3.2秒破百 领克10+&领克10上市16.99万元起

态度原创

游戏
本地
数码
公开课
军事航空

育碧经典《雷曼》系列起源与传奇两款游戏重制消息曝光

本地新闻

用剪纸的方式,打开江苏扬州

数码要闻

微星Claw 8 EX AI+掌机实物亮相,确认升级人体工学防滑握把

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

美防长参加"香会" 就美中关系最新表态

无障碍浏览 进入关怀版