如何加快Python中的嵌套交叉验证?

2024-01-07

据我发现,还有另外 1 个这样的问题(加速嵌套交叉验证 https://stackoverflow.com/questions/49629112/speed-up-nested-cross-validation)但是,在尝试了该网站和微软上建议的几个修复程序后,安装 MPI 对我来说不起作用,所以我希望有另一个包或这个问题的答案。

我正在比较多种算法并网格搜索各种参数(可能参数太多?),除了 mpi4py 之外还有什么方法可以加快我的代码的运行速度?据我了解,我不能使用 n_jobs=-1 因为那不是嵌套的?

另请注意,我无法在我尝试在下面查看的许多参数上运行此程序(运行时间比我有时间长)。如果我只为每个模型提供 2 个参数进行比较,则仅在 2 小时后才有结果。此外,我还在 252 行和 25 个特征列的数据集上运行此代码,其中包含 4 个分类变量,以预测(“确定”、“可能”、“可能”或“未知”)基因(包含 252 个基因)是否影响疾病。使用 SMOTE 将样本大小增加到 420,然后就可以使用了。

dataset= pd.read_csv('data.csv')
data = dataset.drop(["gene"],1)
df = data.iloc[:,0:24]
df = df.fillna(0)
X = MinMaxScaler().fit_transform(df)

le = preprocessing.LabelEncoder()
encoded_value = le.fit_transform(["certain", "likely", "possible", "unlikely"])
Y = le.fit_transform(data["category"])

sm = SMOTE(random_state=100)
X_res, y_res = sm.fit_resample(X, Y)

seed = 7
logreg = LogisticRegression(penalty='l1', solver='liblinear',multi_class='auto')
LR_par= {'penalty':['l1'], 'C': [0.5, 1, 5, 10], 'max_iter':[500, 1000, 5000]}

rfc =RandomForestClassifier()
param_grid = {'bootstrap': [True, False],
              'max_depth': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, None],
              'max_features': ['auto', 'sqrt'],
              'min_samples_leaf': [1, 2, 4,25],
              'min_samples_split': [2, 5, 10, 25],
              'n_estimators': [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]}

mlp = MLPClassifier(random_state=seed)
parameter_space = {'hidden_layer_sizes': [(10,20), (10,20,10), (50,)],
     'activation': ['tanh', 'relu'],
     'solver': ['adam', 'sgd'],
     'max_iter': [10000],
     'alpha': [0.1, 0.01, 0.001],
     'learning_rate': ['constant','adaptive']}

gbm = GradientBoostingClassifier(min_samples_split=25, min_samples_leaf=25)
param = {"loss":["deviance"],
    "learning_rate": [0.15,0.1,0.05,0.01,0.005,0.001],
    "min_samples_split": [2, 5, 10, 25],
    "min_samples_leaf": [1, 2, 4,25],
    "max_depth":[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, None],
    "max_features":['auto', 'sqrt'],
    "criterion": ["friedman_mse"],
    "n_estimators":[200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]
    }

svm = SVC(gamma="scale", probability=True)
tuned_parameters = {'kernel':('linear', 'rbf'), 'C':(1,0.25,0.5,0.75)}

