Python机器学习库sklearn详解

Python中,sklearn库无疑是机器学习领域最有用的库之一。它包含了大量高效的工具,用于机器学习和统计建模,涵盖分类、回归、聚类和降维等多种任务。本文将带深入了解sklearn中的不同类型对象,以及它们在机器学习流程中的功能和使用时机。

sklearn对象类型

sklearn的设计中主要包括三种类型的对象:

  • 估计器(Estimator)
  • 预测器(Predictor)
  • 转换器(Transformer)

接下来,将探讨fit()、transform()、fit_transform()和predict()这些重要方法的用途。

fit()方法用于在训练数据上计算初始参数,并将其保存为内部对象状态。例如,该方法可以计算参数μ(均值)和σ(标准差)并将其保存为内部对象。这是一个只进行计算而不返回任何结果的黑盒过程。

transform()方法使用上述计算出的初始值,并返回修改后的训练数据作为输出。使用相同的参数,该方法可以转换特定数据集。它用于建模前的预处理

fit_transform()方法结合了上述两个步骤。它首先调用fit(),然后对同一数据调用transform()。它用于训练数据,以便可以对训练数据进行缩放,并学习缩放参数。这里构建的模型将学习训练集特征的均值和方差。然后,这些学习到的参数进一步用于缩放测试数据。

fit()方法用于在训练数据上计算参数或权重(例如线性回归中的coef()返回的参数),并将其保存为内部对象状态。predict()方法使用上述计算出的权重对测试数据进行预测。

fit()、transform()和fit_transform()方法的区别

让通过一个例子来理解这些方法的区别。假设有一个数组arr = [1,2,3,y,5],并且有一个sklearn类FillMyArray来填充数组。当声明类的实例:

my_filler = FillMyArray()

手头有fit()、transform()和fit_transform()方法。

fit(): my_filler.fit(arr)将计算要分配给x的值以填充数组,并将其存储在实例my_filler中。

transform(): 在之前的.fit()阶段计算并存储值之后,可以调用my_filler.transform(arr),它将返回填充后的数组[1,2,3,4,5]。

fit_transform(): 如果执行my_filler.fit_transform(arr),可以省略一行代码,并直接返回计算并分配给填充数组的值。

为什么在训练数据上调用fit_transform(),在测试数据上调用transform()?

这里的关键问题是“数据泄露”。fit_transform()进行某些计算后进行转换,假设从某些数据中计算列的均值或平均值,然后根据它替换缺失值。对于训练集,需要进行计算然后转换。

然而,对于测试集,机器学习基于训练集的学习进行预测,因此它不需要执行计算,只需要进行转换。如果甚至在测试数据上执行fit()方法,将计算一个新的均值和方差,这将是一个天真的规模,适用于每个特征,并将允许模型在测试数据上学习。然而,将不再能够将其作为对模型的惊喜,并且它将无法给一个关于模型在未见数据上性能的好估计,这当然是最终目标。

这是在构建机器学习模型时对数据进行缩放的一般程序。这样模型就不会对特定特征产生偏见,同时防止模型学习测试数据的趋势。

Python中的实现

以下是在文章的前半部分学习的所有功能的实现。

# 步骤1: 导入必要的Python库,然后读取并加载“TITANIC”数据集。 import pandas as pd df = pd.read_csv('titanic.csv', usecols=['Pclass','Age','Fare','Survived']) print(df.head()) # 步骤2: 计算每列的缺失值数量。 df.isnull().sum() # 步骤3: 用它们的中位数填充“Age”列的缺失值。 df['Age'].fillna(df.Age.median(),inplace=True) # 步骤4: 再次检查是否有任何列存在缺失值。 df.isnull().sum() # 步骤5: 定义独立(预测器)和依赖(响应)变量。 X = df.iloc[:,1:] y = df.iloc[:,0] # 步骤6: 将数据集分割成训练和测试子集。 fromsklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42) # 步骤7: 使用标准缩放器,首先拟合然后转换数据集。 fromsklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train_fit = scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) pd.DataFrame(X_train_scaled) # 步骤8: 直接使用fit_transform()函数并验证结果。 X_train_scaled = scaler.fit_transform(X_train) pd.DataFrame(X_train_scaled) # 步骤9: 转换测试数据。 X_test_scaled = scaler.transform(X_test) pd.DataFrame(X_test_scaled)

在这里,观察到fit_transform()函数给出的结果与分别使用fit()和transform()函数的结果相同。transform()函数作用于测试数据,predict()函数作用于测试数据。

感谢阅读!如果喜欢这篇文章,并且想了解更多,请点击链接访问关于数据科学机器学习的其他文章。

请随时通过LinkedIn或电子邮件与联系。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485