超参数优化--随机网格法

2023-11-08

随机网格搜索RandomizedSearchCV

  • 在网格搜索时我们提到,伴随着数据和模型的复杂度提升,网格搜索所需要的时间急剧增加。以随机森林算法为例,如果使用过万的数据,搜索时间则会立刻上升好几个小时。因此,我们急需寻找到一种更加高效的超参数搜索方法。

  • 首先,当所使用的算法确定时,决定枚举网格搜索运算速度的因子一共有两个:

  1. 参数空间的大小:参数空间越大,需要建模的次数越多
  2. 数据量的大小:数据量越大,每次建模时需要的算力和时间越多
  • 因此,sklearn中的网格搜索优化方法主要包括两类,其一是调整搜索空间,其二是调整每次训练的数据。其中,调整参数空间的具体方法,是放弃原本的搜索中必须使用的全域超参数空间,改为挑选出部分参数组合,构造超参数子空间,并只在子空间中进行搜索。

  • 以下图的二维空间为例,在这个n_estimators与max_depth共同组成的参数空间中,n_estimators的取值假设为[50,100,150,200,250,300],max_depth的取值假设为[2,3,4,5,6],则枚举网格搜索必须对30种参数组合都进行搜索。当我们调整搜索空间,我们可以只抽样出橙色的参数组合作为“子空间”,并只对橙色参数组合进行搜索。如此一来,整体搜索所需的计算量就大大下降了,原本需要30次建模,现在只需要8次建模。

在sklearn中,随机抽取参数子空间并在子空间中进行搜索的方法叫做随机网格搜索RandomizedSearchCV。由于搜索空间的缩小,需要枚举和对比的参数组的数量也对应减少,整体搜索耗时也将随之减少,因此:

  • 当设置相同的全域空间时,随机搜索的运算速度比枚举网格搜索快很多。
  • 当设置相同的训练次数时,随机搜索可以覆盖的空间比枚举网格搜索大很多。

同时,绝妙的是,随机网格搜索得出的最小损失与枚举网格搜索得出的最小损失很接近。
可以说,是提升了运算速度,又没有过多地伤害搜索的精度。
不过,需要注意的是,随机网格搜索在实际运行时,并不是先抽样出子空间,再对子空间进行搜索,而是仿佛“循环迭代”一般,在这一次迭代中随机抽取1组参数进行建模,下一次迭代再随机抽取1组参数进行建模,由于这种随机抽样是不放回的,因此不会出现两次抽中同一组参数的问题。我们可以控制随机网格搜索的迭代次数,来控制整体被抽出的参数子空间的大小,这种做法往往被称为“赋予随机网格搜索固定的计算量,当全部计算量被消耗完毕之后,随机网格搜索就停止”。

from sklearn.model_selection import RandomizedSearchCV
Name Description
estimator 调参对象,某评估器
param_distributions 全域参数空间,可以是字典或者字典构成的列表
n_iter 迭代次数,迭代次数越多,抽取的子参数空间越大
scoring 评估指标,支持同时输出多个参数
n_jobs 设置工作时参与计算的线程数
refit 挑选评估指标和最佳参数,在完整数据集上进行训练
cv 交叉验证的折数
verbose 输出工作日志形式
pre_dispatch 多任务并行时任务划分数量
random_state 随机数种子
error_score 当网格搜索报错时返回结果,选择’raise’时将直接报错并中断训练过程,其他情况会显示警告信息后继续完成训练
return_train_score 在交叉验证中是否显示训练集中参数得分
#打包成函数供后续使用
#评估指标RMSE
def RMSE(cvresult,key):
    return (abs(cvresult[key])**0.5).mean()

#计算参数空间大小
def count_space(param):
    no_option = 1
    for i in param_grid_simple:
        no_option *= len(param_grid_simple[i])
    print(no_option)
    
#在最优参数上进行重新建模验证结果
def rebuild_on_best_param(ad_reg):
    cv = KFold(n_splits=5,shuffle=True,random_state=1412)
    result_post_adjusted = cross_validate(ad_reg,X,y,cv=cv,scoring="neg_mean_squared_error"
                                          ,return_train_score=True
                                          ,verbose=True
                                          ,n_jobs=-1)
    print("训练RMSE:{:.3f}".format(RMSE(result_post_adjusted,"train_score")))
    print("测试RMSE:{:.3f}".format(RMSE(result_post_adjusted,"test_score")))
    
