sklearn中transform和fit_transform有什么区别
在本文中,我们将使用Python讨论sklearn中的’ transform ‘和’ fit_transform ‘之间的区别。
在数据科学和机器学习中,scikit-learn包提供的fit()、transform()和fit_transform()等方法是广泛用于数据预处理和模型拟合的重要工具之一。这里的任务是讨论两者的区别 fit() , transform和fit_transform()以及如何使用此包附带的内置函数实现它们。
- fit(data) 该方法用于计算给定特征的均值和标准差,以进一步用于缩放。
- transform(data) 方法用于使用.fit()方法计算的均值和STD dev执行缩放。
- fit_transform() 方法既适合又转换。
这三种方法之间有着密切的联系。在详细理解它们之前,我们必须在任何典型的机器学习问题中将数据集分割为训练数据集和测试数据集。在训练数据集上执行的所有数据处理步骤也适用于测试数据集,但格式略有不同。了解了这三种方法,就能很好地理解这种差异。
需要的安装包
pip install scikit-learn
pip install pandas
让我们考虑一下,我们必须将缩放作为要执行的数据处理步骤之一。为了演示这个示例,让我们考虑一个内置的虹膜数据集。
示例:
Python3
from sklearn import datasets
import pandas as pd
iris = datasets.load_iris()
data = pd.DataFrame(iris.get('data'), columns=[
'sepal length', 'petal length', 'sepal width', 'sepal width'])
data.head()
输出:
Iris dataset
让我们把数据分成火车和测试两个部分。
Python3
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
data.iloc[:, :-1], data['sepal width'],
test_size=0.33, random_state=42)
现在让我们对萼片宽度柱进行标准缩放。一般来说,缩放意味着将列转换为普通的数字缩放,特别是标准缩放将感兴趣的列转换为一个均值= 0和标准差= 1的数字范围。
fit() 方法
fit函数根据标准缩放计算转换列的公式,但不应用实际的转换。计算被存储为一个合适的对象。fit方法不返回任何东西。
示例:
Python3
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(data['sepal width'])
输出:
StandardScaler()
transform()方法
transform方法利用fit()方法中的fit对象,并将实际的转换应用到列上。因此,fit()和transform()是一个两步过程,它在第二步中完成转换。这里,与fit()方法不同,transform方法返回实际转换后的数组。
示例:
Python3
scaler.transform(data['sepal width'])
输出:
fit_transform()方法
正如我们在上一节中讨论的,fit()和transform()是一个两步过程,可以使用fit_transform方法将其简化为一个一次性过程。当使用fit_transform方法时,我们可以在单个步骤中计算和应用转换.
示例:
Python3
scaler.fit_transform(X_train)
输出:
如我们所见,fit()、transform()和fit_transform()的最终输出将是相同的。现在,我们必须确保对测试数据集应用相同的转换。但是,我们不能在测试数据集上使用fit()方法,因为这将是错误的方法,因为它可能会给测试数据集带来偏差。因此,让我们尝试直接在测试数据集中使用transform()方法。
示例:
Python3
scaler.transform(X_test)
输出:
正如我们所看到的,两者都有不同的输出,这可能是sklearn将这种数据处理步骤分成两步的原因之一。