写点什么

游戏夜读 | Scikit-learn 迎来 0.21 版本

用户头像
game1night
关注
发布于: 2020 年 05 月 18 日

2019年5月,Scikit-learn(sklearn)迎来了历史性的0.21版本,不再支持Python 2.7和3.4,仅支持Python 3.5及后续版本。此前,2018年9月0.20版本发布时,已对此做出了提前说明。



sklearn版本更新内容的六大分类



在了解这一次的版本更新内容前,先熟悉一下sklearn对更新内容的分类习惯。



sklearn将更新内容划分成六个大类,由四种颜色标识。分别是:



  1. 绿色,重大新功能 Major Feature;

  2. 绿色,新功能 Feature;

  3. 蓝色,效率提高 Efficiency;

  4. 蓝色,性能增强 Enhancement;

  5. 红色,缺陷修复 Fix;

  6. 橙色,接口改动 API Change。



在0.21版本发布后,陆续更新了几个以缺陷修复为主的小版本。考虑到0.21版本的更新内容不算少,所以,挑选绿色标识的内容,主要关注一下新增的功能。



0.21的绿色功能更新内容摘要



一共有24个绿色标签的功能性改动,涉及到了14个类别。其中,13类是具体模块,剩下的1类,是牵涉多个模块的基础性改动。



sklearn.cluster 新增了1项



  • 一个聚类算法 cluster.OPTICS,比cluster.DBSCAN更方便调参。



sklearn.ensemble 新增了2项



  • 两个实验性质的梯度下降树GBT,分别是ensemble.HistGradientBoostingClassifier 和 ensemble.HistGradientBoostingRegressor,据说是受到了LightGBM的启发。当样本数量大于数万个时,会比ensemble.GradientBoostingRegressor 和 ensemble.GradientBoostingClassifier要快。但因为是实验性质的,功能还不健全,sklearn也可能随时修改这一项更新的内容,对结果不做一致性的保证。

  • 添加了ensemble.VotingRegressor,它为回归问题提供了等效的ensemble.VotingClassifier。



sklearn.impute 新增了2项



  • 添加了缺失值处理的新方法 impute.IterativeImputer,实验性质。

  • impute.SimpleImputer 和 impute.IterativeImputer 新增了一个参数 “add_indicator”,实现了impute.MissingIndicator的转换输出。这样一来,预测模型也可以解释缺失值了。



sklearn.inspection 新增了1项



  • 号外!号外!现在凡是有 “predict_proba”方法的回归或者分类器都支持部分依赖图(inspection.plot_partial_dependence)啦!



sklearn.isotonic 新增了1项



  • 允许在 isotonic.IsotonicRegression 处理不同的数据类型了,比如:float32。



sklearn.linear_model 新增了2项



  • 通过选择“saga”解算器,linear_model.LogisticRegression 和 linear_model.LogisticRegressionCV 现在支持Elastic-Net惩罚约束了。

  • 添加了 linear_model.lars_path 的加强版 linear_model.lars_path_gram,可以直接不提供 X 和 y 就开搞。



sklearn.metrics 新增了4项



  • 为单输出回归提供了 metrics.max_error 指标,以及相应的 “max_error”得分参数。

  • 可以计算每个类别的混淆矩阵了!新增的 metrics.multilabel_confusion_matrix 有助于调参。

  • 新增的 metrics.jaccard_score 可以用来计算 Jaccard系数,操作方式跟 metrics.f1_score 差不多。

  • 之前“Haversine距离”可以通过最近邻计算得到,现在新增了metrics.pairwise.haversine_distances ,可以通过 metrics.pairwise_distances 设置“metric=‘pairwise’”实现。



sklearn.model_selection 新增了1项



  • 新增了两个类,分别是:GridSearchCV, RandomizedSearchCV。现在允许“refit=callable”来加强查找的可伸缩性,具体可以参考《模型复杂度和交叉验证分数的平衡之道》。



sklearn.neighbors 新增了1项



  • 添加了 neighbors.NeighborhoodComponentsAnalysis,它实现了近领成分分析算法。



sklearn.pipeline 新增了2项



  • pipeline.Pipeline 现在可以使用索引切片了!比如:my_pipleline[0:-1]。提取的子序列可以作为另一个Pipeline实例。还可以直接索引管道的特定步骤,跟通过“named_steps”一样的效果,但更方便。比如:my_pipeline['svc']。

  • 为pipeline.Pipeline,compose.ColumnTransformer 和 pipeline.FeatureUnion以及相应的“make_” 添加了可选参数“verbose”,用来显示每个步骤的进度和时间。



sklearn.preprocessing 新增了1项



  • preprocessing.OneHotEncoder 现在支持通过“drop”删除某个类别的特征。这在存在共线性的时候比较实用,例如:将结果数据输入神经网络或非规则化回归时。



sklearn.tree 新增了3项



  • 决策树更容易画出来了!现在可以基于“matplotlib”,通过 tree.plot_tree作图,不再依赖难安装的“dot”库了。

  • 现在可以通过 tree.export_text 导出阅读性良好的“文本格式”决策树了。

  • tree.BaseDecisionTree 新增了 get_n_leaves() 和 get_depth() 两个方法。重点是:基于这个基础算法的那些模型都同步更新了这两个方法。比如:tree.DecisionTreeClassifier,tree.DecisionTreeRegressor,tree.ExtraTreeClassifier,tree.ExtraTreeRegressor。



sklearn.utils 新增了1项



  • utils.resample 现在可以通过新增的“stratify”参数,设置根据分布分层取样。



涉及多个模块的基础更新,新增有2项



  • 完全重写了“_repr_()”方法,现在用的是Python标准库的打印方式,很优雅。这个方法用在调用 print(estimator) 的时候。但想改的话也可以,通过修改 sklearn.set_config 的 “print_changed_only”参数。

  • 引入了Estimator Tags 估算器标签,字典形式存储,通过调用“_get_tags()”方法获取。像sklearn.utils.estimator_checks.check_estimator 可以使用这些标签决定运行哪些测试以及输入哪些数据是合适的。标签可以依赖于估算器的参数设置,甚至系统控制,一般只在运行的时候才真正生效。标签作为注释,可以标识具体某个估算器的功能、数据要求、支持的输出类型、支持的方法等信息。



以上就是sklearn的0.21版本绿色功能性改动部分的摘要,更详细准确的内容就必须前往官方文档查阅了。



文/良宵听雨。授权“游戏夜读”发表。



发布于: 2020 年 05 月 18 日阅读数: 48
用户头像

game1night

关注

烦请督促我的游戏功课喔! 2017.04.06 加入

计划坚持创作以“游戏夜读”为主题的短文,并以这些杂文作为连载公开发布。烦请大家一起督促我的游戏功课喔!欢迎关注和阅读,如有不足,可直接留言批评,会继续努力!

评论

发布
暂无评论
游戏夜读 | Scikit-learn迎来0.21版本