#创造参数空间 - 使用与网格搜索时完全一致的空间,以便于对比
param_grid_simple = {"criterion": ["squared_error","poisson"]
                     , 'n_estimators': [*range(20,100,5)]
                     , 'max_depth': [*range(10,25,2)]
                     , "max_features": ["log2","sqrt",16,32,64,"auto"]
                     , "min_impurity_decrease": [*np.arange(0,5,10)]
                    }

#建立回归器、交叉验证
reg = RFR(random_state=1412,verbose=True,n_jobs=-1)
cv = KFold(n_splits=5,shuffle=True,random_state=1412)

#计算全域参数空间大小,这是我们能够抽样的最大值
count_space(param_grid_simple)

#定义随机搜索
search = RandomizedSearchCV(estimator=reg
                            ,param_distributions=param_grid_simple
                            ,n_iter = 800 #子空间的大小是全域空间的一半左右
                            ,scoring = "neg_mean_squared_error"
                            ,verbose = True
                            ,cv = cv
                            ,random_state=1412
                            ,n_jobs=-1
                           )
#训练随机搜索评估器
#=====【TIME WARNING: 5~10min】=====#
start = time.time()
search.fit(X,y)
print(time.time() - start)

#查看模型结果
search.best_estimator_
"""
RandomForestRegressor(max_depth=24, max_features=16, min_impurity_decrease=0,
                      n_estimators=85, n_jobs=-1, random_state=1412,
                      verbose=True)
                      """
#根据最优参数重建模型
ad_reg = RFR(max_depth=24, max_features=16, min_impurity_decrease=0,
                      n_estimators=85, n_jobs=-1, random_state=1412,
                      verbose=True)
rebuild_on_best_param(ad_reg)
HPO方法 默认参数 网格搜索 随机搜索
搜索空间/全域空间 - 1536/1536 800/1536
运行时间(分钟) - 6.36 2.83(↓)
搜索最优(RMSE) 30571.266 29179.698 29251.284
重建最优(RMSE) - 28572.070 28639.969(↑)

虽然通过缩小子空间可以提升搜索的速度,但是随机网格搜索的精度看起来并没有削减太多,随机网格搜索可以得到和网格搜索一样好的结果吗?它也像网格搜索一样,可以得到最优的参数组合吗?为什么缩小参数空间之后,随机网格搜索的结果还与网格搜索一致?

理论上来说,枚举网格搜索的上限和随机网格搜索的上限哪个高?

从直觉上来说,我们很难回答这些问题,但我们可以从数学的随机过程的角度来理解这个问题。在机器学习算法当中,有非常多通过随机来提升运算速度(比如Kmeans,随机挑选样本构建簇心,小批量随机梯度下降,通过随机来减少每次迭代需要的样本)、或通过随机来提升模型效果的操作(比如随机森林,比如极度随机树)。两种随机背后的原理完全不同,而随机网格搜索属于前者,这一类机器学习方法总是伴随着“从某个全数据集/全域中进行抽样”的操作,而这种操作能够有效的根本原因在于:

  • 抽样出的子空间可以一定程度上反馈出全域空间的分布,且子空间相对越大(含有的参数组合数越多),子空间的分布越接近全域空间的分布

  • 当全域空间本身足够密集时,很小的子空间也能获得与全域空间相似的分布

  • 如果全域空间包括了理论上的损失函数最小值,那一个与全域空间分布高度相似的子空间很可能也包括损失函数的最小值,或包括非常接近最小值的一系列次小值

如下图,一共有14400个组合结果,我随机抽样10000个,也能近似得到和全域空间的分布,因此,只要子空间足够大,随机网格搜索的效果一定是高度逼近枚举网格搜索的。在全域参数空间固定时,随机网格搜索可以在效率与精度之间做权衡。子空间越大,精度越高,子空间越小,效率越高。
在这里插入图片描述
在这里插入图片描述

  • 更大/更密集的全域空间