def baseline_model(optimizer='adam', learn_rate=0.01):
    model = Sequential()
    model.add(Dense(100, input_dim=X_res.shape[1], activation='relu')) 
    model.add(Dropout(0.5))
    model.add(Dense(50, activation='relu')) #8 is the dim/ the number of hidden units (units are the kernel)
    model.add(Dense(4, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
    return model

keras = KerasClassifier(build_fn=baseline_model, batch_size=32, epochs=100, verbose=0)
learn_rate = [0.001, 0.01, 0.1, 0.2, 0.3]
optimizer = ['SGD', 'RMSprop', 'Adagrad', 'Adadelta', 'Adam', 'Adamax', 'Nadam']
kerasparams = dict(optimizer=optimizer, learn_rate=learn_rate)

inner_cv = KFold(n_splits=10, shuffle=True, random_state=seed)
outer_cv = KFold(n_splits=10, shuffle=True, random_state=seed)

models = []
models.append(('GBM', GridSearchCV(gbm, param, cv=inner_cv,iid=False, n_jobs=1)))
models.append(('RFC', GridSearchCV(rfc, param_grid, cv=inner_cv,iid=False, n_jobs=1)))
models.append(('LR', GridSearchCV(logreg, LR_par, cv=inner_cv, iid=False, n_jobs=1)))
models.append(('SVM', GridSearchCV(svm, tuned_parameters, cv=inner_cv, iid=False, n_jobs=1)))
models.append(('MLP', GridSearchCV(mlp, parameter_space, cv=inner_cv,iid=False, n_jobs=1)))
models.append(('Keras', GridSearchCV(estimator=keras, param_grid=kerasparams, cv=inner_cv,iid=False, n_jobs=1)))


results = []
names = []
scoring = 'accuracy'
X_train, X_test, Y_train, Y_test = train_test_split(X_res, y_res, test_size=0.2, random_state=0)


for name, model in models:
    nested_cv_results = model_selection.cross_val_score(model, X_res, y_res, cv=outer_cv, scoring=scoring)
    results.append(nested_cv_results)
    names.append(name)
    msg = "Nested CV Accuracy %s: %f (+/- %f )" % (name, nested_cv_results.mean()*100, nested_cv_results.std()*100)
    print(msg)
    model.fit(X_train, Y_train)
    print('Test set accuracy: {:.2f}'.format(model.score(X_test, Y_test)*100),  '%')
    print("Best Parameters: \n{}\n".format(model.best_params_))
    print("Best CV Score: \n{}\n".format(model.best_score_))

例如,大部分数据集都是二进制的,如下所示:

gene   Tissue    Druggable Eigenvalue CADDvalue Catalogpresence   Category
ACE      1           1         1          0           1            Certain
ABO      1           0         0          0           0            Likely
TP53     1           1         0          0           0            Possible

任何关于如何加快速度的指导将不胜感激。

编辑:我也尝试过使用 dask 进行并行处理,但我不确定我做得是否正确,而且它似乎运行得更快:

for name, model in models:
    with joblib.parallel_backend('dask'):
        nested_cv_results = model_selection.cross_val_score(model, X_res, y_res, cv=outer_cv, scoring=scoring)
        results.append(nested_cv_results)
        names.append(name)
        msg = "Nested CV Accuracy %s: %f (+/- %f )" % (name, nested_cv_results.mean()*100, nested_cv_results.std()*100)
        print(msg)
        model.fit(X_train, Y_train)
        print('Test set accuracy: {:.2f}'.format(model.score(X_test, Y_test)*100),  '%')
    #print("Best Estimator: \n{}\n".format(model.best_estimator_))
        print("Best Parameters: \n{}\n".format(model.best_params_))
        print("Best CV Score: \n{}\n".format(model.best_score_)) #average of all cv folds for a single combination of the parameters you specify 

编辑:还要注意减少网格搜索,我尝试过每个模型使用例如 5 个参数,但这仍然需要几个小时才能完成,因此在减少数量的同时会有所帮助,如果有任何关于效率的建议,我会心怀感激。


The Dask-ML https://ml.dask.org具有可扩展的实施GridSearchCV and RandomSearchCV我相信,这些是 Scikit-Learn 的替代品。它们是与 Scikit-Learn 开发人员一起开发的。

  • https://ml.dask.org/hyper-parameter-search.html https://ml.dask.org/hyper-parameter-search.html

它们可以更快有两个原因:

  • 他们避免在管道的不同阶段之间重复共享工作
  • 它们可以扩展到任何可以部署 Dask 的集群(这对于大多数集群基础设施来说都很容易 https://docs.dask.org/en/latest/setup.html)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何加快Python中的嵌套交叉验证? 的相关文章

  • 关于使用Python启动SSH隧道的问题

    我在从用 Python 编写的 HTTP RPC 服务器启动 SSH 隧道时遇到了麻烦 基于Python的BaseHTTPServer 有一个用Python编写的简单的HTTP RPC服务器 作为其中一项服务的一部分 我想启动从 RPC 服
  • 刷新访问令牌时出现“invalid_grant”错误的情况?

    最近我一直在为这个问题揪心 一些背景 使用oauth2客户端 https code google com p google api python client 库来管理用户的令牌 这些令牌用于定期并发执行各种后台任务 每次要为用户运行其中一
  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • 按 ListProperty (NDB) 对查询进行排序

    如何按 ListProperty 对查询进行排序 该模型 class Chapter ndb Model title ndb StringProperty required True version ndb IntegerProperty
  • 使用 GeoDjango 在坐标系之间进行转换

    我正在尝试将坐标信息添加到我的数据库中 添加django contrib gis支持我的应用程序 我正在写一个south数据迁移 从数据库中获取地址 并向 Google 询问坐标 到目前为止 我认为我最好的选择是使用geopy为了这 接下来
  • 01 无效令牌[重复]

    这个问题在这里已经有答案了 嘿 学习 python3有一段时间了 遇到字典和dictionary name get 方法并尝试获取随机键值 问题 data data get key 1 它有效并且返回 1 但如果我使用data get ke
  • 如何通过 Python socket.send() 发送字符串以外的任何内容

    我对 Python 编程非常陌生 但出于必要 我必须快速地将一些东西组合在一起 我正在尝试通过 UDP 发送一些数据 除了当我执行 socket send 时 我必须以字符串形式输入数据之外 一切都正常 这是我的程序 这样你就可以看到我在做
  • Python NLP 英式英语与美式英语

    我目前正在用Python 进行NLP 工作 然而 在我的语料库中 既有英式英语也有美式英语 实现 实现 我正在考虑将英式英语转换为美式英语 但是 我没有找到一个好的工具 包来做到这一点 有什么建议么 我也找不到包 但试试这个 请注意 我必须
  • 打印一个 Jupyter 单元中定义的所有变量

    有没有一种更简单的方法来以漂亮的方式显示单个单元格中定义的所有变量的名称和值 我现在做的方式是这样的 但是当有30个或更多变量时我浪费了很多时间 您可以使用whos http ipython readthedocs io en stable
  • python 语言环境奇怪的错误。这究竟是怎么回事?

    所以今天我升级到了 bazaar 2 0 2 我开始收到这条消息 顺便说一句 我在雪豹上 bzr warning unknown locale UTF 8 Could not determine what text encoding to
  • Python/Flask:应用程序在关闭后正在运行

    我正在开发一个简单的 Flask Web 应用程序 我使用 Eclipse Pydev 当我开发该应用程序时 由于代码更改 我必须经常重新启动该应用程序 这就是问题所在 当我运行该应用程序时 我可以在本地主机上看到该框架 这很好 但是当我想
  • 获取 zeep.exceptions.ValidationError:缺少与 suds 一起使用的方法的元素

    我正在移植开发的代码suds 0 6到zeep 2 4 0 以前的泡沫代码 client Client WSDLfile proxy proxy faults True config client factory create perUse
  • 如何在Python中获取绝对文件路径

    给定一条路径 例如 mydir myfile txt 如何在Python中找到文件的绝对路径 例如 在 Windows 上 我最终可能会得到 C example cwd mydir myfile txt gt gt gt import os
  • 如何在Python中正确声明ctype结构+联合?

    我正在制作一个二进制数据解析器 虽然我可以依靠 C 但我想看看是否可以使用 Python 来完成该任务 我对如何实现这一点有一些了解 我当前的实现如下所示 from ctypes import class sHeader Structure
  • pandas apply:函数名是否带引号的区别

    简单数据框定义示例 df pd DataFrame A 2 4 1 B 8 4 1 C 6 2 7 df A B C 0 2 8 6 1 4 4 2 2 1 1 7 尝试理解以下块中函数参数调用的差异 df apply sum df app
  • if/else 在 while 循环内正确缩进[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我开始学习 Python 编程大约几周了 我遇到了一些麻烦 下面的代码是一个小程序 用于检查列表中是否有偶数 如果找到第一个偶数
  • 通过套接字发送字符串(python)

    我有两个脚本 Server py 和 Client py 我心中有两个目标 能够从客户端一次又一次地向服务器发送数据 能够将数据从服务器发送到客户端 这是我的 Server py import socket serversocket soc
  • 如何在包更新之间保留数据文件?

    我正在使用data files的论证setuptools setup 将配置文件安装到 etc和用户主目录 但是更新包pip install
  • Synapse Notebook 参考 - 使用参数从另一个笔记本调用 Synapse Notebook

    我有一个带有参数的突触笔记本 我试图从另一个笔记本调用该笔记本 我正在使用 run 命令 我应该如何将参数从基本笔记本传递到正在调用的笔记本 另外 对我来说 上述答案不起作用 作为对此问题的单独解决方案 下面是一个答案 打开笔记本并转到最右
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y

随机推荐

  • “注册 COM 互操作”与“使程序集 COM 可见”

    这两个选项之间的真正区别是什么 我所知道的是 注册 COM 互操作此选项在程序集上执行 regasm 并将程序集注册为注册表中的 COM 组件 也可能不是 以及所有类似 COM 的注册表项 这一步会生成TLB文件吗 还做了什么 有时我看到编
  • 病态的正则表达式会爆炸(时间和内存)?

    什么是病态的正则表达式会破坏许多解析器 在时间和内存上 以及哪些解析器 正则表达式越基本 越标准 非恶意用户无意中想出它的可能性就越大 请随意发布实际时间和内存数据以及解析器版本 我似乎记得 PERL 中过多的后向断言或 编辑 回溯据说可以
  • OpenCV VideoWriter 大小问题

    我正在尝试读取视频文件 处理它 并将处理后的帧写入作为输出视频文件 但是 我收到以下错误 OpenCV Error Assertion failed img cols width img rows height channels 3 in
  • 访问 NSNotification 中传递的对象?

    我有一个正在发布 NSDictionary 的 NSNotification NSDictionary dict NSDictionary dictionaryWithObjectsAndKeys anItemID ItemID NSStr
  • 使用 ASM 重写 Java 本机方法

    我试图通过使用重写类的字节码来做到这一点ASM 4 0 http download forge objectweb org asm asm4 guide pdf来替换所有的native方法与非native stubs 到目前为止我有这个 c
  • 将共享库与 .NET Core 结合使用

    我写了我的开源库 LINQ 到 Twitter https github com JoeMayo LinqToTwitter 使用共享库来最大限度地减少部署工件并处理特定于平台的功能 我想支持 NET Core 并且认为最快的方法是引用共享
  • 什么工具可以将DLL反编译成C++源代码? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个停止工作的旧 DLL log2vis dll 我想查看它的内部 看看它使用了哪些对象 该 DLL
  • 如何可视化 TensorFlow Estimator 权重?

    如何从图层中选择一个图层tf estimator Estimator并访问该层中每个单元的权重向量 具体来说 我正在尝试可视化密集层的权重 看着https github com tensorflow tensorflow blob r1 3
  • 是否可以使用 Twilio API 更改消息传递 URL 回调?

    您好 感谢您的阅读 是否可以使用 Twilio API 更改消息传递 URL 回调 你需要POST to an IncomingPhoneNumber实例资源 你可以这样做curl 或者如果您使用其他语言 请阅读这些文档 并为示例代码选择另
  • 基于sysdate触发

    我有一张桌子 表架构 CREATE TABLE CHARGES total NUMBER 30 admitdate TIMESTAMP 6 dischargedate TIMESTAMP 30 触发算法 if dischargedate n
  • 为什么分号会改变 Chrome 控制台中的 JavaScript 行为 [重复]

    这个问题在这里已经有答案了 这段代码完美地执行在谷歌浏览器控制台 a b a 10 b 20 a 10 b 20 但是当我在末尾添加分号时 出现语法错误 a b a 10 b 20 VM115 1 未捕获的语法错误 意外的标记 有人能告诉我
  • 在Python中查找数字的倍数

    我正在尝试编写一个代码 让我找到一个数字的前几个倍数 这是我的尝试之一 def printMultiples n m for m in n m print n end 我发现 通过把for m in n m 无论数字是什么 它都会遍历循环m
  • Pandas,如何计算过去n年每个月的平均值

    我有一个包含 20 年数据的数据框 其中时间作为日期时间索引 EDIT Time value 1999 01 01 00 00 00 7 1999 01 01 01 00 00 4 1999 01 01 02 00 00 9 1999 01
  • 如何使用 Jest 获取快照中的 CSS 样式

    我有以下问题 我不知道是否可以使用 Jest 快照功能获得结果 我有一个 React 组件 我正在使用 Jest 来测试它 我希望快照包含css风格不班级名称 目前我的快照是这样的 div div 我想要这样 div div 我的应用程序正
  • Python Poetry 已安装,但“诗歌:无法识别术语‘诗歌’”Windows Powershell [重复]

    这个问题在这里已经有答案了 我已经安装了诗歌版本1 4 2 当我跑步时 Invoke WebRequest Uri https install python poetry org UseBasicParsing Content python
  • docx 文件无法在 IE 8 中内联内容配置的浏览器中打开

    我想从 asp net 在 IE 中打开 docx 文件 IIS 已正确映射 mime 类型 我可以很好地打开 pdf 但 docx 总是会提示我下载 例如 content disposition attachment 有什么需要做的设置吗
  • Django 统计字段中的项目数

    模型 py class Event models Model name models CharField max length 20 unique True distance models IntegerField date models
  • 是否仍推荐使用旧版 Criteria API?

    我的团队在 Hibernate 3 x 下长期使用 hibernate Criteria API 最近 我们想将Hibernate版本升级到5 但是Criteria API似乎不再推荐了 但 JPA 看起来像是一个完全不同的 API 我们不
  • 无限滚动轮播(仅限 CSS)

    我正在尝试创建一个自动循环播放的轮播 最初我正在实施slick slider 但后来我发现了这种仅 CSS 的方法 body align items center background E3E3E3 display flex height
  • 如何加快Python中的嵌套交叉验证?

    据我发现 还有另外 1 个这样的问题 加速嵌套交叉验证 https stackoverflow com questions 49629112 speed up nested cross validation 但是 在尝试了该网站和微软上建议