所有的机器学习算法都是通过转换器(transformer)和估计器(estimator)实现的。

转换器

转换器是用于对数据进行处理的对象。在 scikit-learn 中,所有的转换器也是由一个类实现的,这个类包含了一些方法来对数据进行特征提取、特征选择、降维等操作。通常,我们使用 fit() 方法来学习如何对数据进行转换,使用 transform() 方法来对数据进行实际转换。例如:

1
2
3
4
5
6
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)

上面的代码创建了一个标准化转换器,并使用 fit() 方法学习了如何对数据进行标准化,然后使用 transform() 方法对训练数据和测试数据进行了实际的标准化操作。

除了使用 fit() 和 transform() 方法之外,还可以使用 fit_transform() 方法来直接对数据进行转换。例如:

1
2
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

在上面的代码中,fit_transform() 方法先使用 fit() 方法学习如何对数据进行标准化,然后使用 transform() 方法对训练数据和测试数据进行了实际的标准化操作。

估计器

估计器是用于建立机器学习模型的对象。在 scikit-learn 中,所有的估计器都是由一个类实现的,这个类包含了一些方法来拟合训练数据、预测新数据以及评估模型的性能等。通常,我们使用 fit() 方法来拟合训练数据,使用 predict() 方法来预测新数据。例如:

1
2
3
4
5
6
from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X_train, y_train)
#评估模型
y_pred = model.predict(X_test)

上面的代码创建了一个线性回归模型,并使用 fit() 方法拟合了训练数据。然后,使用 predict() 方法预测了测试数据的结果。

  • 用于分类的估计器:
    • sklearn.neighbors k-近邻算法
    • sklearn.naive_bayes 贝叶斯
    • sklearn.linear_model.LogisticRegression 逻辑回归
    • sklearn.tree 决策树与随机森林
  • 用于回归的估计器:
    • sklearn.linear_model.LinearRegression 线性回归
    • sklearn.linear_model.Ridge 岭回归
  • 用于无监督学习的估计器
    • sklearn.cluster.KMeans 聚类

pipeline

同时,还有一种名为 Pipeline 的方法可以把 estimator 和 transformer 组合起来,方便调用。例如:

1
2
3
4
5
6
7
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

pipeline = make_pipeline(StandardScaler(), LogisticRegression())
pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)

这个 Pipeline 就做了标准化和逻辑回归两个步骤。 总之,在使用估计器和转换器时,需要了解相应的 API 接口,以便正确地使用它们进行机器学习建模。

比较

对于转换器来说,fit()方法用于计算一些统计量,如均值、标准差等,以便转换器后续进行数据转换时使用。例如,在标准化转换器中,fit()方法计算出训练数据集每个特征的均值和标准差,供后续转换时使用。 对于估计器来说,fit()方法用于拟合模型,让模型能够适应训练数据。模型通过学习训练数据中的关系和规律,尝试预测新的未知数据。