由于随机网格搜索计算更快,所以在相同计算资源的前提下,我们可以对随机网格搜索使用更大的全域空间,因此随机搜索可能得到比网格搜索更好的效果:我们根据上一次网格搜索得到的最佳参数进行更密集的调整,将参数范围调整到最佳参数附近,且更加密集。

#创造参数空间 - 让整体参数空间变得更密
param_grid_simple = {'n_estimators': [*range(80,100,1)]
                     , 'max_depth': [*range(10,25,1)]
                     , "max_features": [*range(10,20,1)]
                     , "min_impurity_decrease": [*np.arange(0,5,10)]
                    }
#计算全域参数空间大小,这是我们能够抽样的最大值
count_space(param_grid_simple)
"""
3000
"""
#建立回归器、交叉验证
reg = RFR(random_state=1412,verbose=True,n_jobs=-1)
cv = KFold(n_splits=5,shuffle=True,random_state=1412)

#定义随机搜索
search = RandomizedSearchCV(estimator=reg
                            ,param_distributions=param_grid_simple
                            ,n_iter = 1536 #使用与枚举网格搜索类似的拟合次数
                            ,scoring = "neg_mean_squared_error"
                            ,verbose = True
                            ,cv = cv
                            ,random_state=1412
                            ,n_jobs=-1)
#训练随机搜索评估器
#=====【TIME WARNING: 5~10min】=====#
start = time.time()
search.fit(X,y)
end = time.time() - start

#查看最佳评估器
search.best_estimator_
"""
RandomForestRegressor(max_depth=22, max_features=14, min_impurity_decrease=0,
                      n_estimators=89, n_jobs=-1, random_state=1412,
                      verbose=True)
"""
rebuild_on_best_param(search.best_estimator_)
HPO方法 默认参数 网格搜索 随机搜索 随机搜索
(大空间)
搜索空间/全域空间 - 1536/1536 800/1536 1536/3000
运行时间(分钟) - 6.36 2.83(↓) 3.86(↓)
搜索最优(RMSE) 30571.266 29179.698 29251.284 29012.905(↓)
重建最优(RMSE) - 28572.070 28639.969(↑) 28346.673(↓)

可以发现,当全域参数空间增大之后,随即网格搜索可以使用与小空间上的网格搜索相似或更少的时间,来探索更密集/更大的空间,从而获得更好的结果。除了可以容忍更大的参数空间之外,随机网格搜索还可以接受连续性变量作为参数空间的输入。

  • 连续性参数空间

在这里插入图片描述
对于网格搜索来说,参数空间中的点是分布均匀、间隔一致的,因为网格搜索无法从某种“分布”中提取数据,只能使用组合好的参数组合点,而随机搜索却可以接受“分布”作为输入。如上图所示,对于网格搜索来说,损失函数的最低点很不幸的、位于两组参数之间,在这种情况下,枚举网格搜索是100%不可能找到最小值的。但对于随机网格搜索来说,由于是一段分布上随机选择参数点,因此在同样的参数空间中,取到更好的值的可能性更大。

import scipy #使用scipy来帮助我们建立分布
scipy.stats.uniform(loc=1,scale=100)
"""
uniform是均匀分布,默认生成[0,1]之间的数字,可以使用loc来调整起点,scale来调整终点。我们还可以选择其他的分布,比如指数分布expon, gamma分布, 或者是randint。
注意scipy这里并不是像np.linspace()一样生成一段离散的数字,而是直接生成一个分布对象。并且,我们并没有在分布对象中指定尺寸,
也就是说,在这段分布上究竟要取几个随机的参数备选值,是由随机搜索自己决定的。理论上来说,我们给出的n_iter越大,任意参数的分布上可能被取到的点就越多。
因此,当参数空间中包含某个分布的时候,我们无法估计全域参数空间的大小。
"""

在之前调整随机森林的时候,我们给出的所有参数都是只能接纳正整数的参数,因此在这里我们可以使用scipy.stats.randint,不过randint并不是严格意义上的连续分布。

