- Scikit 学习教程
- Scikit Learn - 主页
- Scikit Learn - 简介
- Scikit Learn - 建模过程
- Scikit Learn - 数据表示
- Scikit Learn - 估计器 API
- Scikit Learn - 约定
- Scikit Learn - 线性建模
- Scikit Learn - 扩展线性建模
- 随机梯度下降
- Scikit Learn - 支持向量机
- Scikit Learn - 异常检测
- Scikit Learn - K 最近邻
- Scikit Learn - KNN 学习
- 使用朴素贝叶斯分类
- Scikit Learn - 决策树
- 随机决策树
- Scikit Learn - Boosting 方法
- Scikit Learn - 聚类方法
- 集群性能评估
- 使用 PCA 降维
- Scikit Learn 有用资源
- Scikit Learn - 快速指南
- Scikit Learn - 有用的资源
- Scikit Learn - 讨论
Scikit Learn - 约定
Scikit-learn 的对象共享一个统一的基本 API,由以下三个互补接口组成 -
估计器接口- 用于构建和拟合模型。
预测器接口- 用于进行预测。
转换器接口- 用于转换数据。
API 采用简单的约定,并以避免框架代码激增的方式指导设计选择。
公约的目的
约定的目的是确保 API 遵循以下广泛原则 -
一致性- 所有对象,无论是基本对象还是复合对象,都必须共享一个一致的接口,该接口进一步由一组有限的方法组成。
检查- 由学习算法确定的构造函数参数和参数值应存储并公开为公共属性。
类的不扩散- 数据集应表示为 NumPy 数组或 Scipy 稀疏矩阵,而超参数名称和值应表示为标准 Python 字符串,以避免框架代码的扩散。
组合- 算法无论是可表示为数据转换的序列或组合,还是自然地被视为在其他算法上参数化的元算法,都应该由现有的构建块来实现和组合。
合理的默认值- 在 scikit-learn 中,只要操作需要用户定义的参数,就会定义适当的默认值。此默认值应使操作以合理的方式执行,例如,为手头的任务提供基线解决方案。
各种约定
Sklearn 中可用的约定解释如下 -
类型铸造
它指出输入应转换为float64。在下面的示例中,其中sklearn.random_projection模块用于降低数据的维度,将对其进行解释 -
例子
import numpy as np from sklearn import random_projection rannge = np.random.RandomState(0) X = range.rand(10,2000) X = np.array(X, dtype = 'float32') X.dtype Transformer_data = random_projection.GaussianRandomProjection() X_new = transformer.fit_transform(X) X_new.dtype
输出
dtype('float32') dtype('float64')
在上面的例子中,我们可以看到 X 是float32 ,它被fit_transform(X)转换为float64。
改装及更新参数
估计器的超参数可以在通过set_params()方法构建后进行更新和重新拟合。让我们看下面的例子来理解它 -
例子
import numpy as np from sklearn.datasets import load_iris from sklearn.svm import SVC X, y = load_iris(return_X_y = True) clf = SVC() clf.set_params(kernel = 'linear').fit(X, y) clf.predict(X[:5])
输出
array([0, 0, 0, 0, 0])
一旦构建了估计器,上面的代码将通过SVC.set_params()将默认内核rbf更改为线性。
现在,以下代码将内核更改回 rbf 以重新拟合估计器并进行第二次预测。
例子
clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y) clf.predict(X[:5])
输出
array([0, 0, 0, 0, 0])
完整代码
以下是完整的可执行程序 -
import numpy as np from sklearn.datasets import load_iris from sklearn.svm import SVC X, y = load_iris(return_X_y = True) clf = SVC() clf.set_params(kernel = 'linear').fit(X, y) clf.predict(X[:5]) clf.set_params(kernel = 'rbf', gamma = 'scale').fit(X, y) clf.predict(X[:5])
多类和多标签拟合
在多类拟合的情况下,学习和预测任务都取决于拟合的目标数据的格式。使用的模块是sklearn.multiclass。检查下面的示例,其中多类分类器适合一维数组。
例子
from sklearn.svm import SVC from sklearn.multiclass import OneVsRestClassifier from sklearn.preprocessing import LabelBinarizer X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]] y = [0, 0, 1, 1, 2] classif = OneVsRestClassifier(estimator = SVC(gamma = 'scale',random_state = 0)) classif.fit(X, y).predict(X)
输出
array([0, 0, 1, 1, 2])
在上面的示例中,分类器适合多类标签的一维数组,因此Predict()方法提供相应的多类预测。但另一方面,也可以拟合二进制标签指示符的二维数组,如下所示 -
例子
from sklearn.svm import SVC from sklearn.multiclass import OneVsRestClassifier from sklearn.preprocessing import LabelBinarizer X = [[1, 2], [3, 4], [4, 5], [5, 2], [1, 1]] y = LabelBinarizer().fit_transform(y) classif.fit(X, y).predict(X)
输出
array( [ [0, 0, 0], [0, 0, 0], [0, 1, 0], [0, 1, 0], [0, 0, 0] ] )
同样,在多标签拟合的情况下,可以为一个实例分配多个标签,如下所示 -
例子
from sklearn.preprocessing import MultiLabelBinarizer y = [[0, 1], [0, 2], [1, 3], [0, 2, 3], [2, 4]] y = MultiLabelBinarizer().fit_transform(y) classif.fit(X, y).predict(X)
输出
array( [ [1, 0, 1, 0, 0], [1, 0, 1, 0, 0], [1, 0, 1, 1, 0], [1, 0, 1, 1, 0], [1, 0, 1, 0, 0] ] )
在上面的示例中,sklearn.MultiLabelBinarizer用于对多标签的二维数组进行二值化以适应。这就是为什么 Predict() 函数给出一个二维数组作为输出,每个实例都有多个标签。