.. include:: _contributors.rst .. currentmodule:: sklearn ============== 旧版本 ============== .. _changes_0_12.1: 版本 0.12.1 =============== **2012年10月8日** 0.12.1 版本是一个修复错误的版本,没有增加新功能,而是修复了一系列错误。 更新日志 ---------- - 通过 `Gael Varoquaux`_ 提高了谱嵌入的数值稳定性 - 通过 `Gael Varoquaux`_ 在64位Windows系统下进行文档测试 - 通过 `Andreas Müller`_ 和 `Alexandre Gramfort`_ 修复了弹性网络的文档问题 - 通过 `Gael Varoquaux`_ 修正了与Fortran顺序的NumPy数组的正确行为 - 通过 `Lars Buitinck`_ 使GridSearchCV能够处理非CSR稀疏矩阵 - 通过 `Gael Varoquaux`_ 修复了MDS中的并行计算问题 - 通过 `Andreas Müller`_ 修复了计数向量化器中的Unicode支持问题 - 通过 :user:`Virgile Fritsch ` 修复了MinCovDet在X.shape = (3, 1)时崩溃的问题 - 通过 `Peter Prettenhofer`_ 修复了SGD对象的克隆问题 - 通过 :user:`Virgile Fritsch ` 稳定了GMM 贡献者 ------ * 14 `Peter Prettenhofer`_ * 12 `Gael Varoquaux`_ * 10 `Andreas Müller`_ * 5 `Lars Buitinck`_ * 3 :user:`Virgile Fritsch ` * 1 `Alexandre Gramfort`_ * 1 `Gilles Louppe`_ * 1 `Mathieu Blondel`_ .. _changes_0_12: 版本 0.12 ============ **2012年9月4日** 更新日志 --------- - 通过 `Gilles Louppe`_ 对 :ref:`决策树 ` 模块进行了各种速度改进。 - :class:`~ensemble.GradientBoostingRegressor` 和 :class:`~ensemble.GradientBoostingClassifier` 现在通过 `Peter Prettenhofer`_ 支持特征子采样,通过 ``max_features`` 参数实现。 - 通过 `Peter Prettenhofer`_ 为 :class:`~ensemble.GradientBoostingRegressor` 添加了Huber和Quantile损失函数。 - :ref:`决策树 ` 和 :ref:`随机森林 ` 现在通过 `Gilles Louppe`_ 支持多输出分类和回归问题。 - 添加了 :class:`~preprocessing.LabelEncoder` ,一个简单的实用类,用于 通过 `Mathieu Blondel`_ 实现了标签的规范化或非数值标签的转换。 - 在 :ref:`sgd` 中增加了 epsilon-insensitive 损失函数,并能够通过修改后的 huber 损失进行概率预测,由 `Mathieu Blondel`_ 实现。 - 增加了 :ref:`multidimensional_scaling` ,由 Nelle Varoquaux 实现。 - SVMlight 文件格式加载器现在可以检测压缩(gzip/bzip2)文件并在加载时解压缩,由 `Lars Buitinck`_ 实现。 - SVMlight 文件格式序列化器现在保留双精度浮点数值,由 `Olivier Grisel`_ 实现。 - 为所有估计器添加了一个通用的测试框架,由 `Andreas Müller`_ 实现。 - 对于不接受稀疏输入的估计器,增加了可理解的错误信息,由 `Gael Varoquaux`_ 实现。 - 在层次聚类中实现了加速,特别是构建树现在支持早期停止。这在聚类数量相对于样本数量不小的情况下很有用,由 `Gael Varoquaux`_ 实现。 - 增加了 MultiTaskLasso 和 MultiTaskElasticNet 用于联合特征选择,由 `Alexandre Gramfort`_ 实现。 - 增加了 `metrics.auc_score` 和 :func:`metrics.average_precision_score` 便捷函数,由 `Andreas Müller`_ 实现。 - 在 :ref:`feature_selection` 模块中改进了对稀疏矩阵的支持,由 `Andreas Müller`_ 实现。 - 为 :ref:`text_feature_extraction` 模块增加了新的边界感知字符 n-gram 分析器,由 :user:`@kernc ` 实现。 - 修复了谱聚类中的一个错误,该错误导致单点聚类,由 `Andreas Müller`_ 实现。 - 在 :class:`~feature_extraction.text.CountVectorizer` 中增加了忽略不频繁单词的选项 ``min_df`` ,由 `Andreas Müller`_ 实现。 - 在一些线性模型(ElasticNet、Lasso 和 OrthogonalMatchingPursuit)中增加了对多个目标的支持,由 `Vlad Niculae`_ 和 `Alexandre Gramfort`_ 实现。 - 在 `decomposition.ProbabilisticPCA` 的评分函数中进行了修复,由 Wei Li 实现。 - 修复了 :ref:`gradient_boosting` 中的特征重要性计算。 API 变更总结 ------------- - 旧的 ``scikits.learn`` 包已经消失;所有代码应改为从 ``sklearn`` 导入,后者在 0.9 版本中引入。 - 在 :func:`metrics.roc_curve` 中, ``thresholds`` 数组现在以相反的顺序返回,以保持与返回的 ``fpr`` 和 ``tpr`` 的顺序一致。 - 在 `hmm` 对象中,如 `hmm.GaussianHMM` 、 `hmm.MultinomialHMM` 等,所有参数必须在初始化对象时传递,而不是通过 ``fit`` 。现在 ``fit`` 只接受数据作为输入参数。 - 对于所有 SVM 类, ``gamma`` 的错误行为已修复。以前,默认的 gamma 值只在第一次调用 ``fit`` 时计算并存储。现在每次调用 ``fit`` 时都会重新计算。 - 所有 ``Base`` 类现在都是抽象元类,因此不能被实例化。 - :func:`cluster.ward_tree` 现在还返回父数组。这对于早期停止是必要的,因为在这种情况下树没有完全构建。 - 在 :class:`~feature_extraction.text.CountVectorizer` 中,参数 ``min_n`` 和 ``max_n`` 合并到参数 ``n_gram_range`` 中,以同时启用网格搜索。 - 在 :class:`~feature_extraction.text.CountVectorizer` 中,默认情况下忽略仅在一个文档中出现的单词。要重现之前的行为,请设置 ``min_df=1`` 。 - 修复了 API 不一致性::meth:`linear_model.SGDClassifier.predict_proba` 现在在两个类别上拟合时返回二维数组。 - 修复了 API 不一致性::meth:`discriminant_analysis.QuadraticDiscriminantAnalysis.decision_function` 和 :meth:`discriminant_analysis.LinearDiscriminantAnalysis.decision_function` 现在在两个类别上拟合时返回一维数组。 - 用于拟合 :class:`~linear_model.LassoCV` 和 :class:`~linear_model.ElasticNetCV` 的 alpha 网格现在存储在属性 ``alphas_`` 中,而不是覆盖初始化参数 ``alphas`` 。 - 当通过交叉验证估计alpha值时,线性模型将估计值存储在 ``alpha_`` 属性中,而不是仅仅存储 ``alpha`` 或 ``best_alpha`` 。 - :class:`~ensemble.GradientBoostingClassifier` 现在支持:meth:`~ensemble.GradientBoostingClassifier.staged_predict_proba` 和:meth:`~ensemble.GradientBoostingClassifier.staged_predict` 。 - `svm.sparse.SVC` 和其他稀疏SVM类现已弃用。:ref:`svm` 模块中的所有类现在会根据输入自动选择稀疏或密集表示。 - 所有聚类算法现在将传递给 ``fit`` 的数组 ``X`` 解释为输入数据,特别是:class:`~cluster.SpectralClustering` 和:class:`~cluster.AffinityPropagation` ,它们之前期望亲和矩阵。 - 对于将所需聚类数量作为参数的聚类算法,此参数现在称为 ``n_clusters`` 。 贡献者 ------ * 267 `Andreas Müller`_ * 94 `Gilles Louppe`_ * 89 `Gael Varoquaux`_ * 79 `Peter Prettenhofer`_ * 60 `Mathieu Blondel`_ * 57 `Alexandre Gramfort`_ * 52 `Vlad Niculae`_ * 45 `Lars Buitinck`_ * 44 Nelle Varoquaux * 37 `Jaques Grobler`_ * 30 Alexis Mignon * 30 Immanuel Bayer * 27 `Olivier Grisel`_ * 16 Subhodeep Moitra * 13 Yannick Schwartz * 12 :user:`@kernc ` * 11 :user:`Virgile Fritsch ` * 9 Daniel Duckworth * 9 `Fabian Pedregosa`_ * 9 `Robert Layton`_ * 8 John Benediktsson * 7 Marko Burjek * 5 `Nicolas Pinto`_ * 4 Alexandre Abraham * 4 `Jake Vanderplas`_ * 3 `Brian Holt`_ * 3 `Edouard Duchesnay`_ * 3 Florian Hoenig * 3 flyingimmidev * 2 Francois Savard * 2 Hannes Schulz * 2 Peter Welinder * 2 `Yaroslav Halchenko`_ * 2 Wei Li * 1 Alex Companioni * 1 Brandyn A. White * 1 Bussonnier Matthias * 1 Charles-Pierre Astolfi * 1 Dan O'Huiginn * 1 David Cournapeau * 1 Keith Goodman * 1 Ludwig Schwardt * 1 Olivier Hervieu * 1 塞尔吉奥·梅迪纳 * 1 杜诗乔 * 1 蒂姆·谢尔曼-蔡斯 * 1 布古恩 .. _changes_0_11: 版本 0.11 ============ **2012年5月7日** 更新日志 --------- 亮点 ............. - 梯度提升回归树( :ref:`gradient_boosting`) 用于分类和回归,由 `Peter Prettenhofer`_ 和 `Scott White`_ 开发。 - 简单的基于字典的特征加载器,支持分类变量 ( :class:`~feature_extraction.DictVectorizer`),由 `Lars Buitinck`_ 开发。 - 添加了马修斯相关系数( :func:`metrics.matthews_corrcoef` ) 并在 :func:`~metrics.precision_score`、:func:`metrics.recall_score` 和 :func:`~metrics.f1_score` 中添加了宏平均和微平均选项,由 `Satrajit Ghosh`_ 开发。 - :ref:`out_of_bag` 泛化误差估计用于 :ref:`ensemble` , 由 `Andreas Müller`_ 开发。 - 用于特征选择的随机稀疏线性模型, 由 `Alexandre Gramfort`_ 和 `Gael Varoquaux`_ 开发。 - :ref:`label_propagation` 用于半监督学习,由 Clay Woolam 开发。 **注意** 半监督 API 仍在开发中,可能会发生变化。 - 添加了 BIC/AIC 模型选择到经典的 :ref:`gmm` 并统一了 API 与 scikit-learn 的其余部分, 由 `Bertrand Thirion`_ 开发。 - 添加了 `sklearn.cross_validation.StratifiedShuffleSplit` , 这是一个带有平衡分割的 `sklearn.cross_validation.ShuffleSplit` , 由 Yannick Schwartz 开发。 - 添加了 :class:`~sklearn.neighbors.NearestCentroid` 分类器, 以及一个 ``shrink_threshold`` 参数,实现了 **收缩质心分类** , 由 `Robert Layton`_ 开发。 其他变化 .............. - 合并了 :ref:`sgd` 模块的密集和稀疏实现, 并公开了用于顺序数据集 ``seq_dataset`` 和权重向量 ``weight_vector`` 的实用扩展类型, 由 `Peter Prettenhofer`_ 开发。 - 在 :ref:`sgd` 模块中添加了 ``partial_fit``(支持在线/小批量学习)和 warm_start,由 `Mathieu Blondel`_ 开发。 - 合并了 :ref:`svm` 类和 :class:`~linear_model.LogisticRegression` 的密集和稀疏实现, 由 `Lars Buitinck`_ 开发。 - 回归器现在可以用作 :ref:`multiclass` 模块中的基础估计器, 由 `Mathieu Blondel`_ 开发。 - 为 :func:`metrics.pairwise_distances` 和 :func:`metrics.pairwise.pairwise_kernels` 添加了 `n_jobs` 选项,以进行并行计算,由 `Mathieu Blondel`_ 实现。 - :ref:`k_means` 现在可以使用 `n_jobs` 参数进行并行运行,无论是通过 :ref:`k_means` 还是 :class:`cluster.KMeans` ,由 `Robert Layton`_ 实现。 - 改进了 :ref:`cross_validation` 和 :ref:`grid_search` 文档,并引入了新的 `cross_validation.train_test_split` 辅助函数,由 `Olivier Grisel`_ 实现。 - :class:`~svm.SVC` 成员 ``coef_`` 和 ``intercept_`` 为了与 ``decision_function`` 一致而改变了符号;对于 ``kernel==linear`` , ``coef_`` 在一对一情况下得到了修正,由 `Andreas Müller`_ 实现。 - 对高效的留一法交叉验证岭回归进行了性能改进,特别是在 ``n_samples > n_features`` 情况下,在 :class:`~linear_model.RidgeCV` 中,由 Reuben Fletcher-Costin 实现。 - 重构和简化了 :ref:`text_feature_extraction` API,并修复了一个可能导致负IDF的错误,由 `Olivier Grisel`_ 实现。 - `_BaseHMM` 模块中的波束修剪选项已被移除,因为它难以进行Cython化。如果你对贡献Cython版本感兴趣,可以使用git历史中的python版本作为参考。 - :ref:`neighbors` 中的类现在支持最近邻搜索的任意Minkowski度量。度量可以通过参数 ``p`` 指定。 API变更总结 ------------ - `covariance.EllipticEnvelop` 现已弃用。请改用 :class:`~covariance.EllipticEnvelope` 。 - ``NeighborsClassifier`` 和 ``NeighborsRegressor`` 在 :ref:`neighbors` 模块中已不存在。请使用类 :class:`~neighbors.KNeighborsClassifier` 、:class:`~neighbors.RadiusNeighborsClassifier` 、:class:`~neighbors.KNeighborsRegressor` 。 and/or :class:`~neighbors.RadiusNeighborsRegressor` 代替。 - :ref:`sgd` 模块中的稀疏类现在已弃用。 - 在 `mixture.GMM` 、 `mixture.DPGMM` 和 `mixture.VBGMM` 中,参数必须在初始化对象时传递,而不是通过 ``fit`` 。现在 ``fit`` 只接受数据作为输入参数。 - `GMM` 模块中的方法 ``rvs`` 和 ``decode`` 现在已弃用。应使用 ``sample`` 和 ``score`` 或 ``predict`` 代替。 - 单变量特征选择对象中的属性 ``_scores`` 和 ``_pvalues`` 现在已弃用。应使用 ``scores_`` 或 ``pvalues_`` 代替。 - 在 :class:`~linear_model.LogisticRegression` 、:class:`~svm.LinearSVC` 、:class:`~svm.SVC` 和 :class:`~svm.NuSVC` 中, ``class_weight`` 参数现在是初始化参数,而不是拟合参数。这使得对该参数进行网格搜索成为可能。 - LFW ``data`` 现在总是形状 ``(n_samples, n_features)`` ,以与 Olivetti 人脸数据集保持一致。使用 ``images`` 和 ``pairs`` 属性来访问自然图像形状。 - 在 :class:`~svm.LinearSVC` 中, ``multi_class`` 参数的含义已更改。选项现在是 ``'ovr'`` 和 ``'crammer_singer'`` ,默认值为 ``'ovr'`` 。这不会改变默认行为,但希望不会那么令人困惑。 - 类 `feature_selection.text.Vectorizer` 已弃用,并被 `feature_selection.text.TfidfVectorizer` 取代。 - 文本特征提取的预处理器/分析器嵌套结构已被移除。所有这些功能现在都直接作为平坦构造函数参数传递给 `feature_selection.text.TfidfVectorizer` 和 `feature_selection.text.CountVectorizer` ,特别是以下参数现在被使用: - ``analyzer`` 可以是 ``'word'`` 或 ``'char'`` 以切换默认分析方案,或使用特定的 Python 可调用对象(如之前一样)。 - ``tokenizer`` 和 ``preprocessor`` 已被引入,以使在新 API 下仍然可以自定义这些步骤。 - ``input`` 明确控制如何解释传递给 ``fit`` 和 ``predict`` 的序列:文件名、文件对象或直接(字节或 Unicode)字符串。 - 字符集解码默认是显式且严格的。 - 无论是否拟合, ``vocabulary`` 现在都存储在 ``vocabulary_`` 属性中,以与项目约定保持一致。 - 类 `feature_selection.text.TfidfVectorizer` 现在直接继承自 `feature_selection.text.CountVectorizer` ,以使网格搜索变得简单。 - `_BaseHMM` 模块中的方法 ``rvs`` 现已弃用。应改用 ``sample`` 。 - `_BaseHMM` 模块中的波束修剪选项已被移除,因为它难以被 Cython 化。如果你感兴趣,可以通过 git 查看历史代码。 - SVMlight 格式加载器现在支持同时包含零基和一基列索引的文件,因为这两种情况在实际应用中都会出现。 - 类 :class:`~model_selection.ShuffleSplit` 的参数现在与 :class:`~model_selection.StratifiedShuffleSplit` 一致。参数 ``test_fraction`` 和 ``train_fraction`` 已弃用并重命名为 ``test_size`` 和 ``train_size`` ,并且可以接受 ``float`` 和 ``int`` 。 - 类 `Bootstrap` 的参数现在与 :class:`~model_selection.StratifiedShuffleSplit` 一致。参数 ``n_test`` 和 ``n_train`` 已弃用并重命名为 ``test_size`` 和 ``train_size`` ,并且可以接受 ``float`` 和 ``int`` 。 - 在 :ref:`neighbors` 中的类添加了参数 ``p`` ,以指定最近邻搜索的任意 Minkowski 度量。 人员 ---- * 282 `Andreas Müller`_ * 239 `Peter Prettenhofer`_ * 198 `Gael Varoquaux`_ * 129 `Olivier Grisel`_ * 114 `Mathieu Blondel`_ * 103 Clay Woolam * 96 `Lars Buitinck`_ * 88 `Jaques Grobler`_ * 82 `Alexandre Gramfort`_ * 50 `Bertrand Thirion`_ * 50 `Bertrand Thirion`_ * 42 `Robert Layton`_ * 28 flyingimmidev * 26 `Jake Vanderplas`_ * 26 Shiqiao Du * 21 `Satrajit Ghosh`_ * 17 `David Marek`_ * 17 `Gilles Louppe`_ * 14 `Vlad Niculae`_ * 11 Yannick Schwartz * 10 `Fabian Pedregosa`_ * 9 fcostin * 7 Nick Wilson * 5 Adrien Gaidon * 5 `Nicolas Pinto`_ * 4 `David Warde-Farley`_ * 5 Nelle Varoquaux * 5 Emmanuelle Gouillart * 3 Joonas Sillanpää * 3 Paolo Losi * 2 Charles McCarthy * 2 Roy Hyunjin Han * 2 Scott White * 2 ibayer * 1 Brandyn White * 1 Carlos Scheidegger * 1 Claire Revillet * 1 Conrad Lee * 1 `Edouard Duchesnay`_ * 1 Jan Hendrik Metzen * 1 Meng Xinfan * 1 `Rob Zinkov`_ * 1 Shiqiao * 1 Udi Weinsberg * 1 Virgile Fritsch * 1 Xinfan Meng * 1 Yaroslav Halchenko * 1 jansoe * 1 Leon Palafox .. _changes_0_10: 版本 0.10 ======== **2012年1月11日** 更新日志 -------- - 不再支持 Python 2.5 兼容性;使用 scikit-learn 所需的最低 Python 版本现在是 2.6。 - 使用图拉索算法进行 :ref:`稀疏逆协方差` 估计,并附带交叉验证估计器,由 `盖尔·瓦罗夸`_ 提供 - 由 `布莱恩·霍尔特`_ 、 `彼得·普伦滕霍费尔`_ 、 `萨特拉吉特·戈什`_ 和 `吉尔斯·卢普`_ 提供的新 :ref:`树 ` 模块。该模块附带完整的文档和示例。 - 由 `吉尔斯·卢普`_ 修复了 RFE 模块中的一个错误(问题 #378)。 - 由 `布莱恩·霍尔特`_ 修复了 :ref:`svm` 模块中的内存泄漏问题(问题 #367)。 - 由 `法比安·佩德罗索`_ 等人加快了测试速度。 - 由罗伯特·莱顿添加的轮廓系数聚类分析评估指标作为 :func:`~sklearn.metrics.silhouette_score` 。 - 修复了 :ref:`k_means` 中处理 ``n_init`` 参数的错误:聚类算法过去运行 ``n_init`` 次,但保留了最后一次解决方案而不是最佳解决方案,由 `奥利维尔·格里塞尔`_ 修复。 - :ref:`sgd` 模块中的小重构;整合了密集和稀疏 预测方法;通过在拟合后将模型参数转换为Fortran风格的数组来增强测试时间性能(仅限多类)。 - 增加了调整互信息指标作为 :func:`~sklearn.metrics.adjusted_mutual_info_score` ,由Robert Layton添加。 - 来自libsvm/liblinear的SVC/SVR/LinearSVC/LogisticRegression模型现在支持通过样本数量对C正则化参数进行缩放,由 `Alexandre Gramfort`_ 实现。 - 新的 :ref:`集成方法 ` 模块,由 `Gilles Louppe`_ 和 `Brian Holt`_ 开发。该模块包含了随机森林算法和额外树方法,以及文档和示例。 - :ref:`异常检测 ` :异常和新生检测,由:user:`Virgile Fritsch ` 实现。 - :ref:`核近似 ` :实现核近似的变换,用于非线性核上的快速SGD,由 `Andreas Müller`_ 开发。 - 修复了由于原子交换在 :ref:`OMP` 中的错误,由 `Vlad Niculae`_ 修复。 - :ref:`稀疏编码器 ` ,由 `Vlad Niculae`_ 开发。 - :ref:`小批量K均值 ` 性能改进,由 `Olivier Grisel`_ 实现。 - :ref:`K均值 ` 对稀疏矩阵的支持,由 `Mathieu Blondel`_ 实现。 - 改进了开发者和 :mod:`sklearn.utils` 模块的文档,由 `Jake Vanderplas`_ 完成。 - 向量化20新闻组数据集加载器 (:func:`~sklearn.datasets.fetch_20newsgroups_vectorized` ),由 `Mathieu Blondel`_ 实现。 - :ref:`多类分类 ` ,由 `Lars Buitinck`_ 实现。 - 稀疏矩阵的均值和方差的快速计算工具,由 `Mathieu Blondel`_ 实现。 - 使 :func:`~sklearn.preprocessing.scale` 和 `sklearn.preprocessing.Scaler` 在稀疏矩阵上工作,由 `Olivier Grisel`_ 实现。 - 使用决策树和/或树森林的特征重要性,由 `Gilles Louppe`_ 实现。 - 随机树森林的并行实现,由 `Gilles Louppe`_ 实现。 - `sklearn.cross_validation.ShuffleSplit` 可以对训练集和测试集进行子采样,由 `Olivier Grisel`_ 实现。 - 文档构建中的错误已由 `Andreas Müller`_ 修复。 API 变更摘要 ------------ 以下是升级到 scikit-learn 版本 0.9 时的代码迁移说明: - 一些可能会覆盖其输入以节省内存的估计器之前有 ``overwrite_`` 参数;这些参数已被替换为 ``copy_`` 参数,其含义完全相反。 这特别影响 :mod:`~sklearn.linear_model` 模块中的一些估计器。默认行为仍然是复制所有传入的内容。 - SVMlight 数据集加载器 :func:`~sklearn.datasets.load_svmlight_file` 不再支持一次加载两个文件;请改用 ``load_svmlight_files`` 。此外,(未使用的) ``buffer_mb`` 参数已移除。 - :ref:`sgd` 模块中的稀疏估计器现在使用密集参数向量 ``coef_`` 而不是 ``sparse_coef_`` 。这显著提高了测试时间性能。 - :ref:`covariance` 模块现在有一个稳健的协方差估计器,即最小协方差行列式估计器。 - :mod:`~sklearn.metrics.cluster` 中的聚类评估指标已重构,但这些更改是向后兼容的。它们已移动到 `metrics.cluster.supervised` 中,以及包含轮廓系数的 `metrics.cluster.unsupervised` 。 - ``permutation_test_score`` 函数现在与 ``cross_val_score`` 的行为相同(即使用跨折叠的平均分数。) - 交叉验证生成器现在默认使用整数索引( ``indices=True`` )而不是布尔掩码。这使得与稀疏矩阵数据一起使用更加直观。 - 用于稀疏编码的函数 ``sparse_encode`` 和 ``sparse_encode_parallel`` 已合并到 :func:`~sklearn.decomposition.sparse_encode` 中,并且数组的形状已转置,以便与矩阵分解设置保持一致,而不是回归设置。 - 修复了SVMlight/LibSVM文件格式处理中的一个偏差错误; 使用 :func:`~sklearn.datasets.dump_svmlight_file` 生成的文件应重新生成。 (它们应该继续工作,但意外地多了一个额外的零列。) - ``BaseDictionaryLearning`` 类已被 ``SparseCodingMixin`` 替换。 - `sklearn.utils.extmath.fast_svd` 已重命名为 :func:`~sklearn.utils.extmath.randomized_svd` ,并且默认的过采样现在固定为10个额外的随机向量, 而不是将提取的组件数量加倍。新的行为遵循参考论文。 贡献者 ------ 自上次发布以来,以下人员为scikit-learn做出了贡献: * 246 `Andreas Müller`_ * 242 `Olivier Grisel`_ * 220 `Gilles Louppe`_ * 183 `Brian Holt`_ * 166 `Gael Varoquaux`_ * 144 `Lars Buitinck`_ * 73 `Vlad Niculae`_ * 65 `Peter Prettenhofer`_ * 64 `Fabian Pedregosa`_ * 60 Robert Layton * 55 `Mathieu Blondel`_ * 52 `Jake Vanderplas`_ * 44 Noel Dawe * 38 `Alexandre Gramfort`_ * 24 :user:`Virgile Fritsch ` * 23 `Satrajit Ghosh`_ * 3 Jan Hendrik Metzen * 3 Kenneth C. Arnold * 3 Shiqiao Du * 3 Tim Sheerman-Chase * 3 `Yaroslav Halchenko`_ * 2 Bala Subrahmanyam Varanasi * 2 DraXus * 2 Michael Eickenberg * 1 Bogdan Trach * 1 Félix-Antoine Fortin * 1 Juan Manuel Caicedo Carvajal * 1 Nelle Varoquaux * 1 `Nicolas Pinto`_ * 1 Tiziano Zito * 1 Xinfan Meng .. _changes_0_9: 版本 0.9 ======== **2011年9月21日** scikit-learn 0.9 于2011年9月发布,距离0.8版本发布三个月,包括新的模块 :ref:`manifold` , :ref:`dirichlet_process` 以及几种新算法和文档改进。 此版本还包括由 `Vlad Niculae`_ 开发的字典学习工作,作为 `Google Summer of Code `_ 计划的一部分。 .. |banner1| image:: ../auto_examples/manifold/images/thumb/sphx_glr_plot_compare_methods_thumb.png :target: ../auto_examples/manifold/plot_compare_methods.html .. |banner2| image:: ../auto_examples/linear_model/images/thumb/sphx_glr_plot_omp_thumb.png :target: ../auto_examples/linear_model/plot_omp.html .. |banner3| image:: ../auto_examples/decomposition/images/thumb/sphx_glr_plot_kernel_pca_thumb.png :target: ../auto_examples/decomposition/plot_kernel_pca.html .. |center-div| raw:: html
.. |end-div| raw:: html
|center-div| |banner2| |banner1| |banner3| |end-div| 更新日志 -------- - 由 `Jake Vanderplas`_ 和 `Fabian Pedregosa`_ 新增的 :ref:`manifold` 模块。 - 由 `Alexandre Passos`_ 新增的 :ref:`Dirichlet Process ` 高斯混合模型。 - 由 `Jake Vanderplas`_ 重构的 :ref:`neighbors` 模块:整体重构,支持输入稀疏矩阵,速度和文档改进。详见下一部分的完整API变更列表。 - 由 `Gilles Louppe`_ 改进的 :ref:`feature_selection` 模块:RFE类的重构,文档重写,提高效率和少量API变更。 - 由 `Vlad Niculae`_ 、 `Gael Varoquaux`_ 和 `Alexandre Gramfort`_ 新增的 :ref:`SparsePCA` 。 - 由于 :user:`Jean Kossaifi ` 的工作,打印估计器现在在不同架构和Python版本下表现一致。 - 由 `Mathieu Blondel`_ 和 `Lars Buitinck`_ 新增的 :ref:`libsvm/svmlight 格式加载器 ` 。 - 文档改进:由 `Fabian Pedregosa`_ 在示例画廊中添加缩略图。 - 在 :ref:`svm` 模块中的重要错误修复(段错误,性能不佳)由 `Fabian Pedregosa`_ 完成。 - 由 `Lars Buitinck`_ 新增的 :ref:`多项式朴素贝叶斯 ` 和 :ref:`伯努利朴素贝叶斯 ` 。 - 文本特征提取优化由 Lars Buitinck 完成。 - 卡方特征选择 (:func:`feature_selection.chi2` ) 由 `Lars Buitinck`_ 实现。 - :ref:`sample_generators` 模块重构由 `Gilles Louppe`_ 完成 - :ref:`multiclass` 由 `Mathieu Blondel`_ 实现 - Ball tree 重写由 `Jake Vanderplas`_ 完成 - :ref:`dbscan` 算法的实现由 Robert Layton 完成 - Kmeans 预测和转换由 Robert Layton 完成 - 预处理模块重构由 `Olivier Grisel`_ 完成 - 更快的均值漂移由 Conrad Lee 完成 - 新的 ``Bootstrap`` 、:ref:`ShuffleSplit` 以及在交叉验证方案中的其他各种改进由 `Olivier Grisel`_ 和 `Gael Varoquaux`_ 完成 - 调整兰德指数和 V-Measure 聚类评估指标由 `Olivier Grisel`_ 完成 - 添加了 :class:`Orthogonal Matching Pursuit ` 由 `Vlad Niculae`_ 完成 - 在 :ref:`feature_extraction` 模块中添加了 2D-patch 提取器实用程序由 `Vlad Niculae`_ 完成 - 实现了 :class:`~linear_model.LassoLarsCV` (使用 Lars 算法的交叉验证 Lasso 求解器)和 :class:`~linear_model.LassoLarsIC` (Lars 中的 BIC/AIC 模型选择)由 `Gael Varoquaux`_ 和 `Alexandre Gramfort`_ 完成 - 对 :func:`metrics.roc_curve` 的可扩展性改进由 Olivier Hervieu 完成 - 距离辅助函数 :func:`metrics.pairwise_distances` 和 :func:`metrics.pairwise.pairwise_kernels` 由 Robert Layton 完成 - :class:`Mini-Batch K-Means ` 由 Nelle Varoquaux 和 Peter Prettenhofer 完成 - mldata 实用程序由 Pietro Berkes 完成 - :ref:`olivetti_faces_dataset` 由 `David Warde-Farley`_ 完成 API 变更总结 ------------- 以下是当从 scikit-learn 版本 0.8 升级时的代码迁移说明: - ``scikits.learn`` 包被重命名为 ``sklearn`` 。为了向后兼容,仍然存在 ``scikits.learn`` 包别名。 依赖于 scikit-learn 0.9+ 的第三方项目应升级其代码库。例如,在 Linux / MacOSX 上只需运行(首先进行备份!):: find -name "*.py" | xargs sed -i 's/\bscikits.learn\b/sklearn/g' - 估计器不再接受将模型参数作为 ``fit`` 参数: 相反,所有参数必须仅作为构造函数参数传递或使用从 :class:`~base.BaseEstimator` 继承的现在公开的 ``set_params`` 方法。 某些估计器仍然可以在 ``fit`` 上接受关键字参数,但这是受限于数据依赖值(例如,从 ``X`` 数据矩阵预先计算的 Gram 矩阵或亲和矩阵)。 - ``cross_val`` 包已重命名为 ``cross_validation`` ,尽管为了向后兼容性也设置了 ``cross_val`` 包别名。 依赖于 scikit-learn 0.9+ 的第三方项目应升级其代码库。例如,在 Linux / MacOSX 上只需运行(首先进行备份!):: find -name "*.py" | xargs sed -i 's/\bcross_val\b/cross_validation/g' - ``sklearn.cross_validation.cross_val_score`` 函数的 ``score_func`` 参数现在期望仅接受 ``y_test`` 和 ``y_predicted`` 作为分类和回归任务的参数,或无监督估计器的 ``X_test`` 。 - 支持向量机算法的 ``gamma`` 参数默认设置为 ``1 / n_features`` ,而不是 ``1 / n_samples`` 。 - ``sklearn.hmm`` 已被标记为孤立:它将在版本 0.11 中从 scikit-learn 中移除,除非有人站出来贡献文档、示例并修复潜在的数值稳定性问题。 - ``sklearn.neighbors`` 已成为一个子模块。之前可用的两个估计器 ``NeighborsClassifier`` 和 ``NeighborsRegressor`` 已被标记为已弃用。它们的功能已被分配到五个新类中:用于无监督邻居搜索的 ``NearestNeighbors`` ,用于监督分类问题的 ``KNeighborsClassifier`` 和 ``RadiusNeighborsClassifier`` ,以及用于监督回归问题的 ``KNeighborsRegressor`` 和 ``RadiusNeighborsRegressor`` 。 - ``sklearn.ball_tree.BallTree`` 已移至 ``sklearn.neighbors.BallTree`` 。使用前者将生成警告。 - ``sklearn.linear_model.LARS()`` 及相关类(LassoLARS、 LassoLARSCV 等)已重命名为 ``sklearn.linear_model.Lars()`` 。 - ``sklearn.metrics.pairwise`` 中的所有距离度量和核现在都有一个 Y 参数,默认值为 None。如果未给出,结果是 Y 中每个样本之间的距离(或核相似度)。如果给出,结果是 X 中样本与 Y 中样本之间的成对距离(或核相似度)。 - ``sklearn.metrics.pairwise.l1_distance`` 现在称为 ``manhattan_distance`` ,默认返回成对距离。对于逐元素距离,请将参数 ``sum_over_features`` 设置为 ``False`` 。 向后兼容包别名和其他已弃用的类和函数将在版本 0.11 中移除。 人员 ---- 38 人为此版本做出了贡献。 - 387 `Vlad Niculae`_ - 320 `Olivier Grisel`_ - 192 `Lars Buitinck`_ - 179 `Gael Varoquaux`_ - 168 `Fabian Pedregosa`_ ( `INRIA`_ , `Parietal Team`_ ) - 127 `Jake Vanderplas`_ - 120 `Mathieu Blondel`_ - 85 `Alexandre Passos`_ - 67 `Alexandre Gramfort`_ - 57 `Peter Prettenhofer`_ - 56 `Gilles Louppe`_ - 42 Robert Layton - 38 Nelle Varoquaux - 32 :user:`Jean Kossaifi ` - 30 Conrad Lee - 22 Pietro Berkes - 18 andy - 17 David Warde-Farley - 12 Brian Holt - 11 Robert - 8 Amit Aides - 8 :user:`Virgile Fritsch ` - 7 `Yaroslav Halchenko`_ - 6 Salvatore Masecchia - 5 Paolo Losi - 4 Vincent Schut - 3 Alexis Metaireau - 3 Bryan Silverthorn - 3 `Andreas Müller`_ - 2 Minwoo Jake Lee - 1 Emmanuelle Gouillart - 1 Keith Goodman - 1 Lucas Wiman - 1 `Nicolas Pinto`_ - 1 Thouis (Ray) Jones - 1 Tim Sheerman-Chase .. _changes_0_8: 版本 0.8 ======== **2011年5月11日** scikit-learn 0.8 于 2011 年 5 月发布,距离第一个版本发布一个月后。 "国际" `scikit-learn 编码冲刺 `_ 并且通过包含重要模块来标记::ref:`层次聚类 ` ,:ref:`交叉分解 ` ,:ref:`非负矩阵分解 ` ,对 Python 3 的初步支持以及重要的增强和错误修复。 更新日志 -------- 在此版本中引入了几个新模块: - 由 Vincent Michel、 `Bertrand Thirion`_ 、 `Alexandre Gramfort`_ 和 `Gael Varoquaux`_ 新增的 :ref:`层次聚类 ` 模块。 - 由 `Mathieu Blondel`_ 实现的 :ref:`核主成分分析 ` 。 - 由 `Olivier Grisel`_ 提供的 :ref:`野外标记人脸数据集 ` 。 - 由 `Edouard Duchesnay`_ 新增的 :ref:`交叉分解 ` 模块。 - 由 `Vlad Niculae`_ 提供的 :ref:`非负矩阵分解 ` 模块。 - 在 :ref:`协方差 ` 模块中由 :user:`Virgile Fritsch ` 实现的 :ref:`近似收缩算法 ` 。 其他一些模块也得到了显著的改进或清理。 - 对 Python 3 的初步支持:构建和导入干净,一些模块可用,而其他模块的测试失败,由 `Fabian Pedregosa`_ 提供。 - :class:`~decomposition.PCA` 现在可以从 Pipeline 对象中使用,由 `Olivier Grisel`_ 提供。 - 由 `Olivier Grisel`_ 提供的 :ref:`性能指南 ` 。 - 修复了 libsvm 绑定中的内存泄漏,64 位更安全的 BallTree,由 Lars Buitinck 提供。 - 在 :ref:`k均值 ` 算法中修复了错误和样式,由 Jan Schlüter 提供。 - 在高斯混合模型中添加了 converged 属性,由 Vincent Schut 提供。 - 在 :class:`~discriminant_analysis.LinearDiscriminantAnalysis` 中实现了 ``transform`` 、 ``predict_log_proba`` ,由 `Mathieu Blondel`_ 提供。 - 在 :ref:`支持向量机 ` 模块中的重构和错误修复,由 `Fabian Pedregosa`_ 、 `Gael Varoquaux`_ 和 Amit Aides 提供。 - 重构了 SGD 模块(删除了代码重复,更好的变量命名),添加了样本权重的接口,由 `Peter Prettenhofer`_ 提供。 - 用 Cython 包装了 BallTree,由 Thouis (Ray) Jones 提供。 - 添加了函数 :func:`svm.l1_min_c` ,由 Paolo Losi 提供。 - 拼写错误、文档风格等由 `Yaroslav Halchenko`_ 、 `Gael Varoquaux`_ 、 `Olivier Grisel`_ 、Yann Malet、 `Nicolas Pinto`_ 、Lars Buitinck 和 `Fabian Pedregosa`_ 负责。 贡献者 ------- 以下是使本次发布成为可能的人员,按提交次数排序: - 159 `Olivier Grisel`_ - 96 `Gael Varoquaux`_ - 96 `Vlad Niculae`_ - 94 `Fabian Pedregosa`_ - 36 `Alexandre Gramfort`_ - 32 Paolo Losi - 31 `Edouard Duchesnay`_ - 30 `Mathieu Blondel`_ - 25 `Peter Prettenhofer`_ - 22 `Nicolas Pinto`_ - 11 :user:`Virgile Fritsch ` - 7 Lars Buitinck - 6 Vincent Michel - 5 `Bertrand Thirion`_ - 4 Thouis (Ray) Jones - 4 Vincent Schut - 3 Jan Schlüter - 2 Julien Miotte - 2 `Matthieu Perrot`_ - 2 Yann Malet - 2 `Yaroslav Halchenko`_ - 1 Amit Aides - 1 `Andreas Müller`_ - 1 Feth Arezki - 1 Meng Xinfan .. _changes_0_7: 版本 0.7 ======== **2011年3月2日** scikit-learn 0.7 于2011年3月发布,大约在0.6版本发布后的三个月。此版本的特点是现有算法(如k-最近邻和K-均值算法)的速度改进,以及包含用于计算岭广义交叉验证解决方案的高效算法。与之前的版本不同,此版本没有添加新的模块。 更新日志 --------- - 高斯混合模型采样性能改进 [Jan Schlüter]。 - 在 :class:`~linear_model.RidgeCV` 中实现高效的留一法交叉验证岭回归 [ `Mathieu Blondel`_ ] - 在 :func:`linear_model.lars_path` 中更好地处理共线性和早期停止 [ `Alexandre Gramfort`_ 和 `Fabian Pedregosa`_ ]。 - 修复liblinear标签顺序和系数符号问题 [Dan Yamins, Paolo Losi, `Mathieu Blondel`_ 和 `Fabian Pedregosa`_ ]。 - 高维空间中最近邻算法的性能改进 [ `Fabian Pedregosa`_ ]。 - :class:`~cluster.KMeans` 的性能改进 [ `Gael Varoquaux`_ 和 `James Bergstra`_ ]. - 基于SVM的类的完整性检查 [ `Mathieu Blondel`_ ]. - 重构 `neighbors.NeighborsClassifier` 和 :func:`neighbors.kneighbors_graph` :为k-最近邻搜索添加了不同的算法,并实现了一种更稳定的算法来寻找重心权重。还为该模块添加了一些开发者文档,更多信息请参见 `notes_neighbors `_ [ `Fabian Pedregosa`_ ]. - 文档改进:添加了 `pca.RandomizedPCA` 和 :class:`~linear_model.LogisticRegression` 到类参考中。还添加了用于聚类的矩阵引用和其他修复 [ `Gael Varoquaux`_ , `Fabian Pedregosa`_ , `Mathieu Blondel`_ , `Olivier Grisel`_ , Virgile Fritsch , Emmanuelle Gouillart] - 在利用liblinear_的类中绑定decision_function,稠密和稀疏变体,如 :class:`~svm.LinearSVC` 或 :class:`~linear_model.LogisticRegression` [ `Fabian Pedregosa`_ ]. - 对 :func:`metrics.pairwise.euclidean_distances` 和 `pca.RandomizedPCA` 的性能和API改进 [ `James Bergstra`_ ]. - 修复在NetBSD下的编译问题 [Kamel Ibn Hassen Derouiche] - 允许在 `hmm.GaussianHMM` 中输入不同长度的序列 [ `Ron Weiss`_ ]. - 修复由不正确的索引引起的亲和传播中的错误 [Xinfan Meng] 贡献者 ------ 使本次发布成为可能的人员,按提交次数排序: - 85 `Fabian Pedregosa`_ - 67 `Mathieu Blondel`_ - 20 `Alexandre Gramfort`_ - 19 `James Bergstra`_ - 14 Dan Yamins - 13 `Olivier Grisel`_ - 12 `Gael Varoquaux`_ - 4 `Edouard Duchesnay`_ - 4 `Ron Weiss`_ - 2 Satrajit Ghosh - 2 Vincent Dubourg - 1 Emmanuelle Gouillart - 1 Kamel Ibn Hassen Derouiche - 1 Paolo Losi - 1 VirgileFritsch - 1 `Yaroslav Halchenko`_ - 1 Xinfan Meng .. _changes_0_6: 版本 0.6 ======== **2010年12月21日** scikit-learn 0.6 于2010年12月发布。这一版本的特点是引入了几个新模块,并对旧模块进行了普遍的重命名。同时,还增加了新的示例,包括应用于真实世界数据集的应用。 更新日志 --------- - 由Peter Prettenhofer新增的 `随机梯度下降 `_ 模块。该模块附带完整的文档和示例。 - 改进的svm模块:内存消耗减少了50%,自动设置类别权重的启发式方法,以及为样本分配权重的可能性(参见示例 :ref:`sphx_glr_auto_examples_svm_plot_weighted_samples.py` )。 - 由Vincent Dubourg新增的 :ref:`gaussian_process` 模块。该模块同样拥有出色的文档和一些非常简洁的示例。可以查看 example_gaussian_process_plot_gp_regression.py 或 example_gaussian_process_plot_gp_probabilistic_classification_after_regression.py 来了解其功能。 - 现在可以使用liblinear的多类SVC(在 :class:`~svm.LinearSVC` 中使用multi_class选项)。 - 文本特征提取的新功能和性能改进。 - 改进了稀疏矩阵支持,包括主要类(:class:`~model_selection.GridSearchCV` )以及模块 sklearn.svm.sparse 和 sklearn.linear_model.sparse。 - 新增了许多酷炫的示例,并创建了一个使用真实世界数据集的新部分。这些包括::ref:`sphx_glr_auto_examples_applications_plot_face_recognition.py` ,:ref:`sphx_glr_auto_examples_applications_plot_species_distribution_modeling.py` ,:ref:`sphx_glr_auto_examples_applications_wikipedia_principal_eigenvector.py` 等。 - 更快的 :ref:`least_angle_regression` 算法。现在在最坏情况下比R版本快2倍,在某些情况下甚至快达10倍。 - 更快的坐标下降算法。特别是,lasso的完整路径版本(:func:`linear_model.lasso_path` )速度更快。 比以前快了200倍。 - 现在可以从 :class:`~linear_model.LogisticRegression` 模型中获取概率估计。 - 模块重命名:glm 模块已重命名为 linear_model,gmm 模块已并入更通用的混合模型,sgd 模块已并入 linear_model。 - 大量的错误修复和文档改进。 贡献者 ------ 使本次发布成为可能的人员,按提交次数排序: * 207 `Olivier Grisel`_ * 167 `Fabian Pedregosa`_ * 97 `Peter Prettenhofer`_ * 68 `Alexandre Gramfort`_ * 59 `Mathieu Blondel`_ * 55 `Gael Varoquaux`_ * 33 Vincent Dubourg * 21 `Ron Weiss`_ * 9 Bertrand Thirion * 3 `Alexandre Passos`_ * 3 Anne-Laure Fouque * 2 Ronan Amicel * 1 `Christian Osendorfer`_ .. _changes_0_5: 版本 0.5 ======== **2010年10月11日** 更新日志 --------- 新增类 ----------- - 在 ``svm`` 和 ``linear_model`` 模块中的一些分类器支持稀疏矩阵(参见 `svm.sparse.SVC` , `svm.sparse.SVR` , `svm.sparse.LinearSVC` , `linear_model.sparse.Lasso` , `linear_model.sparse.ElasticNet` ) - 新的 :class:`~pipeline.Pipeline` 对象,用于组合不同的估计器。 - 模块 :ref:`feature_selection` 中的递归特征消除例程。 - 在 linear_model 模块中添加了各种能够进行交叉验证的类(:class:`~linear_model.LassoCV` , :class:`~linear_model.ElasticNetCV` , 等)。 - 新的、更高效的 LARS 算法实现。该算法的 Lasso 变体也已实现。参见 :class:`~linear_model.lars_path` , :class:`~linear_model.Lars` 和 :class:`~linear_model.LassoLars` 。 - 新的隐马尔可夫模型模块(参见类 `hmm.GaussianHMM` , `hmm.MultinomialHMM` , `hmm.GMMHMM` ) - 新的特征提取模块(参见 :ref:`类参考 ` ) - 模块 sklearn.fastica 中的新 FastICA 算法 文档 ------------- - 改进了许多模块的文档,现在将叙述性文档与类参考分开。例如,请参见 `SVM 模块的文档 `_ 和完整的 `类参考 `_ 。 修复 ---- - API 变更:遵循 PEP-8 规范的变量命名,赋予更有意义的名称。 - 修复了在共享内存上下文(多进程)中运行 svm 模块的问题。 - 再次可以从 sphinx 文档生成 latex(以及 PDF)。 示例 ---- - 使用部分 mlcomp 数据集的新示例: ``sphx_glr_auto_examples_mlcomp_sparse_document_classification.py`` (已移除)和 :ref:`sphx_glr_auto_examples_text_plot_document_classification_20newsgroups.py` - 更多示例。 `请参见此处 `_ 完整的示例列表。 外部依赖 -------- - Joblib 现在是此包的依赖项,尽管它随附于(sklearn.externals.joblib)。 移除的模块 ---------- - 模块 ann(人工神经网络)已从发行版中移除。需要此类算法的用户应查看 pybrain。 杂项 ---- - 网页的新 sphinx 主题。 作者 ---- 以下是此版本作者的列表,按提交次数排序: * 262 Fabian Pedregosa * 240 Gael Varoquaux * 149 Alexandre Gramfort * 116 Olivier Grisel * 40 Vincent Michel * 38 Ron Weiss * 23 Matthieu Perrot * 10 Bertrand Thirion * 7 Yaroslav Halchenko * 9 VirgileFritsch * 6 Edouard Duchesnay * 4 Mathieu Blondel * 1 Ariel Rokem * 1 Matthieu Brucher 版本 0.4 ======== **2010年8月26日** 更新日志 -------- 此版本的主要变更包括: - 坐标下降算法(Lasso、ElasticNet)的重构与速度改进(大约快了 100 倍)。 - 与R的包GLMNET保持一致的坐标下降重构(及错误修复)。 - 新的metrics模块。 - 由Ron Weiss贡献的新GMM模块。 - 实现了LARS算法(目前不包括Lasso变体)。 - feature_selection模块重新设计。 - 迁移到GIT作为版本控制系统。 - 移除过时的attrselect模块。 - 私有编译扩展的重命名(添加下划线)。 - 移除遗留的未维护代码。 - 文档改进(包括docstring和rst)。 - 改进构建系统以(可选地)与MKL链接。同时,在没有系统级BLAS的情况下提供一个精简的BLAS实现。 - 大量新增示例。 - 许多,许多错误修复... 作者 ---- 此版本的提交者列表如下(按提交次数排序): * 143 Fabian Pedregosa * 35 Alexandre Gramfort * 34 Olivier Grisel * 11 Gael Varoquaux * 5 Yaroslav Halchenko * 2 Vincent Michel * 1 Chris Filo Gorgolewski 早期版本 ======== 早期版本包括了Fred Mailhot、David Cooke、David Huard、Dave Morrill、Ed Schofield、Travis Oliphant、Pearu Peterson的贡献。