严格来说,连续型搜索更适用于学习率,C,alpha这样的参数(无上限,以浮点数为主),随机森林的参数中最接近这个定义的是min_impurity_decrease,表示决策树在分枝是可以容忍的最小的不纯度下降量。我们借着这个参数,使用均匀分布来进行搜索试试看。

param_grid_simple = {'n_estimators': [*range(80,100,1)]
                     , 'max_depth': [*range(10,25,1)]
                     , "max_features": [*range(10,20,1)]
                     , "min_impurity_decrease": scipy.stats.uniform(0,50)
                    }
#其他步骤和之前的一模一样
#查看最佳评估器
search.best_estimator_
"""
RandomForestRegressor(max_depth=22, max_features=14,
                      min_impurity_decrease=20.070367229896224, n_estimators=98,
                      n_jobs=12, random_state=1412, verbose=True)
"""
HPO方法 默认参数 网格搜索 随机搜索 随机搜索
(大空间)
随机搜索
(连续型)
搜索空间/全域空间 - 1536/1536 800/1536 1536/3000 1536/无限
运行时间(分钟) - 6.36 2.83(↓) 3.86(↓) 3.92
搜索最优(RMSE) 30571.266 29179.698 29251.284 29012.905(↓) 29148.381
重建最优(RMSE) - 28572.070 28639.969(↑) 28346.673(↓) 28495.682

在本次搜索当中,由于我们之前已经知道最好的可能的min_impurity_decrease的值为0,因此强行向更大的数拓展搜索空间可能会导致模型效果下降。不过在随机森林当中,min_impurity_decrease是唯一可以使用分布进行搜索的参数,因此在这里我们就容忍了这部分表现上升。

理论上来说,当枚举网格搜索所使用的全域参数空间足够大/足够密集时,枚举网格搜索的最优解是随机网格搜索的上限,因此理论上随机网格搜索不会得到比枚举网格搜索更好的结果。

