版本 0.17#
版本 0.17.1#
2016年2月18日
更新日志#
错误修复#
升级了内置的 joblib 到版本 0.9.4,修复了
joblib.Parallel中的一个重要错误,该错误在使用大于 1MB 的数据集时可能悄无声息地导致错误结果: joblib/joblib修复了读取用 scikit-learn 版本 <= 0.16 生成的 Bunch pickles 的问题。这可能会影响已经用 scikit-learn 0.16 下载数据集并用 scikit-learn 0.17 加载的用户。有关此问题如何影响
datasets.fetch_20newsgroups,请参阅 #6196。由 Loic Esteve。修复了一个错误,该错误阻止了 ROC AUC 分数在大型数组上对多个 CPU/核心进行网格搜索。参见 #6147。由 Olivier Grisel。
修复了一个错误,该错误阻止了在
ensemble.GradientBoostingRegressor中正确设置presort参数。参见 #5857。由 Andrew McCulloh。修复了在评估
decomposition.LatentDirichletAllocation模型的困惑度时出现的 joblib 错误。参见 #6258。由 Chyi-Kwei Yau。
版本 0.17#
2015年11月5日
更新日志#
新功能#
除了
preprocessing.RobustScaler之外的所有 Scaler 类,都可以通过调用partial_fit进行在线拟合。由 Giorgio Patrini。新的类
ensemble.VotingClassifier实现了一个“多数投票”/“软投票”集成分类器,用于组合分类器的估计器。由 Sebastian Raschka。新的类
preprocessing.RobustScaler提供了preprocessing.StandardScaler的替代方案,用于特征中心化和范围归一化,该方法对异常值具有鲁棒性。由 Thomas Unterthiner。新的类
preprocessing.MaxAbsScaler提供了preprocessing.MinMaxScaler的替代方案,用于当数据已中心化或稀疏时的特征范围归一化。由 Thomas Unterthiner。新的类
preprocessing.FunctionTransformer将 Python 函数转换为Pipeline兼容的转换器对象。由 Joe Jevnik。新的类
cross_validation.LabelKFold和cross_validation.LabelShuffleSplit分别生成类似于cross_validation.KFold和cross_validation.ShuffleSplit的训练-测试折叠,不同之处在于这些折叠是根据标签数组进行条件化的。由 Brian McFee、 Jean Kossaifi 和 Gilles Louppe。decomposition.LatentDirichletAllocation实现了带有在线变分推断的 Latent Dirichlet Allocation 主题模型。由 Chyi-Kwei Yau,代码基于 Matt Hoffman 的实现。(#3659)新的求解器
sag实现了随机平均梯度下降,并且在linear_model.LogisticRegression和linear_model.Ridge中都可用。该求解器对于大型数据集非常高效。由 Danny Sullivan 和 Tom Dupre la Tour。(#4738)新的求解器
cd在decomposition.NMF中实现了坐标下降。以前基于投影梯度的求解器仍然可用,只需将新参数solver设置为pg,但它已被弃用,并将在 0.19 版本中移除,同时移除decomposition.ProjectedGradientNMF以及参数sparseness、eta、beta和nls_max_iter。新参数alpha和l1_ratio控制 L1 和 L2 正则化,而shuffle在cd求解器中添加了一个洗牌步骤。由 Tom Dupre la Tour 和 Mathieu Blondel。
增强功能#
manifold.TSNE现在支持通过 Barnes-Hut 方法进行近似优化,大大加快了拟合速度。由 Christopher Erick Moody。(#4025)cluster.MeanShift现在支持并行执行,如mean_shift函数中实现。由 Martino Sorbaro。naive_bayes.GaussianNB现在支持使用sample_weight进行拟合。由 Jan Hendrik Metzen。dummy.DummyClassifier现在支持先验拟合策略。由 Arnaud Joly。为
mixture.GMM及其子类添加了fit_predict方法。由 Cory Lorenz。添加了
metrics.label_ranking_loss指标。由 Arnaud Joly。添加了
metrics.cohen_kappa_score指标。为 bagging 集成模型添加了
warm_start构造函数参数,以增加集成模型的大小。由 Tim Head。添加了多输出回归指标不进行平均的选项。由 Konstantin Shmelkov 和 Michael Eickenberg。
为
cross_validation.train_test_split添加了stratify选项,用于分层拆分。由 Miroslav Batchkarov。tree.export_graphviz函数现在支持tree.DecisionTreeClassifier和tree.DecisionTreeRegressor的美学改进,包括按多数类别或杂质着色节点、显示变量名称以及使用节点比例而不是原始样本计数等选项。由 Trevor Stephens。通过避免损失计算,提高了
linear_model.LogisticRegression中newton-cg求解器的速度(每次迭代快3倍)。由 Mathieu Blondel 和 Tom Dupre la Tour。在支持
class_weight的分类器中,class_weight="auto"启发式算法已被弃用,并被class_weight="balanced"选项取代,后者具有更简单的公式和解释。由 Hanna Wallach 和 Andreas Müller。为
linear_model.PassiveAggressiveClassifier添加了class_weight参数,以根据类别频率自动加权样本。由 Trevor Stephens。添加了从 API 参考页面到用户指南的反向链接。由 Andreas Müller。
已扩展
sklearn.metrics.f1_score、sklearn.metrics.fbeta_score、sklearn.metrics.recall_score和sklearn.metrics.precision_score的labels参数。现在可以忽略一个或多个标签,例如在多类别问题中需要忽略多数类别。由 Joel Nothman。为
linear_model.RidgeClassifier添加了sample_weight支持。由 Trevor Stephens。为
sklearn.metrics.pairwise.cosine_similarity提供了稀疏输出的选项。由 Jaidev Deshpande。添加了
preprocessing.minmax_scale以提供preprocessing.MinMaxScaler的函数接口。由 Thomas Unterthiner。dump_svmlight_file现在支持多标签数据集。由 Chih-Wei Chang。RCV1 数据集加载器(
sklearn.datasets.fetch_rcv1)。由 Tom Dupre la Tour。“威斯康星乳腺癌”经典两类分类数据集现已包含在 scikit-learn 中,可通过
datasets.load_breast_cancer获得。升级到 joblib 0.9.3,以受益于新的短任务自动批处理功能。这使得 scikit-learn 在许多非常短的任务并行执行时(例如,当
grid_search.GridSearchCV元估计器在小数据集上使用大型参数网格且n_jobs > 1时),能够受益于并行处理。由 Vlad Niculae、 Olivier Grisel 和 Loic Esteve。有关 joblib 0.9.3 更改的更多详细信息,请参阅发布说明: joblib/joblib
使用来自
linear_model.Lasso的坐标下降法,提高了decomposition.DictLearning的速度(每次迭代快3倍)。由 Arthur Mensch。Nikolay Mayorov 实现了最近邻查询的并行处理(多线程)(使用球树)。
允许
datasets.make_multilabel_classification输出稀疏的y。由 Kashif Rasul。cluster.DBSCAN现在接受预计算距离的稀疏矩阵,从而实现内存高效的距离预计算。由 Joel Nothman。tree.DecisionTreeClassifier现在公开了一个apply方法,用于检索样本被预测为的叶节点索引。由 Daniel Galvez 和 Gilles Louppe。通过在树生长过程中计算不纯度改进的代理,加快了决策树回归器、随机森林回归器、额外树回归器和梯度提升估计器的速度。该代理量使得最大化此值的拆分也最大化了不纯度改进。由 Arnaud Joly、 Jacob Schreiber 和 Gilles Louppe。
通过减少计算不纯度度量时所需的计算量,同时考虑计算统计量的线性关系,加快了基于树的方法。对于额外树以及具有分类或稀疏特征的数据集,效果尤其明显。由 Arnaud Joly。
ensemble.GradientBoostingRegressor和ensemble.GradientBoostingClassifier现在公开了一个apply方法,用于检索每个样本在每次尝试中最终到达的叶节点索引。由 Jacob Schreiber。为
linear_model.LinearRegression添加了sample_weight支持。由 Sonny Hu。(##4881)为
manifold.TSNE添加了n_iter_without_progress以控制停止准则。由 Santi Villalba。(#5186)在
linear_model.Ridge中添加了可选参数random_state,用于设置sag求解器中使用的伪随机生成器的种子。由 Tom Dupre la Tour。为
linear_model.LogisticRegression添加了可选参数warm_start。如果设置为 True,则求解器lbfgs、newton-cg和sag将使用先前拟合中计算的系数进行初始化。由 Tom Dupre la Tour。为
linear_model.LogisticRegression的lbfgs、newton-cg和sag求解器添加了sample_weight支持。由 Valentin Stolbunov。对liblinear求解器也添加了支持。由 Manoj Kumar。为
ensemble.GradientBoostingRegressor和ensemble.GradientBoostingClassifier添加了可选参数presort,保持默认行为不变。这允许梯度提升器在构建深层树或使用稀疏数据时关闭预排序。由 Jacob Schreiber。修改了
metrics.roc_curve,默认情况下会删除不必要的阈值。由 Graham Clenaghan。添加了
feature_selection.SelectFromModel元转换器,它可以与具有coef_或feature_importances_属性的估计器一起使用,以选择输入数据的重要特征。由 Maheshakya Wijewardena、 Joel Nothman 和 Manoj Kumar。covariance.GraphLasso允许通过enet_tol参数单独控制 Elastic-Net 子问题的收敛准则。提高了
decomposition.DictionaryLearning的详细程度。ensemble.RandomForestClassifier和ensemble.RandomForestRegressor不再显式存储用于 bagging 的样本,从而大大减少了存储随机森林模型的内存占用。为
linear_model.Lars和linear_model.lars_path添加了positive选项,以强制系数为正值。(#5131)为
metrics.pairwise.euclidean_distances添加了X_norm_squared参数,以提供预计算的X的平方范数。为
pipeline.Pipeline添加了fit_predict方法。添加了
preprocessing.minmax_scale函数。
错误修复#
修复了
dummy.DummyClassifier在稀疏多标签输出情况下的非确定性问题。由 Andreas Müller。将
linear_model.RANSACRegressor的输出形状修复为(n_samples, )。由 Andreas Müller。修复了
decomposition.DictLearning在n_jobs < 0时的错误。由 Andreas Müller。修复了
grid_search.RandomizedSearchCV在大型离散网格下可能消耗大量内存的错误。由 Joel Nothman。修复了
linear_model.LogisticRegressionCV在最终拟合时忽略penalty的错误。由 Manoj Kumar。修复了
ensemble.forest.ForestClassifier在计算 oob_score 且 X 为稀疏 .csc_matrix 时的错误。由 Ankur Ankan。所有回归器现在都能一致地处理并警告给定形状为
(n_samples, 1)的y。由 Andreas Müller 和 Henry Lin。(#5431)修复了
cluster.KMeans稀疏输入的聚类重新分配问题,由 Lars Buitinck。修复了
discriminant_analysis.LinearDiscriminantAnalysis中的一个错误,该错误在使用收缩时可能导致非对称协方差矩阵。由 Martin Billinger。修复了
cross_validation.cross_val_predict对稀疏预测的估计器的支持。由 Buddha Prakash。修复了
linear_model.LogisticRegression的predict_proba方法,使其使用 soft-max 而不是 one-vs-rest 归一化。由 Manoj Kumar。(#5182)修复了
linear_model.SGDClassifier的partial_fit方法在调用时带有average=True的错误。由 Andrew Lamb。(#5282)数据集获取器在 Python 2 和 Python 3 下使用不同的文件名,以避免 pickle 兼容性问题。由 Olivier Grisel。(#5355)
修复了
naive_bayes.GaussianNB中的一个错误,该错误导致分类结果依赖于尺度。由 Jake Vanderplas。暂时修复了
linear_model.Ridge,该方法在稀疏数据情况下拟合截距时存在错误。此修复会自动将求解器更改为“sag”。#5360,由 Tom Dupre la Tour。修复了
decomposition.RandomizedPCA在具有大量特征和少量样本的数据上的性能错误。(#4478)由 Andreas Müller、 Loic Esteve 和 Giorgio Patrini。修复了
cross_decomposition.PLS中的错误,该错误导致输出不稳定且依赖于平台,并在fit_transform上失败。由 Arthur Mensch。修复了用于存储数据集的
Bunch类。修复了
ensemble.plot_partial_dependence忽略percentiles参数的问题。在
CountVectorizer中将set作为词汇表不再导致腌制时出现不一致的结果。修复了
linear_model.LinearRegression、linear_model.OrthogonalMatchingPursuit、linear_model.Lasso和linear_model.ElasticNet中预计算 Gram 矩阵何时需要重新计算的条件。修复了坐标下降求解器中影响
linear_model.DictionaryLearning和covariance.GraphLasso的内存布局不一致问题。(#5337)由 Olivier Grisel。manifold.LocallyLinearEmbedding不再忽略reg参数。带有自定义距离度量的最近邻估计器现在可以进行序列化(pickled)。(#4362)
修复了
pipeline.FeatureUnion中的一个错误,该错误导致在执行网格搜索时无法正确处理transformer_weights。修复了
linear_model.LogisticRegression和linear_model.LogisticRegressionCV在使用class_weight='balanced'或class_weight='auto'时的错误。由 Tom Dupre la Tour。修复了 #5495 的错误,该错误在执行 OVR(SVC(decision_function_shape=”ovr”)) 时出现。由 Elvis Dohmatob 修复。
API 更改摘要#
preprocessing.MinMaxScaler中的属性data_min、data_max和data_range已弃用,并将在 0.19 版本中不再可用。相反,该类现在公开了data_min_、data_max_和data_range_。由 Giorgio Patrini。所有 Scaler 类现在都有一个
scale_属性,即它们的transform方法应用的特征尺度重设。preprocessing.StandardScaler中的旧属性std_已弃用,并由scale_取代;它将在 0.19 版本中不再可用。由 Giorgio Patrini。svm.SVC和svm.NuSVC现在有一个decision_function_shape参数,通过设置decision_function_shape='ovr',使其决策函数的形状为(n_samples, n_classes)。这将是 0.19 版本开始的默认行为。由 Andreas Müller。将一维数据数组作为输入传递给估计器现在已弃用,因为它导致对数组元素应如何解释为特征或样本产生混淆。所有数据数组现在都应明确形状为
(n_samples, n_features)。由 Vighnesh Birodkar。lda.LDA和qda.QDA已移至discriminant_analysis.LinearDiscriminantAnalysis和discriminant_analysis.QuadraticDiscriminantAnalysis。store_covariance和tol参数已从discriminant_analysis.LinearDiscriminantAnalysis的 fit 方法移至构造函数,store_covariances和tol参数已从discriminant_analysis.QuadraticDiscriminantAnalysis的 fit 方法移至构造函数。继承自
_LearntSelectorMixin的模型将不再支持 transform 方法。(即,RandomForests、GradientBoosting、LogisticRegression、DecisionTrees、SVMs 和 SGD 相关模型)。将这些模型包装在元转换器feature_selection.SelectFromModel周围,以根据coefs_或feature_importances_删除低于某个阈值值的特征。cluster.KMeans在不收敛的情况下会重新运行聚类分配,以确保predict(X)和labels_的一致性。由 Vighnesh Birodkar。分类器和回归器模型现在使用
_estimator_type属性进行标记。交叉验证迭代器总是提供训练集和测试集的索引,而不是布尔掩码。
所有回归器上的
decision_function已弃用,并将在 0.19 版本中移除。请改用predict。datasets.load_lfw_pairs已弃用,并将在 0.19 版本中移除。请改用datasets.fetch_lfw_pairs。已移除弃用的
hmm模块。已移除弃用的
Bootstrap交叉验证迭代器。已移除弃用的
Ward和WardAgglomerative类。请改用cluster.AgglomerativeClustering。cross_validation.check_cv现在是一个公共函数。linear_model.LinearRegression的属性residues_已弃用,并将在 0.19 版本中移除。linear_model.LinearRegression中已弃用的n_jobs参数已移至构造函数。已从
linear_model.SGDClassifier的fit方法中移除弃用的class_weight参数。请改用构造参数。已移除对序列(或列表的列表)多标签格式的弃用支持。要将数据转换为支持的二元指示矩阵格式,或从该格式进行转换,请使用
MultiLabelBinarizer。Pipeline.pipeline的inverse_transform方法的调用行为将在 0.19 版本中改变。它将不再将一维输入重塑为二维输入。preprocessing.LabelBinarizer的弃用属性indicator_matrix_、multilabel_和classes_已移除。在
svm.SVC和svm.SVR中使用gamma=0自动将 gamma 设置为1. / n_features已弃用,并将在 0.19 版本中移除。请改用gamma="auto"。
代码贡献者#
Aaron Schumacher, Adithya Ganesh, akitty, Alexandre Gramfort, Alexey Grigorev, Ali Baharev, Allen Riddell, Ando Saabas, Andreas Mueller, Andrew Lamb, Anish Shah, Ankur Ankan, Anthony Erlinger, Ari Rouvinen, Arnaud Joly, Arnaud Rachez, Arthur Mensch, banilo, Barmaley.exe, benjaminirving, Boyuan Deng, Brett Naul, Brian McFee, Buddha Prakash, Chi Zhang, Chih-Wei Chang, Christof Angermueller, Christoph Gohlke, Christophe Bourguignat, Christopher Erick Moody, Chyi-Kwei Yau, Cindy Sridharan, CJ Carey, Clyde-fare, Cory Lorenz, Dan Blanchard, Daniel Galvez, Daniel Kronovet, Danny Sullivan, Data1010, David, David D Lowe, David Dotson, djipey, Dmitry Spikhalskiy, Donne Martin, Dougal J. Sutherland, Dougal Sutherland, edson duarte, Eduardo Caro, Eric Larson, Eric Martin, Erich Schubert, Fernando Carrillo, Frank C. Eckert, Frank Zalkow, Gael Varoquaux, Ganiev Ibraim, Gilles Louppe, Giorgio Patrini, giorgiop, Graham Clenaghan, Gryllos Prokopis, gwulfs, Henry Lin, Hsuan-Tien Lin, Immanuel Bayer, Ishank Gulati, Jack Martin, Jacob Schreiber, Jaidev Deshpande, Jake Vanderplas, Jan Hendrik Metzen, Jean Kossaifi, Jeffrey04, Jeremy, jfraj, Jiali Mei, Joe Jevnik, Joel Nothman, John Kirkham, John Wittenauer, Joseph, Joshua Loyal, Jungkook Park, KamalakerDadi, Kashif Rasul, Keith Goodman, Kian Ho, Konstantin Shmelkov, Kyler Brown, Lars Buitinck, Lilian Besson, Loic Esteve, Louis Tiao, maheshakya, Maheshakya Wijewardena, Manoj Kumar, MarkTab marktab.net, Martin Ku, Martin Spacek, MartinBpr, martinosorb, MaryanMorel, Masafumi Oyamada, Mathieu Blondel, Matt Krump, Matti Lyra, Maxim Kolganov, mbillinger, mhg, Michael Heilman, Michael Patterson, Miroslav Batchkarov, Nelle Varoquaux, Nicolas, Nikolay Mayorov, Olivier Grisel, Omer Katz, Óscar Nájera, Pauli Virtanen, Peter Fischer, Peter Prettenhofer, Phil Roth, pianomania, Preston Parry, Raghav RV, Rob Zinkov, Robert Layton, Rohan Ramanath, Saket Choudhary, Sam Zhang, santi, saurabh.bansod, scls19fr, Sebastian Raschka, Sebastian Saeger, Shivan Sornarajah, SimonPL, sinhrks, Skipper Seabold, Sonny Hu, sseg, Stephen Hoover, Steven De Gryze, Steven Seguin, Theodore Vasiloudis, Thomas Unterthiner, Tiago Freitas Pereira, Tian Wang, Tim Head, Timothy Hopper, tokoroten, Tom Dupré la Tour, Trevor Stephens, Valentin Stolbunov, Vighnesh Birodkar, Vinayak Mehta, Vincent, Vincent Michel, vstolbunov, wangz10, Wei Xue, Yucheng Low, Yury Zhauniarovich, Zac Stewart, zhai_pro, Zichen Wang