版本 0.17#
版本 0.17.1#
2016年2月18日
变更日志#
错误修复#
将内部使用的joblib升级到0.9.4版本,修复了
joblib.Parallel
中的一个重要错误,该错误在处理大于1MB的数据集时可能会默默地产生错误的结果: joblib/joblib修复了读取使用scikit-learn版本<= 0.16生成的Bunch pickle的问题。这可能会影响已经使用scikit-learn 0.16下载数据集并使用scikit-learn 0.17加载数据集的用户。请参阅 #6196了解这如何影响
datasets.fetch_20newsgroups
。由 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
使用在线变分推理实现了潜在狄利克雷分配主题模型。由 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
,但已弃用,并将与decomposition.ProjectedGradientNMF
以及参数sparseness
、eta
、beta
和nls_max_iter
一起在0.19版本中移除。新的参数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贡献。为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
求解器的速度。由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
参数进行了扩展。现在可以忽略一个或多个标签,例如在多分类问题中忽略多数类。By Joel Nothman。为
linear_model.RidgeClassifier
添加了sample_weight
支持。By Trevor Stephens。为
sklearn.metrics.pairwise.cosine_similarity
提供了稀疏输出选项。By Jaidev Deshpande。添加
preprocessing.minmax_scale
以提供preprocessing.MinMaxScaler
的函数接口。By Thomas Unterthiner。dump_svmlight_file
现在可以处理多标签数据集。By Chih-Wei Chang。RCV1 数据集加载器 (
sklearn.datasets.fetch_rcv1
)。By Tom Dupre la Tour。经典的二元分类数据集“威斯康星乳腺癌”现在包含在 scikit-learn 中,可通过
datasets.load_breast_cancer
获取。升级到 joblib 0.9.3,以利用新的短任务自动批处理功能。这使得 scikit-learn 能够在并行执行许多非常短的任务时受益于并行化,例如
grid_search.GridSearchCV
元估计器在n_jobs > 1
且在小型数据集上使用大型参数网格的情况下。By Vlad Niculae、Olivier Grisel 和 Loic Esteve。有关 joblib 0.9.3 中更改的更多详细信息,请参阅发行说明:joblib/joblib
使用来自
linear_model.Lasso
的坐标下降法提高了decomposition.DictLearning
的速度(每次迭代提高 3 倍)。By Arthur Mensch。由 Nikolay Mayorov 实现最近邻查询(使用球树)的并行处理(线程)。
允许
datasets.make_multilabel_classification
输出稀疏y
。By Kashif Rasul。cluster.DBSCAN
现在接受预计算距离的稀疏矩阵,从而允许高效的内存距离预计算。By Joel Nothman。tree.DecisionTreeClassifier
现在公开了一个apply
方法,用于检索样本预测为的叶索引。By Daniel Galvez 和 Gilles Louppe。通过在树增长过程中计算杂质改进的代理值来加快决策树回归器、随机森林回归器、额外树回归器和梯度提升估计器的速度。代理量使得最大化该值的分割也最大化杂质改进。By Arnaud Joly、Jacob Schreiber 和 Gilles Louppe。
通过减少计算杂质度量时所需的计算次数(考虑到计算统计量的线性关系)来加快基于树的方法的速度。这种效果在额外树和具有分类或稀疏特征的数据集上尤其明显。By Arnaud Joly。
ensemble.GradientBoostingRegressor
和ensemble.GradientBoostingClassifier
现在公开了一个apply
方法,用于检索每个样本在每次尝试中最终所在的叶索引。By Jacob Schreiber。为
linear_model.LinearRegression
添加了sample_weight
支持。By 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
中的bug,其中在最终拟合中忽略了penalty
参数。由Manoj Kumar完成。修复了
ensemble.forest.ForestClassifier
在计算oob_score且X为稀疏csc_matrix时的bug。由Ankur Ankan完成。所有回归器现在都一致地处理并发出警告,当给定形状为
(n_samples, 1)
的y
时。由Andreas Müller和Henry Lin完成。(#5431)修复了
cluster.KMeans
中针对稀疏输入的聚类重新分配问题。由Lars Buitinck完成。修复了
discriminant_analysis.LinearDiscriminantAnalysis
中的一个bug,该bug在使用收缩时可能导致协方差矩阵不对称。由Martin Billinger完成。修复了
cross_validation.cross_val_predict
在估计器具有稀疏预测值时的bug。由Buddha Prakash完成。修复了
linear_model.LogisticRegression
的predict_proba
方法,使其使用softmax而不是一对多归一化。由Manoj Kumar完成。(#5182)修复了
linear_model.SGDClassifier
的partial_fit
方法在使用average=True
时的bug。由Andrew Lamb完成。(#5282)数据集获取器在Python 2和Python 3下使用不同的文件名,以避免pickle兼容性问题。由Olivier Grisel完成。(#5355)
修复了
naive_bayes.GaussianNB
中的一个bug,该bug导致分类结果依赖于尺度。由Jake Vanderplas完成。临时修复了
linear_model.Ridge
,在处理稀疏数据时拟合截距不正确。此修复程序在此情况下会自动将求解器更改为“sag”。#5360 由Tom Dupre la Tour完成。修复了
decomposition.RandomizedPCA
在具有大量特征和较少样本的数据上的性能问题。(#4478)由Andreas Müller、Loic Esteve和Giorgio Patrini完成。修复了
cross_decomposition.PLS
中的bug,该bug导致输出不稳定且依赖于平台,并在fit_transform
上失败。由Arthur Mensch完成。修复了用于存储数据集的
Bunch
类的bug。修复了
ensemble.plot_partial_dependence
忽略percentiles
参数的问题。在
CountVectorizer
中使用set
作为词汇表不再导致pickle时的结果不一致。修复了在
linear_model.LinearRegression
、linear_model.OrthogonalMatchingPursuit
、linear_model.Lasso
和linear_model.ElasticNet
中需要重新计算预先计算的Gram矩阵的条件。修复了坐标下降求解器中不一致的内存布局,该布局影响了
linear_model.DictionaryLearning
和covariance.GraphLasso
。(#5337)由Olivier Grisel完成。manifold.LocallyLinearEmbedding
不再忽略reg
参数。现在可以pickle使用自定义距离度量的最近邻估计器。(#4362)
修复了
pipeline.FeatureUnion
中的一个bug,在执行网格搜索时transformer_weights
未被正确处理。修复了
linear_model.LogisticRegression
和linear_model.LogisticRegressionCV
在使用class_weight='balanced'
或class_weight='auto'
时的bug。由Tom Dupre la Tour完成。修复了#5495中在执行OVR(SVC(decision_function_shape=”ovr”))时的bug。由Elvis Dohmatob完成。
API变更总结#
在
preprocessing.MinMaxScaler
中,属性data_min
、data_max
和data_range
已弃用,将在0.19版本中移除。现在该类公开data_min_
、data_max_
和data_range_
属性作为替代。By Giorgio Patrini。所有Scaler类现在都有一个
scale_
属性,表示其transform
方法应用的特征级重新缩放。在preprocessing.StandardScaler
中,旧属性std_
已弃用,并被scale_
取代;它将在0.19版本中移除。By Giorgio Patrini。svm.SVC
和svm.NuSVC
现在具有一个decision_function_shape
参数,可以通过设置decision_function_shape='ovr'
来使其决策函数的形状为(n_samples, n_classes)
。从0.19版本开始,这将是默认行为。By Andreas Müller。将一维数据数组作为输入传递给估计器现在已弃用,因为它会导致对数组元素应如何解释为特征或样本的混淆。现在所有数据数组都应明确地形成为
(n_samples, n_features)
。By 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_
的一致性。By 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