但现实中的问题是,由于枚举网格搜索的速度太慢,因此枚举网格搜索的全域参数空间往往无法设置得很大,也无法设置得很密集,因此网格搜索的结果很难接近理论上的最优值。当随机网格搜索将空间设置更大、更密集时,就可以捕获更广空间的分布,也自然就可能捕获到理论上的最优值了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超参数优化--随机网格法 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • MATLAB的统计每个列向量的个数

    tabulate 变量名 例子 统计age列向量里面有多少个不同年龄的个数 tabulate age 下面还有很多太长了 没有截图
  • [Unity3D]关于Android真机调测Profiler

    Unity3D 关于Android真机调测Profiler 2013 08 25 13 28 50 转载 标签 android profiler adb it 分类 Unity3d U3D中的Profile也是可以直接在链接安卓设备运行游戏
  • 280场周赛

    6004 得到 0 的操作数 给你两个 非负 整数 num1 和 num2 每一步 操作 中 如果 num1 gt num2 你必须用 num1 减 num2 否则 你必须用 num2 减 num1 例如 num1 5 且 num2 4 应
  • 悬赏百万美金检测Deepfake假视频,数据集470G:比赛很久没这么壕

    2019 12 13 13 51 52 车栗子 发自 凹非寺 量子位 报道 公众号 QbitAI 谁说Kaggle比赛都那么穷 穷不穷 还要看做的是什么任务 比如 有左右两段视频 你能分辨哪个是修过的么 动图结尾公布了答案 右是原始视频 左
  • 刷视频课的脚本

    是不是不想上视频课 是不是被迫要上视频课 是不是视频课很长 是不是如果挂机短短几分钟就会出现自动暂停的情况 是不是还在为这些烦恼 那么 掌声 只需一台空置的电脑 这个代码可以为你解决这些烦恼 话不多说 上代码 import time imp
  • QT moveToThread线程理解

    一 moveToThread创建开启线程步骤 1 创建继承自QObject类 实现槽函数 2 将QObject类通过moveToThread方法移到QThread线程中 使QObject类依附于线程 3 连接信号槽 槽必须是QObject类
  • [LeetCode-70]-Climbing Stairs(爬楼梯,斐波那契数列问题)

    文章目录 题目相关 Solution 题目相关 题目解读 该题就是斐波那契数列问题 可以使用递归方法实现 原题描述 原题链接 You are climbing a stair case It takes n steps to reach t
  • NFS详细介绍

    NFS介绍 网络文件系统 network files system 简称NFS是一种基于TCP传输协议的文件共享习通 NFS的CS体系中的服务端启用协议将文件共享到网络上 然后允许本地NFS客户端通过网络挂载服务端共享的文件 应用场景 为w
  • LeetCode 题 -7. 整数反转

    题目 给出一个 32 位的有符号整数 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出 321 示例 3 输入 120 输出 21 注意 假设我们的环境只能存储得下 32 位的有符号
  • JS逆向之网易云音乐

    文章目录 1 目标网站 2 初步分析 3 定位加密参数生成位置 4 编码测试 4 1 定义AES加密方法 4 2 调用两次AES加密获取params 4 3 获取歌曲的url 4 4 单曲下载初步测试代码 4 5 飙升榜单音乐批量抓取 文章
  • MySql中把一个表的数据插入到另一个表中

    1 如果2张表的字段一致 并且希望插入全部数据 可以用这种方法 INSERT INTO 目标表 SELECT FROM 来源表 例如 insert into insertTest select from insertTest2 2 如果只希
  • 2020年加密货币领域的5大做市商,都有谁?

    什么是加密货币做市 与传统做市商相比 加密货币做市是一个新的事物 本文旨在更好地了解加密货币做市商的行为 首先 让我们通过探索对做市流程的基本了解来研究什么是做市 简而言之 做市是一种交易活动 交易员同时向金融市场上的交易双方 买方和卖方
  • 超详细图解!【MySQL进阶篇】MySQL架构原理

    MySQL体系架构 MySQL Server架构自顶向下大致可以分网络连接层 服务层 存储引擎层和系统文件层 一 网络连接层 客户端连接器 Client Connectors 提供与MySQL服务器建立的支持 目前几乎支持所有主流 的服务端
  • 基于人工蜂群算法的函数寻优算法

    文章目录 一 理论基础 二 算法流程 1 初始化阶段 2 引领蜂阶段 3 跟随蜂阶段 4 侦察蜂阶段 5 食物源 三 MATLAB程序实现 1 清空环境变量 2 问题设定 3 参数设置 4 初始化蜜蜂种群 5 迭代优化 6 结果显示 四 参
  • php 发送邮箱 Email

    步骤一 phpmailer 很好 无论原生还是放到框架下 phpmailer下载地址 https github com PHPMailer PHPMailer
  • 华中农业大学数学实验期末考试答案(matlab)

    1 这题通过生成一个全是1的矩阵 然后加上一个对角阵就行了 A ones 10 10 3 diag 0 9 DET A det A INV A inv A 2 这一题之前我写过一个求线性方程组的小程序 求解线性方程组 3 function
  • 【mmdetection】使用自定义的coco格式数据集进行训练及测试

    目录 一 mmdetection简介 二 环境安装 1 安装教程 2 运行demo测试环境是否安装成功 三 训练自定义的dataset 1 准备dataset 2 Training前修改相关文件 3 Training 四 Testing 五
  • 使用FastApi服务解决程序反复调试导致速度过慢的问题(以tsfresh为例)

    对于多次调试的程序来说 重复执行如 读取数据 加载模型 得到导入的外部数据或三方库等重复操作的过程 可以使用网络服务搭建一个类似API一样的操作 一次读取 终身使用 整体的思路如下 本地搭建一个web服务 如本博客使用FastAPI 也可换
  • Java Session 会话技术

    一 Session简介 Session技术是将数据存储在服务器端的技术 会每个客户端都创建一块内存空间存储客户的数据 但客户端需要都携带一个标识ID去服务器中寻找属于自己的内存空间 所以说Session的实现是基于Cookie Sessio
  • 超参数优化--随机网格法

    随机网格搜索RandomizedSearchCV 在网格搜索时我们提到 伴随着数据和模型的复杂度提升 网格搜索所需要的时间急剧增加 以随机森林算法为例 如果使用过万的数据 搜索时间则会立刻上升好几个小时 因此 我们急需寻找到一种更加高效的超