博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
auto-sklearn案例解析一
阅读量:5124 次
发布时间:2019-06-13

本文共 3542 字,大约阅读时间需要 11 分钟。

简单的使用

>>> import autosklearn.classification    >>> cls = autosklearn.classification.AutoSklearnClassifier()    >>> cls.fit(X_train, y_train)    >>> predictions = cls.predict(X_test)

该例子来自于.

直接调用autosklearn自动分类器即可使用,但是其他参数会直接选择默认参数.autosklearn与sklearn的训练fit与predict参数是极其相似的,但是不懂的地方在于autosklearn的fit方法,训练的是一堆的机器学习算法,以及数据预处理算法,预测predict同样的也是被选出来的最佳模型的预测结果.

fit()方法默认的总是时间为time_left_for_this_task=3600, 每个算法的自动调优时间为per_run_time_limit=360,官方建议的时间为24个小时,即time_left_for_this_task=86400,每个模型的计算时间为一个小时,即为:per_run_time_limit=3600.

注意:在实际的测试中autosklearn想要获得不错的最终运算效果,确实需要话费大量的时间,如果时间仅仅是几个小时的话,很有可能它的最终结果要低于手动调优的结果,你可以使用限制算法选择来加快计算速度.虽然一般而言autosklearn的在足够的运算时间后,能够获取高于手动调优的结果,但是我想你很多时候还是需要其他方式比如sklearn自带的网格搜索或者随机搜索,亦或是hyperopt这样的调参神器.

限制搜索域

例子:

automl = autosklearn.classification.AutoSklearnClassifier(    time_left_for_this_task=120, per_run_time_limit=120,    include_estimators=["random_forest", ], exclude_estimators=None,    include_preprocessors=["no_preprocessing", ], exclude_preprocessors=None)

其中参数include_estimators,要搜索的方法,exclude_estimators:为不搜索的方法.与参数include_estimators不兼容

include_preprocessors,可以参考手册中的内容

预处理在 auto-sklearn中共 分为数据预处理和 特征预处理功能两个功能。 数据预处理包括一个对分类特征的独热编码,对缺失值的处理,以及对特征和样本的归一化处理,这些步骤目前是无法关闭的.特征预处理则是一个单一的transformer(sklearn中对特征处理算法的称呼与机器学习算法 估计器estimator相对应),其实现了特征选择与将特征转换到不同空间(PCA).如前面的代码所示,这可以通过 include_preprocessors=[“no_preprocessing”, ]来关闭.

exclude_preprocessors作用与exclude_estimators相似,含义就是不使用的预处理方式.与include_preprocessors不兼容

保存运算数据以及模型

保存运算数据

由之前的例子我们可知,autosklearn在运算会产生两个文件夹,其中保存着运行的文件,而且这两个文件的存储位置有我们设定,但是因为在运算完之后这两个文件夹默认就会被删除,所以假如我们想要看到这两个文件夹中的文件,我们需要对我们的参数进行设置:

# 第一个例子保存数据    automl = autosklearn.classification.AutoSklearnClassifier(    time_left_for_this_task=120, per_run_time_limit=120,    tmp_folder='/home/fonttian/Data/Auto-sklearn/tmp/example_output_example_tmp',    output_folder='/home/fonttian/Data/Auto-sklearn/tmp/example_output_example_out',    delete_tmp_folder_after_terminate=False, delete_output_folder_after_terminate=False)

如上图所示,必须设置两个文件夹的位置,然后设置,delete_tmp_folder_after_terminate=False, delete_output_folder_after_terminate=False两个参数为False,这两个参数的作用是设置两个对应文件在运算完毕后删除

在以上参数的情况下,你还可以设置SMAC共享模型,参数为shared_mode=True,

保存模型

根据官网首页的说法,模型的持久化方式与sklearn相似.我们确实可以采取相似的办法进行处理.

# 第二个例子:存储模型,并加载    import pickle    s = pickle.dumps(automl)    with open('example_output_pickle.pkl', 'wb') as f:    f.write(s)    with open('example_output_pickle.pkl', 'rb') as f:    s2 = f.read()    clf = pickle.loads(s2)    predictions = clf.predict(X_test)    print("Accuracy score", sklearn.metrics.accuracy_score(y_test, predictions))

或者使用joblib进行模型的存储与加载,两者效果差距不大,但是似乎joblib更好一些,但是有一点是同样的就是随着版本的改变同一个pkl文件不一定能够被不同的版本加载并使用:

# 第三个例子:joblib 存储模型并加载    from sklearn.externals import joblib    joblib.dump(automl, 'example_output_joblib.pkl')    clf = joblib.load('example_output_joblib.pkl')

评价函数其其他内容请见另一篇笔记

防止过拟合

防止过拟合的参数为resampling_strategy 与 resampling_strategy_arguments

前者是字符串属性的参数,可选

  • ‘holdout’:分裂数据集为train:test,默认为0.67,即train:test = 0.67:0.33
  • ‘holdout-iterative-fit’: 分裂方式与上面相同,但是在可能的情况下谁使用迭代匹配
  • ‘cv’:进行交叉验证

第二个参数,则是对前一个参数进行设置的参数,其输入类型为dict,范围:

‘holdout’: {‘train_size’: float} * ‘holdout-iterative-fit’: {‘train_size’: float} * ‘cv’: {‘folds’: int}

除此之外,如果使用前面的两个参数的话,在 fit 完毕,选择出最佳模型之后,还需要 refit 一次,这样原来的模型才能根据新的数据进行调整,然后才能进行预测,直接使用 refit 命令无法进行预测,而只是用fit命令,不适用 refit 命令也会报下面的错错,:

'strategy %s, please call refit().' % self._resampling_strategy)NotImplementedError: Predict is currently not implemented for resampling strategy cv, please call refit().

中文翻译链接

转载于:https://www.cnblogs.com/fonttian/p/8480708.html

你可能感兴趣的文章
一个密码经过多次MD5加密能否提高安全性?Java MD5盐值加解密
查看>>
C#数组的合并拆分
查看>>
NFA和DFA的区别
查看>>
[转帖]什么是α射线、β射线、γ射线
查看>>
[转帖]Docker 清理占用的磁盘空间
查看>>
三羊献瑞(暴力破解)
查看>>
vmware创建虚拟机并安装centos7系统
查看>>
解决WCF接口无法传递object参数的问题
查看>>
ubuntu软件(查看文件差异)
查看>>
UEditor1.2.6.0在.net环境下使用
查看>>
POJ 2288 Islands and Bridges(状压dp)
查看>>
好文推荐系列--------(3)GruntJS 在线重载 提升生产率至新境界
查看>>
$(document).ready()和window.onload之间的差异
查看>>
学习笔记day5:inline inline-block block区别
查看>>
交易系统高并发下的幂等性设计原则
查看>>
UESTC_秋实大哥下棋 2015 UESTC Training for Data Structures<Problem I>
查看>>
数据库事务
查看>>
Linux中常用命令(文件与目录)
查看>>
python变量和字符串
查看>>
主键生成
查看>>