机器之心整理
参与:思源
Scikit-learn 中文文档已经由 ApacheCN 完成校对,这对于国内机器学习用户有非常大的帮助。该文档自 2017 年 11 月初步完成校对,目前很多细节都已经得到完善。该中文文档包含了分类、回归、聚类和降维等经典机器学习任务,并提供了完整的使用教程与 API 注释。入门读者也可以借此文档与教程从实践出发进入数据科学与机器学习的领域。
中文文档地址:http://sklearn.apachecn.org
Scikit-learn 是基于 Python 的开源机器学习库,它基于 NumPy 和 SciPy 等科学计算库,并支持支持向量机、随即森林、梯度提升树、K 均值聚类等学习算法。Scikit-learn 目前主要由社区成员自发进行维护,且专注于构建机器学习领域内经广泛验证的成熟算法。
Scikit-learn 项目最早为数据科学家 David Cournapeau 于 2007 年发起的 scikits.learn 项目,且 Scikit 的名字可视为 SciPy Toolkit,即 SciPy 的第三方扩展。Scikit-learn 大部分都是由 Python 构建,但还是有很多核心算法是由 Cython 完成而实现更好的效果,例如支持向量机就是由 Cython 构建。
在监督学习部分,Scikit-learn 提供了广义线性模型、支持向量机、最近邻算法、高斯过程、朴素贝叶斯、决策树和集成方法等算法教程,同时还介绍了特征选择、随即梯度下降算法、线性与二次判别分析等在监督学习中非常重要的概念。
除了监督学习,半监督学习中的标签传播算法和无监督学习中的聚类与降维算法都有非常多的教程。此外,在模型选择中,文档教程描述了交叉验证的使用、估计器超参数的调整、模型评估方法和模型持久化概念等。
数据预处理是机器学习非常重要的部分,我们可以使用归一化等方法大大降低前向传播与学习算法的计算复杂度,也可以利用缺失值插补和特征提取等方法增加数据的有效性。以下选取了 SVM 的部分使用教程,读者可借此了解 Scikit-learn 中文文档的组织形式与基本内容,更完整的内容前查看原文档。
支持向量机 (SVMs) 可用于以下监督学习算法分类、回归和异常检测。支持向量机的优势在于:
- 在高维空间中非常高效。
- 即使在数据维度比样本数量大的情况下仍然有效。
- 在决策函数(称为支持向量)中使用训练集的子集,因此它也是高效利用内存的。
- 通用性:不同的核函数 核函数 与特定的决策函数一一对应。
支持向量机的缺点包括:
- 如果特征数量比样本数量大得多,在选择核函数时要避免过拟合,而且正则化项是非常重要的。
- 支持向量机不直接提供概率估计,这些都是使用昂贵的五次交叉验算计算的。
在 scikit-learn 中,支持向量机提供 dense(numpy.ndarray , 可以通过 numpy.asarray 进行转换) 和 sparse(任何 scipy.sparse)样例向量作为输出。然而,要使用支持向量机来对 sparse 数据作预测,它必须已经拟合这样的数据。使用 C 代码的 numpy.ndarray (dense) 或者带有 dtype=float64 的 scipy.sparse.csr_matrix (sparse) 来优化性能。
分类
SVC、NuSVC 和 LinearSVC 能在数据集中实现多元分类:
SVC 和 NuSVC 是相似的方法,但是接受稍许不同的参数设置并且有不同的数学方程。另一方面,LinearSVC 是另一个实现线性核函数的支持向量分类。记住 LinearSVC 不接受关键词 kernel,因为它被假设为线性的。它也缺少一些 SVC 和 NuSVC 的成员(members)比如 support_。
和其他分类器一样,SVC、NuSVC 和 LinearSVC 将两个数组作为输入:[n_samples, n_features] 大小的数组 X 作为训练样本,[n_samples] 大小的数组 y 作为类别标签 (字符串或者整数):
代码语言:javascript复制>>> from sklearn import svm
>>> X = [[0, 0], [1, 1]]
>>> y = [0, 1]
>>> clf = svm.SVC()
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
在拟合后, 这个模型可以用来预测新的值:
代码语言:javascript复制>>> clf.predict([[2., 2.]])
array([1])
SVMs 决策函数取决于训练集的一些子集, 称作支持向量. 这些支持向量的部分特性可以在 support_vectors_、support_和 n_support 找到:
代码语言:javascript复制>>> # 获得支持向量
>>> clf.support_vectors_
array([[ 0., 0.],
[ 1., 1.]])
>>> # 获得支持向量的索引get indices of support vectors
>>> clf.support_
array([0, 1]...)
>>> # 为每一个类别获得支持向量的数量
>>> clf.n_support_
array([1, 1]...)
以上是 SVM 简单的介绍,这些内容都由 ApacheCN 翻自 Scikit-learn 。最后,感谢参与翻译文档的志愿者,正因为他们,开源社区才能有如此高质量的学习资料。
本文为机器之心整理,转载请联系本公众号获得授权。